聊聊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
2
https://github.com/danielqsj/kafka_exporter/issues/134  
https://github.com/Shopify/sarama/pull/1707

其中提到kafka_exporter中使用了saramav1.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
GO    := GO111MODULE=on go
pkgs = $(shell $(GO) list)

PREFIX ?= $(shell pwd)

all: format build

format:
@echo ">> formatting code"
@$(GO) fmt $(pkgs)

build:
@echo ">> building binaries"
@GOOS=$(shell uname -s | tr A-Z a-z) \
GOARCH=$(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m)))
@$(GO) build $(PREFIX)

.PHONY: all format build

clean :
rm kafka_exporter

4、修改go.mod文件中sarama的版本:

1
go mod edit --require=github.com/Shopify/sarama@v1.26.4

5、编译,其中有一段加载依赖的时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ make
go: finding github.com/davecgh/go-spew v1.1.1
go: finding github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563
go: finding github.com/konsorten/go-windows-terminal-sequences v1.0.1
go: finding github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21
go: finding github.com/Shopify/sarama v1.26.4
......
go: downloading github.com/prometheus/client_golang v1.0.0
go: downloading github.com/prometheus/common v0.5.0
go: downloading github.com/Shopify/sarama v1.26.4
......
>> formatting code
>> building binaries

6、节点测试:

1
nohup ./kafka_exporter --kafka.server=IP:9092 &

访问http://IP:9308/metrics即可看到监控的Metric数据了,此时可以操作节点上下线来观察kafka_exporter中刷新Metrics时kafka_brokers数量的变化。

结束

kafka_exporter中对我来说存在的问题就处理掉了,毕竟节点服务是否正常工作是最基本的监控指标,这样就可以在Grafana中进行可视化、配置告警条件了😎

0%