Metrik yang Benar-benar Penting
rabbitmq-plugins enable rabbitmq_prometheus
# metrik tersedia di http://node:15692/metrics| Metrik | Artinya | Kapan mengkhawatirkan |
|---|---|---|
rabbitmq_queue_messages_ready | Menunggu dikonsumsi | Naik terus tanpa turun |
rabbitmq_queue_messages_unacked | Sedang diproses | Tinggi dan diam = konsumer menggantung |
rabbitmq_queue_consumers | Jumlah konsumer | 0 pada queue produksi |
rabbitmq_alarms_memory_used_watermark | Alarm memori | Bernilai 1 = publish diblokir |
rabbitmq_alarms_free_disk_space_watermark | Alarm disk | Bernilai 1 = publish diblokir |
rabbitmq_process_open_fds | File descriptor terpakai | > 80% dari batas |
rabbitmq_connections | Jumlah koneksi | Naik terus = kebocoran koneksi |
rabbitmq_channels | Jumlah channel | Ribuan per koneksi = bug |
rabbitmq_queue_messages_published_total | Laju publish | Bandingkan dengan laju konsumsi |
rabbitmq_disk_space_available_bytes | Sisa disk | Mendekati disk_free_limit |
# selisih positif yang bertahan = antrean akan tumbuh tanpa batas
sum by (queue) (rate(rabbitmq_queue_messages_published_total[5m]))
-
sum by (queue) (rate(rabbitmq_queue_messages_delivered_total[5m]))Jumlah pesan di queue hanyalah gejala. Selisih laju adalah penyebabnya, dan ia memperingatkan Anda jauh sebelum antrean menjadi besar.
Alert yang Layak Dipasang
groups:
- name: rabbitmq
rules:
- alert: QueueTanpaKonsumer
expr: rabbitmq_queue_consumers{queue!~".*\\.dlq"} == 0
for: 5m
labels: { severity: critical }
annotations:
summary: 'Queue {{ $labels.queue }} tidak punya konsumer'
runbook_url: https://wiki.internal/runbook/rmq-tanpa-konsumer
- alert: AntreanTumbuhTerus
expr: |
sum by (queue) (rate(rabbitmq_queue_messages_published_total[10m]))
-
sum by (queue) (rate(rabbitmq_queue_messages_delivered_total[10m]))
> 0
for: 15m
labels: { severity: warning }
- alert: DLQTidakKosong
expr: rabbitmq_queue_messages{queue=~".*\\.dlq"} > 0
for: 10m
labels: { severity: warning }
- alert: AlarmBrokerAktif
expr: |
rabbitmq_alarms_memory_used_watermark == 1
or
rabbitmq_alarms_free_disk_space_watermark == 1
for: 1m
labels: { severity: critical }
annotations:
summary: 'Broker memblokir SELURUH publish'
- alert: FileDescriptorHampirHabis
expr: rabbitmq_process_open_fds / rabbitmq_process_max_fds > 0.8
for: 10m
labels: { severity: warning }Flow Control: Rem Otomatis Broker
Producer terlalu cepat dibanding kemampuan broker menulis ke disk
โ broker menerapkan credit-based flow control
โ koneksi producer masuk state "flow"
โ publish DIPERLAMBAT, bukan ditolak
Ini BUKAN kerusakan; ini mekanisme perlindungan yang bekerja.
Tetapi ia sinyal bahwa sesuatu perlu diperbaiki.rabbitmqctl list_connections name state
# state: running | flow | blocked | blocking
rabbitmqctl list_channels name state messages_unconfirmed| State | Arti |
|---|---|
running | Normal |
flow | Diperlambat karena broker kewalahan menulis |
blocking | Akan diblokir karena alarm baru menyala |
blocked | Diblokir total oleh alarm memori/disk |
flow yang menetap adalah peringatan diniBila koneksi producer sering berada di state flow, broker sudah berada di batas kemampuannya. Penyebab yang paling sering:
- Disk lambat โ persistensi adalah operasi paling mahal di RabbitMQ.
- Terlalu banyak queue di satu node.
- Pesan besar yang persistent dengan laju tinggi.
- Konsumer terlalu lambat sehingga pesan menumpuk di disk.
Faktor Performa, Berurutan dari yang Paling Berdampak
| Faktor | Dampak | Tindakan |
|---|---|---|
| Persistence | Sangat besar | Pakai transient untuk data yang boleh hilang |
| Ukuran pesan | Besar | Kirim referensi, bukan payload besar |
| Jumlah queue | Besar | Ribuan queue membebani manajemen node |
| Confirm per pesan | Besar | Pakai batch confirm |
| Prefetch | Sedang | Sesuaikan dengan durasi tugas |
| Jumlah koneksi | Sedang | Pakai ulang, jangan buat per operasi |
| Kecepatan disk | Besar untuk persistent | SSD/NVMe, bukan disk jaringan lambat |
Pesan berukuran megabyte menghabiskan memori broker, memperlambat replikasi quorum, dan memicu flow control.
โ publish berisi PDF 8 MB dalam base64
โ
simpan berkas di object storage (S3/MinIO),
publish hanya referensinya:
{ "berkas_url": "s3://faktur/2026/07/F-1042.pdf",
"ukuran": 8388608, "checksum": "sha256:โฆ" }Batas praktis yang sehat: jaga pesan di bawah 128 KB. Di atas itu, pertimbangkan pola referensi.
Dashboard yang Perlu Ada
- Ikhtisar broker โ alarm, memori, disk, file descriptor, jumlah koneksi.
- Per queue โ ready, unacked, konsumer, laju masuk dan keluar.
- Kesehatan konsumer โ queue tanpa konsumer, waktu proses, laju redelivery.
- DLQ โ jumlah pesan per DLQ dan trennya.
- Cluster โ status node, partisi, kesehatan replika quorum.
Grafana menyediakan dashboard resmi RabbitMQ (ID 10991 untuk ikhtisar, 11340 untuk Erlang VM) yang bisa menjadi titik awal yang baik sebelum Anda menyesuaikannya.
Alat Diagnosis Cepat
rabbitmq-diagnostics alarms # 1. apakah publish sedang diblokir?
rabbitmq-diagnostics check_running # 2. apakah node hidup?
rabbitmqctl list_queues name messages_ready messages_unacknowledged consumers
# 3. queue mana yang bermasalah?
rabbitmqctl list_connections name state
# 4. ada koneksi di state flow/blocked?
rabbitmq-diagnostics memory_breakdown
# 5. memori habis untuk apa?
rabbitmqctl cluster_status # 6. ada partisi?