kafka 监控(eagle)
topic:创建时topic名称
partition:分区编号
offset:表示该parition已经消费了多少条message
logSize:表示该partition已经写了多少条message
Lag:表示有多少条message没有被消费。
Owner:表示消费者
Created:该partition创建时间
Last Seen:消费状态刷新最新时间。
这里我们使用的工具的gtihub 地址是:
https://github.com/smartloli/kafka-eagle
文档地址是:
https://ke.smartloli.org/3.Manuals/1.Dashboard.html
在ELK使用的时候发现两个问题:
1:consumer 没有返回给producer offset,导致我们从控制台看到offset为0,同时我们的consumer没有指定consumer name ,导致在后台查看的时候我们不是到group_name 是那个topic。默认的是console consumer 加一串随机数,这里监控kafka消费情况用的是KafkaOffsetMonitor,当然也可以使用kafka-manager。比较下来还是使用KafkaOffsetMonitor(操作kafka-manager不当的话,可能会导致kafka集群挂了)
目前我们发现这种情况,有部分的消息会重复消费,但是有部分的消息不会重复消费,这个很奇怪,请教了一下开发,按理说offset 为 0 的话,这里应该会一直重试,这个问题目前还是没有查到根本原因,也只是暂时解决
目前暂时的解决方案是:kafka 指定group_id
2。发现filebeat 进程一重启,日志文件就会重新读取。其实默认情况下filebeat 有把被采集的所有日志的相关信息记录到registry.默认是关键安装目录下的data/registry 文件里,但是我们客户端启动了多个filebeat 进程,每个filebeat 采集不同的日志数据文件,所以所有的采集日志的信息都记录在了这一个registry 文件里。registry文件的内容格式如下:
{"source":"/data/logs/xdpay/xdpay-listener/xdpay-listener.log","offset":10451444,"FileStateOS":{"inode":539426564,"device":64784},"timestamp":"2018-07-13T15:37:10.067048399+08:00","ttl":-1}]
这里我们最关注的应该就是这个offset 了。我们可以cat 看到我们的registry文件的内容(我们对每个filebeat进程配置了不同的registry文件路径),这个文件内容永远只有一行,我们会看到这个offset一直在变(当然其他的也在变)。
调整方案为:每个进程指定一个registry路径 /data/package/filebeat/${APPID}/registry
这个是临时解决方案,按照官网的说法其实不配置也可以,但是我的环境不配置的话,虽然有默认的registry文件,但是每次重启filebeat的时候会导致日志文件重头读取,所以这个是暂时的解决方案。
当然后续可能还会陆陆续续有其他的问题,慢慢调吧!!!