You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMX Exporter+Prometheus采集Kafka集群指标失败,配置问题排查

问题分析与解决方案

核心问题排查

你的配置存在几个关键错误,导致JMX Exporter无法连接并采集Kafka的JMX指标:

1. JMX Exporter配置文件中的hostPort指向错误

你最初的config.yml中hostPort: jmx-kafka:5556完全错误——这个参数是用来指定要采集的目标JMX服务地址,也就是Kafka的JMX端口,而非JMX Exporter自身的端口。

正确配置应指向Kafka容器的JMX端口:

hostPort: kafka:9991
lowercaseOutputName: true
rules:
  - pattern: 'kafka\.(.*)'
    name: 'kafka_$1'

2. JMX Exporter容器的环境变量路径错误

你在docker-compose.yaml中给jmx-kafka容器设置的CONFIG_YML: "./config.yml"是相对路径,但容器内部工作目录未必匹配该路径,应直接使用挂载后的绝对路径:

environment:
  CONFIG_YML: "/config.yml"

3. Kafka的JMX远程访问未正确配置

Bitnami Kafka默认JMX配置可能限制本地访问,需确保允许远程连接:

  • 编辑kafka-jmx.properties,添加以下内容:
com.sun.management.jmxremote=true
com.sun.management.jmxremote.authenticate=false
com.sun.management.jmxremote.ssl=false
com.sun.management.jmxremote.port=9991
com.sun.management.jmxremote.rmi.port=9991
java.rmi.server.hostname=kafka
  • 在docker-compose.yaml的Kafka环境变量中添加JMX参数:
environment:
  # 保留原有配置,新增以下内容
  KAFKA_JMX_OPTS: "-Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.port=9991 -Dcom.sun.management.jmxremote.rmi.port=9991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka"

4. 指标规则配置的占位符错误

你修改后的config.yml中value: 'ValueToCollect'是无效占位符,JMX Exporter无法识别。应移除该字段,或使用正则捕获组映射指标值,简化后的规则可直接匹配Kafka JMX指标并转换为Prometheus格式。

修正后的完整配置示例

docker-compose.yaml

version: "3"

services:
  prometheus:
    image: "prom/prometheus:latest"
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/prometheus.yml
    command: "--config.file=/prometheus.yml"
    container_name: prometheus

  jmx-kafka:
    image: "sscaling/jmx-prometheus-exporter"
    ports:
      - "5556:5556"
    environment:
      CONFIG_YML: "/config.yml"
    volumes:
      - ./config.yml:/config.yml
    container_name: jmx_kafka
    depends_on:
      - kafka

  zookeeper:
    image: 'bitnami/zookeeper:latest'
    ports:
      - '2181:2181'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes

  kafka:
    image: bitnami/kafka:latest
    container_name: "kafka"
    ports:
      - '9092:9092'
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      ALLOW_PLAINTEXT_LISTENER: yes
      KAFKA_JMX_PORT: 9991
      KAFKA_JMX_OPTS: "-Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.port=9991 -Dcom.sun.management.jmxremote.rmi.port=9991 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka"
    depends_on:
      - zookeeper
    volumes:
      - ./kafka-jmx.properties:/opt/bitnami/kafka/conf/kafka-jmx.properties

config.yml

hostPort: kafka:9991
lowercaseOutputName: true
rules:
  - pattern: 'kafka\.(.*)'
    name: 'kafka_$1'
  - pattern: 'java.lang.*'
    name: 'jvm_$1'

prometheus.yml

global:
  scrape_interval: 30s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'jmx-kafka'
    static_configs:
      - targets: ['jmx-kafka:5556']

验证步骤

  1. 重启所有容器:docker-compose down && docker-compose up -d
  2. 访问JMX Exporter指标端点:http://localhost:5556/metrics,检查是否存在Kafka相关指标
  3. 访问Prometheus UI(http://localhost:9090),在Graph页面查询kafka_开头的指标,确认数据已采集

内容的提问来源于stack exchange,提问作者Allen Hui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:14:55