监控方式
默认情况下, Kafka metrics 所有的 metric 都可以通过 JMX 获取,暴露kafka metrics 支持两种方式
1.在 Kafka Broker 外部, 作为一个独立进程, 通过 JMX 的 RMI 接口读取数据. 这种方式的好处是有任何调整不需要重启 Kafka Broker 进程, 缺点是多维护了一个独立的进程。
2.在 Kafka Broker 进程内部读取 JMX 数据, 这样解析数据的逻辑就在 Kafka Broker 进程内部, 如果有任何调整, 需要重启 Broker。选择暴露 kafka-metric 方式。
选择暴露 kafka-metric 方式
第一种需要外部多维护一个程序,而且还要考虑之后各种版本升级,实现起来比较繁琐,还好的是github上有许多优秀的开源kafka_exporter 下载过来直接启动就好了。简单介绍下
git项目地址:https://github.com/danielqsj/kafka_exporter
读取 JMX 的数据
jmx_prometheus_httpserver 通过独立进程读取 JMX 的数据
jmx_prometheus_javaagent 使用 Java Agent 方式, 尽量无侵入(仅需在 java 命令行中使用 -javaagent 参数)的启动 in-process library, 读取 JMX 数据.
Prometheus 采用了 PULL 方式, Prometheus 主动抓取 metrics 数据, 而不是靠客户端主动 PUSH 数据, 因此 jmx_prometheus 都是通过暴露 HTTP 端口的方式暴露 metrics 数据, 方便 Prometheus 抓取数据.
选第二种方式监控
1 | wget https://raw.githubusercontent.com/prometheus/jmx_exporter/master/example_configs/kafka-2_0_0.yml |
在kafka-server-start.sh添加几行
1 | export JMX_PORT="9999" |
prometheus配置
1 | - job_name: 'kafka-cluster' |
grafana模板
1 | { |