跳到主要内容

使用 Prometheus 监控 kafka

监控配置

1. 启动 JMX 服务

首先需要在 Kafka 中启用 JMX 服务以获取资源信息

# 1. 修改 kafka-server-start.sh 脚本
# 在第一行增加 export JMX_PORT="9999"
# ambari kafka 路径: `/usr/hdp/current/kafka-broker`
cd /usr/hdp/current/kafka-broker
vi bin/kafka-server-start.sh
# 增加
export JMX_PORT="9999"

修改完所有节点后,在ambari 重启所有 kafka节点

2. 启动 jmx_exporter

需要启动 jmx_exporter,让 JMX 信息可以直接通过 HTTP 方式访问,以便 ARMS Prometheus 监控抓取

我已经做好docker 镜像,上传到镜像仓库了,修改一下yaml文件使用docker-compose 起一下就可以

# docker-compose.yml
version: '2.0'
services:
kafka-expoter:
# 打包好的镜像
image: repository.anxinyun.cn/devops/jmx_prometheus_httpserver:0.13.1
container_name: jmx_prometheus_httpserver
restart: always
# 修改下 ip
command: ["bash","./start.sh","10.8.30.37"]
ports:
- 9997:9997
- 9998:9998
# 启动服务
docker-compose -f ./docker-compose.yml up -d

3. 配置 RMS Prometheus 监控以抓取 Kafka 应用的数据

在 配置文件增加

additionalScrapeConfigs: []
# 以下是增加的内容
- job_name: 'kafka-cluster'
static_configs:
- targets:
- '10.8.30.35:9997'
- '10.8.30.36:9997'
- '10.8.30.37:9997'

重启 Prometheus

4. 通过 Grafana 大盘展示 Kafka 应用的数据

  1. 打开 Prometheus 的 Grafana 首页,鼠标悬浮在左边 菜单栏 ‘+’ ,在子菜单中选择 ‘Import’

  2. 在打开的界面中 Grafana.com Dashboard 输入框中输入 10973 ,然后单击 Load ,

  3. 在配置选项中

    Name 配置 dashboard 名称

    Fold 配置你想在哪个文件夹显示这个dashboard

  4. 单击 Import (Overwrite)

监控报警配置

kafka 重要的监控指标有几个

kafka broker 层面

metric namedescription
OfflinePartitionsCount下线的 partition 的数量, 一般 >0 就说明集群有问题
ActiveControllerCount标记哪个 broker 节点是 controller
UncleanLeaderElectionPerSec争议的 leader 选举次数
PartitionCount每个 broker 节点的 topic partition 的数量, 用于决定是否需要rebalance
UnderReplicatedPartitions复制中的 Partition 数量
Bytes In bytes Per Topic Top 10按照数据量计算前十个写入的 Topic
Bytes Out bytes Per Topic Top 10按照数据量计算前十个读取的 Topic
Message In Per Topic Top 10按照消息量计算前十个读取的 Topic

JVM 层面

这个重点关注两个指标

metric namedescription
JVM Memory UsageJVM Heap 占用的内存
Time Spend in GCJVM GC 所占的时间比例, 定位是否有 GC 问题

系统层面

常见的指标

metric namedescription
CPU Usage系统 CPU 使用率
Memory Usage系统 Memory 使用率
Disk Usage磁盘占用
IO UtilizationIO 使用率, 看是否有磁盘 IO 瓶颈
Network In/Out网络吞吐

我们配置 OfflinePartitionsCount 的告警,主要是发现kafka集群的问题

其他的指标一般不会有问题,可以重点关注

OfflinePartitionsCount的告警配置

首先 添加一个 panel :

Query

A 指标 填写 max(kafka_controller_kafkacontroller_offlinepartitionscount)

最后展示效果如下:

告警通知: