首页 > 其他分享 >ELK日志缺失问题排查-Logstash消费过慢问题

ELK日志缺失问题排查-Logstash消费过慢问题

时间:2023-03-20 10:45:49浏览次数:49  
标签:ELK Kafka 排查 日志 poll Logstash

1. 背景

另外一个推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程

在一次上线之后,发现日志大量缺失,缺失率达90%,确认是由上线引起的,但因为当时没立即发现这个问题,所以没有通过回滚解决

上线的内容改动了推荐请求日志,数据格式未变,增加了单条日志的大小,估计有10~20%的增长

2. 分析

推荐日志的整个收集流程如下:

flowchart LR 线上机器日志 --> 平台Flume --> Kafka --> Logstash --> ES

2.1 版本信息

Flume: 未知
Kafka: 2.4.0
ELK: 6.8

2.2 ELK排查-日志和配置

  1. 排查确认ELK日志无报错
  2. Logstash配置也没有问题
  3. 本地启动Logstash也无报错

2.2 Kafka排查-Kafka数据是否丢失

  1. Kafka写入Hive确认无丢失

2.3 继续ELK排查-消费不动

在本地启动Logstash过程中发现ES的写入量增加了

于是怀疑是Logstash消费能力不足,于是让DB同学调整了参数Kafka input插件配置consumer_thread,修改后启动报错,于是又改回来

改回来重启之后的Logstash开始消费Kafka的数据,且消费速度很快,因为之前已经堆积了很多消息,但在半个小时之后,消费速度再次降到0附近

image.png

2.4 后续修改-无效

后来DB同学在Logstash中看到了报错

Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing the session timeout or by reducing the maximum size of batches returned in poll() with max.poll.records.

看起来报错和下面文章中一致,于是按照使用Kafka时一定要注意防止消费速度过慢触发rebalance而导致的重复消费做了下述修改,均无效果

  1. 升级集群,提供消费能力
  2. 使用新的group,意味着抛弃了堆积的数据
  3. 调整max.poll.interval.ms和max.poll.records,减少一批次拉取的数据

2.4 继续排查-日志格式问题

DB同学怀疑是日志格式或者是日志过大的问题,但也没有具体的bad case,后来提出,这个集群的单条日志是比之前排查的集群小很多的,但之前排查的集群数据已无缺失(整体数据量现在排查的集群更大一些)

对比之后发现两个集群ELK版本不同,目前排查的集群版本为6.8,而之前的是7.17,所以想尝试用7.17版本的Logstash写入6.8版本的ES

问题得以解决,虽然解决了问题,但由于Logstash版本跨度太大且Kafka Input插件也跨很多版本,所以无法得知原因

2.5 为何没有立即回滚

  1. 虽然是修改日志引发的问题,但这个修改也是一个修复,更希望能保留下来,最坏的打算是回滚
  2. 有紧急的查日志的需求,可以去Hive查,虽然不如Kibana使用的方便,但能提供足够的信息

3. 总结

最终通过升级Logstash的版本,从6.8改为7.17,解决了消费速度过慢的问题

标签:ELK,Kafka,排查,日志,poll,Logstash
From: https://www.cnblogs.com/songjiyang/p/17235466.html

相关文章

  • 一段多协程处理的日志文件代码
    packagemainimport( "bufio" "encoding/csv" "flag" "fmt" "os" "regexp" "sort" "strings" "sync" "time")typeBatteryPercentstruct{ Timestam......
  • IDEA之调试或运行的小助手日志插件Grep Console:不同颜色区分,查看日志看方便【工欲善其
    简介GrepConsole是一款方便开发者对idea控制台输出日志进行个性化管理的插件。这个插件还是很用的,在满屏的日志中,迅速找到自己关注的内容,调试程序的绝佳工具。功能特性......
  • NET中使用NLog记录日志转载
    .NET中使用NLog记录日志 以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂。下面小编就和大伙分享一下NLog的使用方式。引用NLog.Config在使用NLog......
  • 日志模块
    importloggingclassLogger:def__init__(self,stream=None,cmd_lever=logging.WARNING,file_level=logging.DEBUG,logname='mylog'):self.stream=s......
  • docker 运行filebeat收集日志
    1.简介beats首先filebeat是Beats中的一员。Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、......
  • SQLite 学习日志
    SQLite 语法SQLite是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的SQLite语法,向您提供了一个SQLite快速入门。大小写敏感性有个重要的点值得注意,S......
  • MyBatis日志四
    使用useGeneratedKeys和keyProperty属性<insertid="insert"parameterType="com.yogurt.po.Student"useGeneratedKeys="true"keyProperty="id">INSERTINT......
  • MyBatis学习日志五
    缓存一级缓存默认开启,同一个SqlSesion级别共享的缓存,在一个SqlSession的生命周期内,执行2次相同的SQL查询,则第二次SQL查询会直接取缓存的数据,而不走数据库,当然,若第一次和第......
  • 不背锅运维:享一个具有高可用性和可伸缩性的ELK架构实战案例
    写在开篇本文只分享各个链路环节的配置对接,关于环境的搭建,比如kafka集群、es集群的搭建等请自行完成。还有,业务应用的日志可以是你的其他业务日志,希望本文可以起到抛砖引......
  • 日志
    2022.2.11今天主要学习了状压dp和树形dp。小知识:for循环中使用registerint可以卡常数对double类型的数memset赋值成127相当于无穷大poj不能用万能头,必须开longlong......