Kafka现有开源的集群监控方案:kafka-manager、kafka-monitor、kafka-eagle、KafkaOffsetMonitor,但有所限制监控指标被固化,不易扩展、预警功能弱。Kafka集群的监控方案倾向于使用Grafana + Prometheus,监控数据采集器使用Kafka_exporter。

注:1个kafka集群只需要1个exporter,在集群上的任意1台服务器部署。

安装配置kafka_exporter

https://github.com/danielqsj/kafka_exporter/releases

使用 systemctl 管理

# 编写配置文件
cat > /usr/lib/systemd/system/kafka_exporter.service << "EOF"
[Unit]
Description=kafka_exporter
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
 
[Service]
ExecStart=/usr/local/kafka_exporter/kafka_exporter --kafka.server=172.20.32.218:9092
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

# 设置开机启动
systemctl daemon-reload
systemctl enable kafka_exporter
systemctl start kafka_exporter
systemctl status kafka_exporter 

检测状态

http://172.20.32.218:9308
也可以通过http://172.20.32.218:9308/metrics,看抓取的指标信息。

Prometheus 配置

添加 job

vim /etc/prometheus.yml

- job_name: 'kafka'
    static_configs:
    - targets: ['172.20.32.218:9308']
      labels:
        instance: 172.20.32.218

重启服务

systemctl restart prometheus

查看监控

浏览器查看监控信息:http://172.20.32.218:9090/targets
image.png

Grafana配置

导入官方模板 ,可在官方模板查看模板编号7589(推荐)

Grafana仪表盘参考

https://grafana.com/grafana/dashboards/7589 (推介)
https://grafana.com/grafana/dashboards/9018 (参考-新的)
https://grafana.com/grafana/dashboards/9947(参考-新的)
https://grafana.com/grafana/dashboards/10973(JMX-阿里云)
https://www.menina.cn/article/88
https://cloud.tencent.com/developer/news/377416

问题总结

运行systemctl后卡住了

不应该选forking类型;类型改为Type=simple(或删除Type=forking这句),问题便得到解决。

type说明
Type=oneshot这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
Type=idlesystemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。
Type=forkingsystemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程
Type=simple(默认值) systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型。

从上表可以看到,当类型为forking时,systemd会认为所运行当该服务本身是守护进程即本身会fork,且只有父进程退出后systemd才会退出,但由于参考例子并不是守护进程,故systemd一直处于阻塞等待状态,默认的simple无等待这一环节。

Grafana 导入模板后无数据

需要等待一段时间,同时也要注意目前任务是否有数据产生。