Belajar MongoDB - Monitoring, Maintenance & Troubleshooting
Episode 19 of 21

Belajar MongoDB - Monitoring, Maintenance & Troubleshooting

Menjaga kesehatan MongoDB: memeriksa kondisi dengan db.serverStatus, db.currentOp, mongostat, dan mongotop, memantau via Prometheus dan Grafana, melakukan maintenance seperti compact dan reIndex, serta menangani masalah umum seperti slow queries, memory pressure, dan replication lag.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Database yang sehat tidak terlihat — sampai tiba-tiba aplikasi melambat, memory melonjak, dan semua orang panik. Perbedaan antara tim yang panik dan tim yang tenang bukanlah keberuntungan, melainkan visibility: mereka tahu apa yang diukur, alat apa yang dipakai, dan prosedur apa yang dijalankan saat angka menyimpang.

Episode 19 melengkapi kalian dengan kacamata observasi. Roadmap-nya: pertama alat pemantauan kesehatan — db.serverStatus, db.currentOp, mongostat, mongotop, kedua pipeline Prometheus + Grafana, ketiga operasional maintenance — compact, reIndex, log rotation, tuning WiredTiger, dan keempat troubleshooting masalah umum. Mari mulai.

Monitoring Health MongoDB

db.serverStatus

db.serverStatus() adalah jendela tunggal kondisi server — metrik uptime, koneksi, operasi, memory, dan storage engine dalam satu panggilan:

Melihat statistik kesehatan server
db.serverStatus()

Metrik yang paling sering diamati:

  • connections — jumlah koneksi aktif; mendekati limit menandakan connection pool exhaustion.
  • mem.resident dan mem.virtual — penggunaan memory proses.
  • opcounters — jumlah insert, query, update, delete yang dilayani; berguna untuk tren beban.
  • uptime — berapa lama server berjalan sejak terakhir restart.

db.currentOp

Saat server terasa lambat, pertanyaan pertama adalah "operasi apa yang sedang berjalan?". Jawabannya ada di db.currentOp():

Melihat operasi yang sedang berjalan
db.currentOp()

Hasilnya menampilkan operasi aktif, berapa lama sudah berjalan (secs_running), query apa yang dieksekusi, dan rencana eksekusinya. Ini alat utama menemukan query "bandel" yang menyandera resource. Untuk menghentikan operasi yang benar-benar macet:

Menghentikan operasi yang sudah berjalan terlalu lama
db.killOp(12345)

db.killOp menerima opid yang kalian lihat di output db.currentOp(). Gunakan dengan hati-hati — menghentikan operasi di tengah transaksi bisa memicu rollback.

mongostat dan mongotop

Untuk observasi berkelanjutan, dua utilitas bawaan ini tak ternilai:

Memantau statistik server secara live
mongostat --uri "mongodb://localhost:27017" --discover --rowcount 20

mongostat menampilkan metrik per detik: operasi tulis/baca, jumlah koneksi, dan penggunaan memory. Berjalan otomatis dan bisa dipakai untuk melihat lonjakan beban secara real-time.

Memantau collection yang paling sibuk
mongotop --uri "mongodb://localhost:27017"

mongotop menunjukkan berapa lama waktu yang dihabiskan server pada tiap collection — membantu mengidentifikasi collection mana yang paling sibuk dan membutuhkan perhatian index.

Prometheus Exporter dan Grafana

Untuk observasi level produksi yang disimpan dan di-alert, gunakan percona/mongodb_exporter bersama Prometheus dan Grafana:

Menjalankan MongoDB exporter di Docker
services:
  mongo-exporter:
    image: percona/mongodb_exporter:0.40.0
    command:
      - --mongodb.uri=mongodb://monitor:pass@mongo:27017
      - --collector.diagnosticdata
      - --collector.replicasetstatus
    ports:
      - "9216:9216"

Exporter mengekspos metrik MongoDB dalam format Prometheus di port 9216. Prometheus menariknya secara berkala, dan Grafana menampilkan dashboard visual dengan alert. Metrik yang biasa dimonitor: operasi per detik, queue, replication lag, memory cache WiredTiger, dan koneksi. Pola ini adalah fondasi observability MongoDB di produksi modern.

Operational Maintenance

Compact dan Repair

Seiring waktu, storage WiredTiger bisa memiliki fragmentasi — ruang kosong antar dokumen yang tidak terpakai. Compact menata ulang data untuk mengembalikan ruang:

Compact collection untuk mengembalikan ruang
db.runCommand({ compact: "orders" })

Compact memakan resource dan memblokir operasi pada collection tersebut — lakukan saat beban rendah (maintenance window). Untuk perbaikan yang lebih agresif, db.repairDatabase() memperbaiki dan mengkompresi seluruh database, tapi ini operasi berat yang menghentikan layanan — jarang dipakai, dan lebih baik memakai restore dari backup.

Rebuild Index dan Log Rotation

Jika index korup atau berubah versi, rebuild index mengembalikan integritasnya:

Membangun ulang semua index sebuah collection
db.orders.reIndex()

reIndex() menghapus dan membuat ulang semua index collection — berguna setelah restore atau saat index dicurigai korup, tapi lakukan di maintenance window karena memakan resource.

Untuk log rotation, MongoDB menyediakan perintah yang memutar log aktif tanpa restart:

Memutar log MongoDB secara manual
db.adminCommand({ logRotate: 1 })

Pola ini dijadwalkan dengan cron untuk mencegah log membesar tanpa kendali, lalu log lama diarsipkan atau dihapus sesuai retensi.

WiredTiger Cache Tuning

WiredTiger menyimpan "working set" data di cache memory. Ukuran default cache sekitar 50% dari RAM dikurangi 1GB. Tuning bisa dilakukan lewat konfigurasi:

Mengatur ukuran cache WiredTiger di mongod.conf
storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4

Cache terlalu kecil menyebabkan banyak pembacaan dari disk (IO tinggi); cache terlalu besar bisa mendesak proses lain di host. Tuning membutuhkan observasi metrik cache pressure — bagian dari seni administrasi MongoDB.

Troubleshooting Masalah Umum

High CPU dan Slow Queries

Gejala: CPU melonjak, aplikasi lambat. Penyebab paling umum: missing index yang memaksa COLLSCAN pada collection besar. Diagnosa dengan profiler (episode 13), lalu buat index yang sesuai dengan aturan ESR (episode 12). Solusi kedua: menulis ulang query yang tidak selektif.

High Memory dan Cache Pressure

Gejala: memory terisi hampir penuh, swap aktif. WiredTiger memang dirancang memakai sebanyak mungkin cache — bukan langsung masalah. Ukur cache pressure (persentase cache yang dipakai untuk page baru) dan evictions per detik. Jika page terus ter-evict sebelum sempat dipakai, working set melebihi cache — saatnya menambah RAM atau memangkas data yang jarang diakses.

Replication Lag

Gejala: secondary tertinggal jauh dari primary; data yang dibaca dari secondary usang. Penyebab umum: oplog terlalu kecil sehingga secondary kehilangan jejak, atau write di primary lebih cepat dari kemampuan secondary mereplikasi. Periksa rs.status().members[].optime untuk melihat seberapa besar lag. Solusi: perbesar ukuran oplog, tinjau workload write, atau evaluasi bandwidth jaringan antar node.

Connection Pool Exhaustion

Gejala: aplikasi error "Too many connections" atau "connection pool exhausted". Setiap koneksi mongod butuh memory; ribuan koneksi idle memakan resource. Solusi: sesuaikan ukuran connection pool di driver, batasi koneksi maksimal server, dan singkirkan koneksi idle yang tidak perlu.

Warning

Sebelum memulai maintenance apa pun (compact, reIndex, repair), pastikan backup terbaru tersedia. Beberapa operasi maintenance bersifat berat dan bisa gagal di tengah jalan. Dalam kondisi serius, pilihan paling aman sering bukan memperbaiki — melainkan mengganti node dengan restore dari backup dan shard yang sehat.

Info

Kembangkan kebiasaan "baseline": catat metrik normal saat sistem sehat (ops per detik, memory, latency query). Tanpa baseline, kalian tidak bisa tahu apakah angka saat ini normal atau tidak. Dashboard Grafana dengan rentang waktu panjang membantu mengenali pola musiman dan lonjakan yang wajar versus yang mengkhawatirkan.

Penutup

Pada episode 19 ini kalian telah membekali diri dengan visibilitas: memeriksa kesehatan dengan db.serverStatus, db.currentOp, mongostat, dan mongotop; membangun observability level produksi dengan percona/mongodb_exporter, Prometheus, dan Grafana; melakukan maintenance seperti compact, reIndex, log rotation, dan tuning cache WiredTiger; serta menangani empat masalah paling umum — slow queries karena missing index, memory pressure, replication lag, dan connection pool exhaustion.

Inti yang harus dibawa pulang:

  • db.serverStatus dan db.currentOp adalah alat diagnosis pertama saat masalah.
  • Prometheus + Grafana mengubah monitoring menjadi dashboards dan alert yang permanen.
  • Compact dan reIndex mengembalikan ruang dan integritas di maintenance window.
  • Slow query biasanya = missing index; cache pressure = working set melebihi RAM.
  • Selalu punya backup sebelum maintenance berat dan kenali baseline normal kalian.

Di episode 20 berikutnya kita merangkai semua yang dipelajari menjadi satu kesatuan: Studi Kasus Production-Grade E-Commerce Document Database. Kalian akan merancang schema users, product catalog, orders, dan analytics; membangun deployment dengan replica set, TLS, backup otomatis, dan monitoring; serta meninjau checklist kesiapan produksi sebagai penutup seri. Sampai jumpa di episode 20 — episode penutup!

Belajar MongoDB - Monitoring, Maintenance & Troubleshooting | Belajar MongoDB