如何用Prometheus Exporter监控Kafka客户端(Java 8无Spring环境)
不用在每个Kafka读写方法里手动加Prometheus Collectors,直接利用Kafka客户端原生的JMX指标结合Prometheus JMX Exporter就能解决,全程无需修改业务代码,完全避免重复代码和大规模重构。
核心思路
Kafka Producer、Streams本身内置了完整的JMX监控指标,涵盖你需要的主题消息发送量、记录读取数、请求延迟、发送次数等核心维度。通过JMX Exporter可以自动将这些JMX指标转换成Prometheus兼容的格式并暴露出来,无需手动埋点。
具体实现步骤
1. 准备JMX Exporter
下载Prometheus官方的JMX Exporter Javaagent包(选择兼容Java 8的版本)。
2. 编写指标映射配置文件
创建一个YAML配置文件(比如kafka_metrics_config.yaml),定义JMX指标到Prometheus指标的转换规则,示例配置如下:
rules: # 抓取Producer核心指标 - pattern: 'kafka.producer<type=producer-metrics, client-id=(.*)><>(.*):' name: kafka_producer_$2 labels: client_id: "$1" # 抓取Kafka Streams核心指标 - pattern: 'kafka.streams<type=stream-metrics, client-id=(.*)><>(.*):' name: kafka_streams_$2 labels: client_id: "$1" # 抓取按主题、分区拆分的Consumer指标(按需启用) - pattern: 'kafka.consumer<type=consumer-metrics, client-id=(.*), topic=(.*), partition=(.*)><>(.*):' name: kafka_consumer_$4 labels: client_id: "$1" topic: "$2" partition: "$3"
这个配置会把Kafka原生JMX指标转换成带标签的Prometheus指标,比如kafka_producer_record_send_total(累计发送消息数)、kafka_streams_records_consumed_rate(每秒读取记录数)等。
3. 修改应用启动命令
通过Javaagent方式启动应用,让JMX Exporter自动抓取并暴露指标:
java -javaagent:/path/to/jmx_prometheus_javaagent.jar=9090:/path/to/kafka_metrics_config.yaml -jar your-application.jar
9090是JMX Exporter暴露指标的端口,可按需修改/path/to/替换为你实际的文件路径
4. 配置Prometheus抓取指标
在Prometheus的prometheus.yml中添加抓取任务:
scrape_configs: - job_name: 'kafka-app-metrics' static_configs: - targets: ['your-app-host:9090']
替换your-app-host为你的应用部署主机地址。
验证效果
启动应用和Prometheus后,访问http://your-app-host:9090/metrics,就能看到自动采集的Kafka客户端核心指标,包括:
kafka_producer_record_send_total:累计发送消息数kafka_producer_request_latency_avg:平均发送请求延迟kafka_streams_records_consumed_total:累计读取记录数kafka_streams_commit_latency_avg:平均提交延迟
这些指标完全覆盖你的需求,全程无需修改业务代码。如果之后需要自定义额外指标,再按需添加少量手动埋点即可。
内容的提问来源于stack exchange,提问作者Guy

