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

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

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

ElasticSearch介绍

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

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

  • FST(Finite State Transducer)

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

  • BDK Tree

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

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

扩展性

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

高可用

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

file

ElasticSearch全家桶

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

file

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

file

Logstash优点

提供了大量的用于数据过滤,转换的插件drop: 丢掉不需要的数据grok : 正则匹配抓取数据date : 从数据中解析date属性,用作 Elasticsearch document 的 timestampmetrics: 获取 logstash 的 metricscodec.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 个备份, enableall ,则 Elasticsearch 集群的实际数据增加量约等于 4T 。如果每天需要存 4T 数据,假如保存 30 天的数据,需要的最低存储是 120T ,一般还会加 20% 的 buffer 。至少 需要准备 144T 的存储空间。 根据日志场景的特点,可做 hot-node, warm - node 划分。hot-node 通常用 SSD 磁盘, warm-node 采用普通机械盘。

  1. 单节点配置:每个节点多少索引,多少 shard ,每个 shard 大小控制在多少。
    根据总数据量和单节点配置,得出集群总体规模。
    单节点,根据经验通常 CPU :Memory的配比是1:4。
    Memory : Disk 的配比为 1 : 24 。
    Elasticsearch heap 的 xmx 设置通常不大于 32g 。
    Memory 和 shard 的配比在 1 : 20 ~ 1:25 之间。
    每个shard的大小不超过 5 0g 。
实践案例分析

产线上出现服务 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/threadpool / 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集群运维实践

我们主要关注:

  1. 集群健康状态
    2 . 集群索引和搜索性能
  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 )

filefile

ElasticSearch优化经验

索引优化

  1. 提前创建索引
  2. 避免索引稀疏,index 中 document 结构最好保持一致,如果 document 结构不一致,建议分 index ,用一个有少量 shard 的 index 存放 field 格式不同的 document 。
    3 . 在加载大量数据时可设置 refreshinterval =-1 , index.numberof_replicas =0 ,索引完成后再设回 来。
    4 . load 和 IO 压力不大的情况,用 bulk 比单条的 PUT/DELETE 操作索引效率更高 。
    5 . 调整 index buffer( indices.memory.indexbuffersize ) 。
  3. 不需要 score 的 field ,禁用 norms;不需要 sort 或 aggregate 的 field ,禁用 doc_value 。
查询优化

使用 routing 提升某一维度数据的查询速度。避免返回太大量的搜索结果集,用 limit 限制。如果 heap 压力不大,可适当增加 node query cache( indices.queries.cache.size ) 。增加 shard 备份可提高查询并发能力,但要注意 node 上的 shard 总量。定期合并 segment 。

阿里云ElasticSearch服务

阿里云提供的ElasticSearch服务包含了监控、报警、日志可视化、一键扩容等特点filefilefilefile

声明:本号所有文章除特殊注明,都为原创,公众号读者拥有优先阅读权,未经作者本人允许不得转载,否则追究侵权责任。

关注我的公众号,后台回复【JAVAPDF】获取200页面试题!5万人关注的大数据成神之路,不来了解一下吗?5万人关注的大数据成神之路,真的不来了解一下吗?5万人关注的大数据成神之路,确定真的不来了解一下吗?

欢迎您关注《大数据成神之路》

大数据技术与架构

备注:所有内容首发公众号,这里不保证实时性和完整性,大家扫描文末二维码关注哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
订餐系统需求分析和后期运维介绍 随着互联网的普及,订餐系统已经成为了很多人的首选,因为它的便利性和高效性可以有效地提升用户的体验。本文将从需求分析和后期运维两个方面来介绍订餐系统。 一、需求分析 1.用户需求 对于用户而言,订餐系统的主要功能是提供在线点餐、支付和配送服务。因此,订餐系统必须要满足以下需求: (1)用户可以方便地浏览餐厅菜单,选择自己喜欢的菜品,添加到购物车中。 (2)用户可以选择支付方式,并完成支付,包括线上支付和线下支付。 (3)用户可以选择送餐地址、时间等信息,并提交订单。 (4)用户可以查看订单状态、配送状态等信息,方便掌握配送进度。 2.商家需求 对于商家而言,订餐系统的主要功能是提供在线接单、管理订单和配送服务。因此,订餐系统必须要满足以下需求: (1)商家可以方便地管理自己的菜单、库存和价格等信息。 (2)商家可以方便地接受订单、管理配送,并提供配送状态反馈。 (3)商家可以方便地管理订单状态、配送状态等信息,并提供相应的数据分析功能。 二、后期运维 1.系统架构 订餐系统的架构应该是高可用、高并发的。因此,可以采用微服务架构,将不同的功能模块拆分成独立的服务,通过消息队列进行通信。同时,还需要进行负载均衡、容错处理等操作,以保证系统的稳定性和可靠性。 2.数据库设计 订餐系统的核心数据主要包括订单、用户、菜单和库存等信息。因此,需要采用合适的数据库设计方案,进行分库分表、读写分离等操作,以支持高并发的访问和操作。 3.安全性 订餐系统需要保证用户数据的安全性,因此需要采用 HTTPS 协议进行数据传输加密,采用 OAuth2.0 协议进行用户认证和授权。同时,还需要进行安全漏洞扫描、日志监控等操作,以保证系统的安全性。 4.监控和日志 订餐系统需要进行实时监控和日志记录,以方便进行故障排查和数据分析。可以采用 ELK(Elasticsearch、Logstash 和 Kibana)等工具进行监控和日志记录。 总之,订餐系统的设计和运维需要综合考虑多个方面的因素,包括用户需求、商家需求、系统架构、数据库设计、安全性、监控和日志等。只有在这些方面都考虑到位,才能保证订餐系统的高效性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王知无(import_bigdata)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值