All Products
Search
Document Center

Application Real-Time Monitoring Service:Deploy and configure a Kafka JMX agent

Last Updated:Sep 10, 2026

Topik ini menjelaskan cara melakukan deploy dan mengonfigurasi Kafka JMX agent.

Batasan

Kafka JMX agent hanya terintegrasi dengan Prometheus instance for ACK atau Prometheus instance for ECS.

Langkah 1: Deploy Kafka JMX agent

  1. Unduh paket Kafka JMX agent ke setiap Pod atau Instans ECS tempat Kafka dideploy.

  2. Pada parameter startup Java Virtual Machine (JVM) untuk Kafka Producer, Broker, dan Consumer Anda, tambahkan argumen berikut: -javaagent:/<path_to_agent>/kafka-jmx_prometheus_javaagent-1.18.1.jar=<jmx_listening_port>.

    • <path_to_agent>: Ganti placeholder ini dengan direktori tempat Anda menyimpan agent.

    • <jmx_listening_port>: Ganti placeholder ini dengan Port JMX listening yang sebenarnya.

    Setelah merestart Kafka, jalankan perintah ps -ef|grep javaagent untuk memverifikasi bahwa JMX agent telah dimuat. Jika parameter proses mencakup -javaagent:/kafka-jmx_prometheus_javaagent-1_18_1.jar=5556, berarti agent berhasil dideploy.

    
    #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 ...
    
  3. Restart Kafka Producer, Broker, dan Consumer.

  4. Untuk memverifikasi bahwa Kafka JMX agent sedang berjalan, jalankan perintah curl localhost:<jmx_listening_port>/metrics pada setiap Pod atau Instans ECS. Agent sedang berjalan jika perintah tersebut mengembalikan data metrik.

    <jmx_listening_port>: Ganti placeholder ini dengan Port JMX listening yang sebenarnya.

    
    [root@kaikaxxx ~]# 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.
    # TYPE jvm_memory_pool_bytes_used gauge
                  

(Opsional) Langkah 2: Konfigurasi Container Port

Jika Anda menggunakan Prometheus instance for ACK, Anda juga harus mengonfigurasi Container Port agar Managed Service for Prometheus dapat mengambil data dari Kafka JMX agent. Jika Anda menggunakan Prometheus instance for ECS, lewati langkah ini.

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  3. Pada kolom Actions untuk workload target, klik Edit. Pada halaman Edit, konfigurasikan Name, Container Port, dan Protocol, lalu klik Update.

    • Name: Nama port untuk Kafka JMX agent, misalnya app1-kafka-jmx.

    • Container Port: Port JMX listening yang telah Anda tentukan di Langkah 1: Deploy Kafka JMX agent.

    • Protocol: Pilih TCP.

Langkah 3: Konfigurasi label Pod atau tag ECS

Managed Service for Prometheus menggunakan penemuan layanan untuk mengidentifikasi target pengambilan berdasarkan label Pod atau tag instans ECS. Anda harus menambahkan label atau tag agar Managed Service for Prometheus dapat menemukan target tersebut. Anda dapat melewati langkah ini jika layanan Anda sudah memiliki label atau tag yang sesuai.

Konfigurasi label untuk Prometheus instance for ACK

Pada Pod untuk Kafka Producer, Broker, dan Consumer, tambahkan label dalam format <custom_label_key>:<custom_label_value>, misalnya arms-kafka-exporter:my-kafka1.

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

  3. Pada halaman Container Group, klik Edit di kolom Actions untuk Pod target, tambahkan label tersebut, lalu klik Update.

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

Konfigurasi tag untuk Prometheus instance for ECS

Pada Instans ECS yang menjalankan Kafka Producer, Broker, dan Consumer, tambahkan tag dalam format <custom_tag_key>:<custom_tag_value>, misalnya arms-kafka-exporter:my-kafka1. Untuk petunjuk cara membuat tag untuk Instans ECS, lihat Tags.

Langkah selanjutnya

Setelah Anda mengonfigurasi Kafka JMX-Agent, Anda dapat menyelesaikan konfigurasi integrasi dan melihat data pemantauannya di Konsol Managed Service for Prometheus. Untuk informasi lebih lanjut, lihat How to Use Prometheus to Monitor Kafka.