前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Elasticsearch在日志分析领域应用和运维实践

Elasticsearch在日志分析领域应用和运维实践

作者头像
大数据真好玩
发布于 2019-10-30 03:00:51
发布于 2019-10-30 03:00:51
9390
举报
文章被收录于专栏:暴走大数据暴走大数据

By 大数据技术与架构

场景描述:Elasticsearch及相关产品,介绍基于ELK + Kafka日志分析系统,Elasticsearch优化经验,阿里云 Elasticsearch服务以及Elasticsearch 运维实践。

关键词:ELK 运维 优化

本次分享是由来自阿里巴巴的高级工程师赵汉青带来的。主要讲述了:

  • 基于ELK + Kafka 的日志分析系统
  • Elasticsearch 优化经验
  • Elasticsearch 运维实践

ElasticSearch介绍

分布式实时分析搜索引擎,优点包括:

  • 查询近实时
  • 内存消耗小,搜索速度快
  • 可扩展性强
  • 高可用
数据结构
  • FST(Finite State Transducer)

这种数据结构适用于文本查询。通过对词典中单词前缀和后缀的重复利用,压缩存储空间,压缩比率一般在 3~20 倍之间。O( len ( str )) 的查询时间复杂度。范围搜索,前缀搜索比传统的 hashmap 有明显优势。

  • BDK Tree

适用于数值型,地理信息( geo )等多维度数据类型。当K=1, 二叉搜索树,查询复杂度 log(N)

K=2, 确定切分维度,切分点选这个维度的中间点

扩展性

通过索引分片机制,实现集群的横向扩展

高可用

通过shard冗余备份,跨可用区部署,数据快照 (snapshot) 。应对集群节点故障,数据损坏。

ElasticSearch全家桶

Kibana : 数据可视化,与 elasticsearch 交互。Elasticsearch: 存储,索引,搜索。Logstash: 数据收集,过滤,转换。Beats: 比 logstash 更轻巧 , 更多样化 : Filebeat, Metricbeat, Packetbeat, Winlogbeat …

基于ELK和Kafka的日志分析系统

Logstash优点

提供了大量的用于数据过滤,转换的插件 drop: 丢掉不需要的数据 grok : 正则匹配抓取数据 date : 从数据中解析date属性,用作 Elasticsearch document 的 timestamp metrics: 获取 logstash 的 metrics codec.multiline :多行数据合成一条记录 fingerprint : 防止插入重复的数据

Logstash 缺点:收集 log 效率低,耗资源。Filebeat: 弥补的缺点,但自身插件较少。

使用Kafka进行日志传输

Kafka 有数据缓存能力。Kafka 数据可重复消费。Kafka 本身高可用,防止数据丢失。Kafka 的 throughput 更好。Kafka 使用广泛。

实践经验:不同的 service ,创建不同的 topic 。根据 service 的日志量,设定 topic partition 个数。按照 kafka partition 的个数和消费该 topic 的 logstash 的个数,配置 consumer_threads。尽量明确 logstash 和对应消费的 topic ( s) ,配置消费的 topic 少用通配符。

集群规划的基本问题:

1. 总数据量大小:每天流入多少数据,保存多少天数据。

每日增加的数据量:每日新增的 log 量 * 备份个数 。

如果 enable 了 _ all 字段,则在上面的基础上再翻一倍。比如每天新增 1T 的 log ,每个 shard 有 1 个备份, enable_all ,则 Elasticsearch 集群的实际数据增加量约等于 4T 。

如果每天需要存 4T 数据,假如保存 30 天的数据,需要的最低存储是 120T ,一般还会加 20% 的 buffer 。

至少 需要准备 144T 的存储空间。根据日志场景的特点,可做 hot-node, warm - node 划分。

hot-node 通常用 SSD 磁盘, warm-node 采用普通机械盘。

2. 单节点配置:每个节点多少索引,多少 shard ,每个 shard 大小控制在多少。

根据总数据量和单节点配置,得出集群总体规模。

单节点,根据经验通常 CPU :Memory的配比是1:4。

Memory : Disk的配比为 1 : 24 。

Elasticsearch heap 的 xmx 设置通常不大于 32g 。

Memory 和 shard 的配比在 1 : 20 ~ 1:25 之间。

每个shard的大小不超过50g 。

实践案例分析

产线上出现服务 failover , backup 集群日志量会忽然增大, kafka 里的数据量也突然增多,单位时间内 logstash 消费 kafka注入Elasticsearch的数据量也会增大,如果某些正在插入数据的 primary shard 集中在一个node上,该node会因为需要索引的数据量过大、同时响应多个logstash bulk 请求等因素,导致该 node 的 Elasticsearch 服务过于繁忙 。

若无法响应 master 节点发来的请求(比如 cluster health heartbeat), master 节点会因为等待该节点的响应而被 block ,导致别的节点认为 master 节点丢失,从而触发一系列非常反应,比如重选master 。

若无法及时响应 logstash 请求, logstash connect elasticsearch 便会出现 timeout , logstash 会认得这个 Elasticsearch 为 dead ,同时不再消费 kafka 。Kafka 发现在同一个 consumer group 里面某个 consumer 消失了,便会触发整个 consumer group 做 rebalance ,从而影响别的 logstash 的消费,影响整个集群的吞吐量。

典型 羊群效应 ,需要消除头羊带 来的影响。可通过 elasticsearch API: GET/_cat/thread_pool / bulk?v&h =name , host,active,queue,rejected,completed 定位哪个节点比较忙:queue 比较大, rejected 不断增加。然后通过 GET /_cat/shards 找到该 node 上活跃的 shard 。最后再通过 POST /_cluster/reroute API 把 shard 移到 load 比较低的 node 上,缓解该 node 的压力。

ElasticSearch集群运维实践

我们主要关注:

  • 集群健康状态 2 . 集群索引和搜索性能
  • 节点 cpu , memory, disk 使用情况

集群green ,正常。

集群yellow,主要是有 replica shard 未分配。

集群 red ,是因为有 primary shard 未分配。

主要原因:集群 node disk 使用率超过 watermark ( 默认 85% )。可通过 api GET/_cat/ allocation 查看 node 的磁盘使用率。可通过 api GET/_cluster/ settings 查看 cluster.routing.allocation.enable 是否被禁止。可通过 api GET /_cluster/allocation/explain? pretty 查看 shard 未分配到 node 的具体原因。

监控工具推荐使用:cerebro( https://github.com/lmenezes/cerebro )

ElasticSearch优化经验

索引优化
  • 提前创建索引
  • 避免索引稀疏,index 中 document 结构最好保持一致,如果 document 结构不一致,建议分 index ,用一个有少量 shard 的 index 存放 field 格式不同的 document 。3 . 在加载大量数据时可设置 refresh_interval =-1 , index.number_of_replicas =0 ,索引完成后再设回 来。4 . load 和 IO 压力不大的情况,用 bulk 比单条的 PUT/DELETE 操作索引效率更高 。5 . 调整 index buffer( indices.memory.index_buffer_size ) 。
  • 不需要 score 的 field ,禁用 norms;不需要 sort 或 aggregate 的 field ,禁用 doc_value 。
查询优化
  • 使用 routing 提升某一维度数据的查询速度。
  • 避免返回太大量的搜索结果集,用 limit 限制。
  • 如果 heap 压力不大,可适当增加 node query cache( indices.queries.cache.size ) 。
  • 增加 shard 备份可提高查询并发能力,但要注意 node 上的 shard 总量。
  • 定期合并 segment 。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据真好玩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
历届试题 兰顿蚂蚁
  平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。   蚂蚁的头部朝向为:上下左右其中一方。
AI那点小事
2020/04/20
6390
历届试题 兰顿蚂蚁
java矩阵类,矩阵的乘法
问题如下 矩阵成积.jpg 我采用的是3重循环,先计算的列的结果,应该还可以先计算行的结果,然后求出矩阵的乘法。没有过多的技巧,就是循环的使用。 相关的code package day20180
热心的社会主义接班人
2018/08/02
1.7K0
java矩阵类,矩阵的乘法
Leetcode#867. Transpose Matrix(转置矩阵)
题目描述 给定一个矩阵 A, 返回 A 的转置矩阵。 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 示例 1: 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]] 示例 2: 输入:[[1,2,3],[4,5,6]] 输出:[[1,4],[2,5],[3,6]] 提示: 1 <= A.length <= 1000 1 <= A[0].length <= 1000 思路 新建一个矩阵res,res[i][j]=A[j][i] 代
武培轩
2018/09/28
9890
线性代数整理(二)正交性,标准正交矩阵和投影坐标转换和线性变换
单从一个矩阵来看,我们可以发现该矩阵的列秩和行秩是相等的,都为2,那么这是一个特例还是矩阵的特性呢?其实这是矩阵的特性,矩阵的行秩=矩阵的列秩。
算法之名
2021/03/02
1.5K0
线性代数整理(二)正交性,标准正交矩阵和投影坐标转换和线性变换
算法提高 矩阵相乘
问题描述   小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容。   当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的。   小明希望你来帮他完成这个任务。
AI那点小事
2020/04/20
5900
算法提高 矩阵相乘
算法训练 矩阵乘法
问题描述   输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。 输入格式   第一行,空格隔开的三个正整数m,s,n(均不超过200)。   接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。   接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。 输出格式   m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。 样例输入 2 3 2 1 0 -1 1 1 -3 0 3 1 2 3 1 样例输出 -3 2 -8 2
AI那点小事
2020/04/20
6910
算法训练 矩阵乘法
数独终盘生成的几种方法
为了完成矩阵的转换,我们需要有可用的数独终盘矩阵作为种子矩阵才行。可以采用如下做法完成:
孟君
2020/04/22
1.8K0
数独终盘生成的几种方法
我整理了50道经典Java算法题,直接进了字节跳动!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
1.4K0
java数据结构和算法(七)
1. 二分查找(非递归) 代码实现 public class BinarySearchNoRecursion { public static void main(String[] args) { int[] arr = {1, 23, 46, 413, 880, 999}; int index = binarySearch(arr, 999); System.out.println(index); } /** * 二分查找
shaoshaossm
2022/12/26
4740
java数据结构和算法(七)
【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的。同理,声明三维数组时需要三对中括号,中括号的位置可以在数据类型的后面,也可以在数组名称的后面,其它的依次类推。 例如: int[][] map; char c[][]; 和一维数组一样,数组声明以后在内存中没有分配具体的存储空间,也没有设定数组的长度。  ---------------------------------------------
Angel_Kitty
2018/04/09
1.5K0
【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
最短路问题——Java语言实现
最短路问题分为俩个模块,单源最短路和多源最短路问题,而单源最短路中又分为4种算法,分别总结一下
秋名山码神
2022/12/13
3290
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
目录 A、外星日历 B、兴趣小组 C、纸牌三角形 D、承压计算 E、杨辉三角(填空) F、最大公共子串 G、Excle地址 H、拉马车 I、青蛙跳杯子 J、图形排版 A、外星日历 某星系深处发现了文明遗迹。 他们的计数也是用十进制。 他们的文明也有日历。日历只有天数,没有年、月的概念。 有趣的是,他们也使用了类似“星期”的概念, 只不过他们的一个星期包含了9天, 为了方便,这里分别记为: A,B,C....H,I 从一些资料上看到, 他们的23日是星期E 他们的190日是星期A 他们的3
红目香薰
2022/11/29
6490
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
曾经做过的40道程序设计课后习题总结(一)
曾经做过的40道程序设计课后习题总结(一) 课后习题目录 1 斐波那契数列 2 判断素数 3 水仙花数 4 分解质因数 5 杨辉三角 6 学习成绩查询 7 求最大公约数与最小公倍数 8 完全平方数 9 统计字母、空格、数字和其它字符个数 10 求主对角线之和 11 完数求解 12 求s=a+aa+aaa+aaaa+aa...a的值 13 高度计算 14 乘法口诀 15 无重复三位数 16 菱形打印 17 利润计算 18 第几天判断 19 从小到大输出数列 20 猴子吃桃
闵开慧
2018/04/02
1K0
曾经做过的40道程序设计课后习题总结(一)
Java-矩阵乘法
"Never, never, never, never give up."  -----Winston Leonard Spencer Churchill
圆号本昊
2021/09/24
9500
Java-矩阵乘法
【数据结构】数组和字符串(二):特殊矩阵的压缩存储:对角矩阵——一维数组
  矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造成很大的空间浪费。为节约存储空间和算法(程序)运行时间,通常会采用压缩存储的方法。
Qomolangma
2024/07/30
2070
【数据结构】数组和字符串(二):特殊矩阵的压缩存储:对角矩阵——一维数组
java 对多维数组的工具类(比如遍历多维数组工具类)
目录 1 遍历int类型二维数组 2 使用流遍历int 类型二维数组 3 遍历 float 类型二维数组 4 遍历 double 类型二维数组 5 遍历 int 类型 3维数据 6 遍历 Float 类型 3维数据 1 遍历int类型二维数组 public static void printErIntArray(int[][] matrix){ for (int i = 0; i < matrix.length; i++) { //this equals to the row in our
一写代码就开心
2022/06/28
2.2K0
C++实现矩阵类(附代码和功能)
阅读这篇文章需要掌握C++类的知识以及线性代数的知识,如果有疑问,可在文章下方评论,作者会尽快回复;本文是在作者阅读了平冈和幸的程序员的数学3:线性代数之后而写,在代码设计上借鉴了书中的方法。
全栈程序员站长
2022/09/13
2K0
C++实现矩阵类(附代码和功能)
数据结构基础(一)数组,矩阵
有一个等式,数据结构+算法=程序,说明了数据结构对于计算机程序设计的重要性。数据结构是指数据元素的集合(或数据对象)及元素间的相互关系和构造方法。数据对象中元素之间的相互关系称为数据的逻辑结构,数据元素及元素之间关系的存储形式称为存储结构(或物理结构)。
AlbertYang
2020/09/08
1.5K0
数据结构基础(一)数组,矩阵
Java基础测试「建议收藏」
public class Practice{ //入口方法 public static void main(String[]args){ //1.百钱百鸡 checken(); //2.素数 primeNumber(100,200); //3.打印图形 graphical(4); multiplicationTable(); //4.年龄 int age=getAge(5); System.out.println(“第五个人”+age+”岁”); //5.杨辉三角 printYang(10); //6.排序 int[]num={12,34,98,3,7,11}; System.out.println(“原始数组”); print(num); //冒泡排序 System.out.println(“冒泡排序”); bubbleSort(num); //选择排序 System.out.println(“选择排序”); selectSort(num); System.out.println(“插入排序”); insertSort(num); //7.猴子桃子 System.out.println(“一共有”+peach()+”个桃子”); } /* 1.编写程序解决“百钱买百鸡”问题。公鸡五钱一只,母鸡三钱一只,小鸡 一钱三只,现有百钱欲买百鸡,共有多少种买法? money:5*n1+3*n2+1/3*n3=100 n:n1+n2+n3=100 */ public static void checken(){ //外层循环买公鸡 for(int n1=0;n1<20;n1++){ //内层循环买母鸡 for(int n2=0;n2<33;n2++){ //判断 if(15*n1+9*n2+(100-n1-n2)==300){ System.out.println(“买法:”+n1+”\t”+n2+”\t”+(100-n1-n2)); } } } } /** 2.判断100-200之间有多少个素数,并输出所有素数。 */ public static void primeNumber(int low,int hig){ for(int i=low;i<=hig;i++){ for(int j=2;j<=i;j++){ if(i%j==0){ if(i!=j){ break; }else{ System.out.print(i+”\t”); } } } } System.out.println(); } /* 3.输出以下图形 * 1*1=1 *** 1*2=2 2*2=4 ***** 1*3=3 2*3=6 3*3=9 ******* …. */ public
全栈程序员站长
2022/09/08
3020
【数据结构】数组和字符串(三):特殊矩阵的压缩存储:三角矩阵、对称矩阵——一维数组
  矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造成很大的空间浪费。为节约存储空间和算法(程序)运行时间,通常会采用压缩存储的方法。
Qomolangma
2024/07/30
2500
【数据结构】数组和字符串(三):特殊矩阵的压缩存储:三角矩阵、对称矩阵——一维数组
推荐阅读
相关推荐
历届试题 兰顿蚂蚁
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档