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
-
Unduh paket Kafka JMX agent ke setiap Pod atau Instans ECS tempat Kafka dideploy.
-
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 javaagentuntuk 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 ... -
-
Restart Kafka Producer, Broker, dan Consumer.
-
Untuk memverifikasi bahwa Kafka JMX agent sedang berjalan, jalankan perintah
curl localhost:<jmx_listening_port>/metricspada 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.
-
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
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.
-
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
-
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
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.