跳转至

5.1 通过 JMX 获取监控

kafka 开启 JMX 端口

修改 kafka 的 kafka-server-start.sh 文件,增加 jmx 端口:

#...

# jmx 端口
export JMX_PORT="9999"

#...

使用 jmxterm

使用 jmxterm 连接 JMX 进入交互模式

java -jar jmxterm-1.0.4-uber.jar -l host:port

列出所有 domain

domains

列出所有 bean (相当于列出所有 object name (domain + properties))

beans

beans <domain>

选中 bean

bean <object name>

列出所选 bean 的属性和操作

info

查看属性值

get <attribute>

使用 jmx_exporter

作为 javaagent 启动

修改 kafka 的 kafka-run-class.sh 文件,增加 javaagent 配置:

# ...

if [[ $JMX_PORT && -f /usr/local/jmx_prometheus_javaagent-0.17.1.jar && -f /etc/default/jmx_prometheus_javaagent.yaml ]]; then
  JMX_EXPORTER=-javaagent:/usr/local/jmx_prometheus_javaagent-0.17.1.jar=5556:/etc/default/jmx_prometheus_javaagent.yaml
else
  JMX_EXPORTER=""
fi

# ...

# Launch mode
if [ "x$DAEMON_MODE" = "xtrue" ]; then
  nohup $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS $JMX_EXPORTER -cp $CLASSPATH $KAFKA_OPTS "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
else
  exec  $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS $JMX_EXPORTER -cp $CLASSPATH $KAFKA_OPTS "$@"
fi

增加 javaagent 配置后可以从 5556 端口获取 jmx metrics:

$ curl http://localhost:5556/metrics

修改 prometheus.yml,增加 job:

scrape_configs:
  - job_name: 'kafka1'
    static_configs:
    - targets: ['10.0.0.1:5556']
  - job_name: 'kafka2'
    static_configs:
    - targets: ['10.0.0.2:5556']
  - job_name: 'kafka3'
    static_configs:
    - targets: ['10.0.0.3:5556']

作为 httpserver 启动

java -jar jmx_prometheus_httpserver-0.17.1.jar 5556 jmx_prometheus.yaml

cat jmx_prometheus.yaml

---
startDelaySeconds: 0
# hostPort: 127.0.0.1:5556
username:
password:
jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:9999/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false