JMX采集Kafka指标

## 使用JMX采集Kafka指标 从 JMX-Exporter 提供的样例配置目录,下载 kafka.yml,然后导出 KAFKA_OPTS 环境变量即可。 下载 jmx_prometheus_javaagent 和 kafka.yaml 。 ```sh wget https://raw.githubusercontent.com/prometheus/jmx_exporter/master/example_configs/kafka-2_0_0.yml wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar ``` Kafka配置参数如下: ```sh export JMX_PORT="9995" export KAFKA_OPTS="-javaagent:/path/jmx_prometheus_javaagent-0.20.0.jar=9996:/etc/jmx-exporter/kafka-2_0_0.yml" ``` 配置方式有如下几种: 修改bin/kafka-run-class.sh脚本,在开始运行的最上方加入以上配置。 修改bin/kafka-server-start.sh脚本,在开始运行的最上方加入以上配置。 ```sh vim bin/kafka-server-start.sh if [ $# -lt 1 ]; then echo "USAGE: $0 [-daemon] server.properties [--override property=value]*" exit 1 fi base_dir=$(dirname $0) if [ "x$KAFKA_LOG4J_OPTS" = "x" ]; then export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties" fi if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" fi EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'} # 插入到此******************************************************* export JMX_PORT="9995" export KAFKA_OPTS="-javaagent:/mnt/kafka/monitor/jmx_prometheus_javaagent-0.20.0.jar=9996:/mnt/kafka/monitor/kafka-2_0_0.yml" COMMAND=$1 case $COMMAND in -daemon) EXTRA_ARGS="-daemon "$EXTRA_ARGS shift ;; *) ;; esac exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@" ``` 修改后重启kafka,可以看到指标即为成功 ``` [root@node-104 bin]# curl -s 172.24.61.104:9996/metrics |head -10 # HELP kafka_coordinator_transaction_transactionmarkerchannelmanager_unknowndestinationqueuesize Attribute exposed for management kafka.coordinator.transaction:name=UnknownDestinationQueueSize,type=TransactionMarkerChannelManager,attribute=Value # TYPE kafka_coordinator_transaction_transactionmarkerchannelmanager_unknowndestinationqueuesize gauge kafka_coordinator_transaction_transactionmarkerchannelmanager_unknowndestinationqueuesize 0.0 # HELP kafka_controller_controllerstats_topicuncleanleaderelectionenablerateandtimems Attribute exposed for management kafka.controller:name=TopicUncleanLeaderElectionEnableRateAndTimeMs,type=ControllerStats,attribute=50thPercentile # TYPE kafka_controller_controllerstats_topicuncleanleaderelectionenablerateandtimems gauge kafka_controller_controllerstats_topicuncleanleaderelectionenablerateandtimems{quantile="0.50",} 0.0 kafka_controller_controllerstats_topicuncleanleaderelectionenablerateandtimems{quantile="0.75",} 0.0 kafka_controller_controllerstats_topicuncleanleaderelectionenablerateandtimems{quantile="0.95",} 0.0 kafka_controller_controllerstats_topicuncleanleaderelectionenablerateandtimems{quantile="0.98",} 0.0 kafka_controller_controllerstats_topicuncleanleaderelectionenablerateandtimems{quantile="0.99",} 0.0 ``` 将metrics添加到prometheus-operator采集项 ```yaml kind: Service apiVersion: v1 metadata: name: kafka-jmx #job名 namespace: default labels: app: kafka-jmx spec: ports: - port: 9996 name: metrics protocol: TCP targetPort: 9996 --- kind: Endpoints apiVersion: v1 metadata: name: kafka-jmx namespace: default subsets: - addresses: - ip: 172.24.61.103 - ip: 172.24.61.104 - ip: 172.24.61.102 ports: - port: 9996 name: metrics protocol: TCP --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: kafka-jmx-nodeexporter namespace: default labels: app: kafka-jmx spec: endpoints: - port: metrics interval: 30s namespaceSelector: matchNames: - default selector: matchLabels: app: kafka-jmx ``` kubectl apply -f kafka-jmx.yaml 添加后等待片刻去prometheus查看是否添加成功 ![image.png](https://cos.easydoc.net/97954506/files/lv395u92.png) 导入大屏模板即可