Belajar NATS - Monitoring & Observability
Series/Belajar NATS/Episode 18
Episode 18 of 23

Belajar NATS - Monitoring & Observability

Episode ini membahas observability NATS: endpoint monitoring /varz, /connz, /jsz, dan /subsz, metrik Prometheus lewat nats_exporter, dashboard Grafana, metrik consumer latency, event akun $SYS untuk audit, dan log rotation.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Messaging system yang tidak terlihat adalah bom waktu. Episode 18 ini menyalakan lampu di atas NATS: kalian akan belajar memantau server, client, stream, dan consumer lewat endpoint monitoring bawaan, metrik Prometheus, dashboard Grafana, serta event akun $SYS untuk audit dan alerting.

Tanpa observability yang baik, semua kehebatan performa di episode 16 tidak bisa dipertahankan di produksi.

Endpoint Monitoring Bawaan

Empat Endpoint Utama

Port monitoring (default 8222) menyediakan endpoint JSON:

  • /varz — status umum server, versi, jumlah pesan.
  • /connz — daftar dan detail semua koneksi client.
  • /jsz — status JetStream: stream, consumer, storage.
  • /subsz — semua subscription beserta statistiknya.
Mengambil /varz
curl -s http://localhost:8222/varz | python3 -m json.tool | head -n 30

curl -s http://localhost:8222/varz mengembalikan JSON lengkap status server. Untuk produksi, pastikan port monitoring hanya bisa diakses dari jaringan internal.

Membaca Endpoint JetStream

Endpoint /jsz adalah jendela ke JetStream:

Melihat status JetStream
curl -s http://localhost:8222/jsz

Output /jsz menampilkan jumlah stream, consumer, total pesan, dan penggunaan storage. Data inilah yang dipakai nats_exporter untuk metrik Prometheus.

Metrik Prometheus dengan nats_exporter

Memasang nats_exporter

nats_exporter menjembatani endpoint NATS ke format Prometheus:

Deploy nats_exporter
prometheus:
  jobs:
    - name: nats
      static_configs:
        - targets: ["nats-exporter:7777"]

Konfigurasi targets: ["nats-exporter:7777"] membuat Prometheus memindai nats_exporter di port 7777. Exporter membaca endpoint /varz, /connz, /jsz, dan /subsz, lalu mengekspos metrik berawalan nats_.

Metrik yang Wajib Dipantau

Beberapa metrik paling penting:

  • nats_server_in_msgs dan nats_server_out_msgs — volume pesan.
  • nats_jetstream_stream_messages — jumlah pesan per stream.
  • nats_consumer_ack_pending — pesan menunggu ack.
  • nats_core_subs dan nats_core_connections — skala koneksi.

Grafana Dashboards

Visualisasi Metrik

Dashboard Grafana resmi untuk NATS menyediakan panel siap pakai:

Panel penting dashboard NATS
pesan per detik         | pending per consumer
storage per stream      | koneksi aktif
latensi request-reply   | redelivery count

Panel pending per consumer adalah radar pertama masalah: naik terus berarti consumer tidak mampu mengejar. Dashboard ini mempercepat diagnosis — satu layar untuk seluruh kesehatan messaging.

Metrik Consumer Latency

Menjaga Waktu Respons

Latency consumer menunjukkan seberapa cepat pesan sampai ke aplikasi setelah dipublish:

Cek latency consumer
nats consumer report ORDERS

nats consumer report ORDERS menampilkan statistik per consumer termasuk delivery latency dan pending. Latensi yang membengkak sering kali menandakan consumer lambat atau storage disk penuh — dua hal yang akan kita bahas di episode 19.

Event Akun $SYS

Sumber Audit dan Alerting

Account khusus $SYS menerima event sistem: koneksi naik, server bergabung cluster, error autentikasi, dan banyak lagi.

Subscribe event sistem
nats sub '$SYS.>'

nats sub '$SYS.>' mendengarkan semua event sistem. Alerting bisa dibangun di atasnya: kirim notifikasi saat $SYS.ACCOUNT.NEW, server down, atau percobaan autentikasi gagal berulang. Event $SYS adalah tulang punggung postur observability proaktif.

Log Rotation

Menjaga Log Tetap Terkendali

Log server NATS bisa membesar seiring waktu:

Konfigurasi logging
logging:
  debug: false
  trace: false
  file: "/var/log/nats.log"

Blok logging mengarahkan log ke file. Atur log rotation di sisi sistem — misalnya logrotate — agar file tidak memenuhi disk. Untuk environment K8s, log ke stdout dan biarkan container runtime menangani rotation.

Tip

Aktifkan log debug hanya saat troubleshooting. Log debug penuh di produksi akan menurunkan performa dan menghabiskan disk. Naikkan level log saat investigasi, turunkan setelah selesai.

Penutup

Episode 18 menjadikan NATS transparan: endpoint /varz, /connz, /jsz, dan /subsz untuk inspeksi langsung, nats_exporter untuk metrik Prometheus, dashboard Grafana untuk visualisasi, metrik consumer latency untuk menjaga respons, event $SYS untuk audit dan alerting, serta log rotation agar log tidak memenuhi disk.

Inti yang harus dibawa pulang:

  • Port 8222 menyediakan endpoint JSON untuk status server, koneksi, dan JetStream.
  • nats_exporter mengubah endpoint menjadi metrik Prometheus.
  • Grafana dashboard menyatukan seluruh metrik dalam satu layar.
  • Pending consumer dan latency adalah indikator kesehatan utama.
  • Event $SYS menjadi sumber audit dan alerting proaktif.
  • Log rotation mencegah log server memenuhi disk.

Di episode 19 selanjutnya kita akan membahas troubleshooting — slow consumer dan backpressure, redelivery tak berujung, storage penuh karena max_bytes, kehilangan quorum, subject collision, serta perangkat diagnostik nats server check, nats stream report, nats consumer report, dan log debug. Siap-siap memadamkan api.