聊聊kafka_exporter
最近给组内的kafka集群加上了Prometheus监控,用Grafana做可视化,了解到kafka_exporter
这个项目,但是从功能上对我来说还是存在问题需要解决,一起看看吧。
监控方式
关于使用Prometheus监控kafka的方式,在网上搜索结果基本是两种:
- JMX
- kafka_exporter
因为我不并擅长Java系列操作的原因,所以我选择了kafka_exporter的方案,使用起来更简单,Metrics也能满足我的需求。
简介
根据项目描述,kafka_exporter是Prometheus监控插件,支持kafka版本0.10.1.0
及以上,一个kafka集群只需要在任意节点上部署一个exporter。
项目地址: https://github.com/danielqsj/kafka_exporter
项目最后的Releases版本停留在2018-07-07的1.2.0
版本,不过仍然是可以使用的。使用方法也十分简单,下载编译好的文件运行即可:
1 | kafka_exporter --kafka.server=kafka:9092 [--kafka.server=another-server ...] |
默认使用9308端口,访问http://IP:9308/metrics/
能够看到抓取的Metrics信息, 就可以配置Prometheus、做Grafana可视化了。
发现问题
但1.2.0
版本的kafka_exporter
对我来说有一个很严重的问题,其监控的Metric kafka_brokers
并未随着Kafka集群节点的上下线产生变化,那么监控集群节点服务是否正常工作的要求就无法达到。
我在issue中找到了同样的问题,也找到了答案:
1 | https://github.com/danielqsj/kafka_exporter/issues/134 |
其中提到kafka_exporter
中使用了sarama
v1.22.1的版本,其中缺少删除元数据中不再存在的broker(s),升级版本可以解决这个问题。
解决问题
找到了引起问题的原因,就尝试解决一下吧😀
1、首先安装Go,下载源码,我的机器已经安装了go1.12.9
,安装过程就不再重复了
1 | git clone https://github.com/danielqsj/kafka_exporter.git |
2、因为我用Go Modules管理依赖,所以项目中的vendor目录直接删掉了,刚配置环境的话,需要开启go module:
1 | export GO111MODULE=on |
这个命令是临时的,只对这个会话生效,如果想要永久生效的话,需要修改环境变量文件,不过我将GO111MODULE
写进Makefile中,也达到了一样的效果。
3、项目通过Makefile方式进行编译,有必要查看下Makefile文件,其中包含了一部分我用不到的步骤,进行了修改:
1 | GO := GO111MODULE=on go |
4、修改go.mod
文件中sarama
的版本:
1 | go mod edit --require=github.com/Shopify/sarama@v1.26.4 |
5、编译,其中有一段加载依赖的时间:
1 | make |
6、节点测试:
1 | nohup ./kafka_exporter --kafka.server=IP:9092 & |
访问http://IP:9308/metrics
即可看到监控的Metric数据了,此时可以操作节点上下线来观察kafka_exporter
中刷新Metrics时kafka_brokers
数量的变化。
结束
kafka_exporter
中对我来说存在的问题就处理掉了,毕竟节点服务是否正常工作是最基本的监控指标,这样就可以在Grafana中进行可视化、配置告警条件了😎