全部产品
Search
文档中心

可观测监控 Prometheus 版:如何部署和配置Kafka JMX Agent

更新时间:Sep 09, 2026

本文介绍如何部署和配置Kafka JMX Agent。

使用限制

目前支持在容器服务类型的Prometheus实例和ECS类型的Prometheus实例中接入Kafka JMX Agent。

步骤一:部署Kafka JMX Agent

  1. 下载kafka JMX-Agent包到Kafka所在的Pod或ECS内。

  2. 在Kafka Producer、Broker、Consumer的JVM启动参数中,增加参数-javaagent:/{jmx-agent保存目录}/kafka-jmx_prometheus_javaagent-1.18.1.jar={jmx监听端口},具体参数示例如下。

    • 保存目录:需要替换为您实际的保存目录。

    • jmx监听端口:需要替换为您实际的JMX监听端口。

    
    #ps -ef|grep javaagent
    admin    30038  30036 63 10:44 ?    00:00:14 /opt/taobao/java/bin/java -javaagent:/kafka-jmx_prometheus_javaagent-1_18_1.jar=5556 -Xmx4g -Xms4g -Xmn2g -Xss1024k -server -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:MaxGCPauseMillis=20 -XX:G1ReservePercent=25 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:InitiatingHeapOccupancyPercent=30 -XX:+DisableExplicitGC -Djava.awt.headless=true -XX:OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:MaxDirectMemorySize=15g -XX:-UseLargePages -XX:-UseBiasedLocking -Dsun.nio.PageAlignDirectMemory=true -verbose:gc -Xloggc:/home/admin/logs/kafka_gc_%p.log -XX:ErrorFile=/home/admin/logs/hs_err_pid_%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m ...
    

    执行 ps -ef|grep javaagent 命令,确认输出中包含 -javaagent:/kafka-jmx_prometheus_javaagent-1_18_1.jar=5556,说明 Kafka JMX Agent 已成功加载并监听端口 5556。

  3. 重新启动Kafka Producer、Broker、Consumer。

  4. 确认Kafka Producer、Broker、Consumer的Kafka JMX Agent是否正常工作。即在各Pod或ECS上,执行命令curl localhost:{jmx监听端口}/metrics,观察是否有正常的Metric返回。如果有正常的Metric返回,说明Kafka Producer、Broker、Consumer的Kafka JMX Agent已正常工作。

    jmx监听端口:需要替换为您实际的JMX监听端口。

    
    [root@kaikxxx ~]# curl localhost:5556/metrics
    # HELP jvm_memory_pool_allocated_bytes_total Total bytes allocated in a given JVM memory pool. Only updated after GC, not continuously.
    # TYPE jvm_memory_pool_allocated_bytes_total counter
    jvm_memory_pool_allocated_bytes_total{pool="G1 Old Gen",} 1.7518xxx
    jvm_memory_pool_allocated_bytes_total{pool="Code Cache",} 1.4520xxx
    jvm_memory_pool_allocated_bytes_total{pool="G1 Eden Space",} 1.4xxx
    jvm_memory_pool_allocated_bytes_total{pool="G1 Survivor Space",}
    jvm_memory_pool_allocated_bytes_total{pool="Compressed Class Space",} 5352720.0
    jvm_memory_pool_allocated_bytes_total{pool="Metaspace",} 4.xxx
    # HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds.
    # TYPE jvm_gc_collection_seconds summary
    jvm_gc_collection_seconds_count{gc="G1 Young Generation",} 21.0
    jvm_gc_collection_seconds_sum{gc="G1 Young Generation",} 0.346
    jvm_gc_collection_seconds_count{gc="G1 Old Generation",} 0.0
    jvm_gc_collection_seconds_sum{gc="G1 Old Generation",} 0.0
    # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
    # TYPE process_cpu_seconds_total counter
    process_cpu_seconds_total 22.85
    # HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
    # TYPE process_start_time_seconds gauge
    process_start_time_seconds 1.6654xxx
    # HELP process_open_fds Number of open file descriptors.
    # TYPE process_open_fds gauge
    process_open_fds 204.0
    # HELP process_max_fds Maximum number of open file descriptors.
    # TYPE process_max_fds gauge
    process_max_fds 65535.0
    # HELP process_virtual_memory_bytes Virtual memory size in bytes.
    # TYPE process_virtual_memory_bytes gauge
    process_virtual_memory_bytes 4.428xxx
    # HELP process_resident_memory_bytes Resident memory size in bytes.
    # TYPE process_resident_memory_bytes gauge
    process_resident_memory_bytes 9.36xxx
    # HELP jmx_config_reload_failure_total Number of times configuration have failed to be reloaded.
    # TYPE jmx_config_reload_failure_total counter
    jmx_config_reload_failure_total 0.0
    # HELP jmx_exporter_build_info A metric with a constant '1' value labeled with the version of the JMX exporter.
    # TYPE jmx_exporter_build_info gauge
    jmx_exporter_build_info{version="0.17.1-SNAPSHOT",name="jmx_prometheus_javaagent",} 1.0
    # HELP jvm_memory_objects_pending_finalization The number of objects waiting in the finalizer queue.
    # TYPE jvm_memory_objects_pending_finalization gauge
    jvm_memory_objects_pending_finalization 0.0
    # HELP jvm_memory_bytes_used Used bytes of a given JVM memory area.
    # TYPE jvm_memory_bytes_used gauge
    jvm_memory_bytes_used{area="heap",} 4.0462xxx
    jvm_memory_bytes_used{area="nonheap",} 6.57xxx
    # HELP jvm_memory_bytes_committed Committed (bytes) of a given JVM memory area.
    # TYPE jvm_memory_bytes_committed gauge
    jvm_memory_bytes_committed{area="heap",} 1.07374xxx
    jvm_memory_bytes_committed{area="nonheap",} 7.0xxx
    # HELP jvm_memory_bytes_max Max (bytes) of a given JVM memory area.
    # TYPE jvm_memory_bytes_max gauge
    jvm_memory_bytes_max{area="heap",} 1.0737xxx
    jvm_memory_bytes_max{area="nonheap",} -1.0
    # HELP jvm_memory_bytes_init Initial bytes of a given JVM memory area.
    # TYPE jvm_memory_bytes_init gauge
    jvm_memory_bytes_init{area="heap",} 1.0737xxx
    jvm_memory_bytes_init{area="nonheap",} 255xxx
    # HELP jvm_memory_pool_bytes_used Used bytes of a given JVM memory pool.
    

(可选)步骤二:配置containerPort

若您是容器服务类型的Prometheus实例,您还需要配置containerPort,以便可观测监控 Prometheus 版能顺利抓取到Kafka JMX Agent的数据。若您是ECS类型的Prometheus实例,请跳过此步骤。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。

  3. 单击目标工作负载操作列的编辑,在编辑页面,配置端口名称、容器端口和端口协议,然后单击更新。

    • 名称:Kafka JMX Agent端口名,例如app1-kafka-jmx。

    • 容器端口:在步骤一:部署Kafka JMX Agent中定义的JMX监听端口。

    • 协议:选择TCP协议。

步骤三:配置Kafka Pod或ECS的标签

可观测监控 Prometheus 版可以通过识别Pod或ECS的标签实现服务发现(Service Discovery),因此您需要定义一个标签,以便可观测监控 Prometheus 版能够识别到。如果您的业务中已经存在类似的标签,则可以跳过此步骤。

容器服务类型的Prometheus实例配置标签

在Kafka Producer、Broker、Consumer的Pod上配置标签{自定义标签}:{自定义标签值},例如:arms-kafka-exporter:my-kafka1,具体操作如下:

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 容器组。

  3. 在容器组页签,单击目标容器组操作列的编辑,然后新增标签,编辑结束后单击更新。

    
    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.aliyun.com/pod-ips: 10.119.6x.xxx
      creationTimestamp: '2025-01-10T05:58:06Z'
      generateName: nginx-deployment-basic-8f9xxx    t-
      labels:
        app: nginx
        pod-template-hash: 8f95d5bd4
      managedFields:
      - apiVersion: v1
        fieldsType: FieldsV1
        fieldsV1:
          'f:metadata':
    

    其中 labels 字段包含 app: nginx 和 pod-template-hash: 8f95d5bd4,即为新增的标签内容。

ECS类型的Prometheus实例配置标签

在Kafka Producer、Broker、Consumer的ECS上配置标签{自定义标签}:{自定义标签值},例如:arms-kafka-exporter:my-kafka1,ECS创建标签的具体操作,请参见标签。

后续操作

Kafka JMX-Agent配置完成后,您可以在可观测监控 Prometheus 版控制台完成接入配置并查看其监控数据。具体操作,请参见如何使用Prometheus监控Kafka。