Metrik kumulatif seperti serverStatus menjawab pertanyaan “seberapa sibuk server ini sepanjang waktu?”, tetapi saat keluhan datang sekarang juga, pertanyaannya berubah menjadi “apa yang sedang dikerjakan saat ini?”. Chapter ini fokus pada sisi administratif monitoring: membedah currentOp untuk melihat operasi yang sedang berjalan, menghentikan operasi yang liar dengan killOp, dan memilih tools pemantauan yang tepat setelah fitur free monitoring bawaan MongoDB resmi dihapus. Untuk peta metrik lengkap (serverStatus, opcounters, cache WiredTiger), kita sudah membahasnya di chapter Monitoring Performa — di sini cukup dirangkum sebagai titik pemeriksaan.
Peta materi chapter ini:
currentOpmendalam: field per entri dan pola filter.killOpuntuk menghentikan operasi bermasalah.- Ringkasan titik pemeriksaan
serverStatus. - Nasib free monitoring dan pilihan tools penggantinya.
currentOp: Membedah Operasi Berjalan #
Setiap entri inprog pada currentOp adalah satu operasi yang sedang dijalankan server. Cara termudah mempelajari strukturnya adalah mengintip entri pertama — yang kebetulan adalah perintah currentOp itu sendiri:
db.adminCommand({ currentOp: 1, active: true }).inprog[0]Output yang Dihasilkan (dipadatkan):
{
type: 'op',
host: 'c-6ad366ea-145cf406-1e00df7b3d2b:27017',
desc: 'conn8655',
client: '127.0.0.1:39940',
appName: 'mongosh 2.13.0',
active: true,
opid: 9547783,
secs_running: Long('0'),
op: 'command',
ns: 'admin.$cmd.aggregate',
command: { currentOp: 1, active: true, lsid: {...}, '$db': 'admin' },
numYields: 0,
waitingForLock: false,
...
}Field-field itulah yang Anda baca saat menyelidiki keluhan. Tabel berikut memetakan fungsinya:
| Field | Pertanyaan yang dijawab |
|---|---|
opid | Nomor operasi — bahan untuk killOp |
secs_running | Sudah berjalan berapa detik? |
ns | Collection mana yang disentuh (db.collection)? |
client + appName | Dari mesin dan aplikasi siapa permintaan datang? |
command | Operasi apa persisnya yang dijalankan? |
waitingForLock | Apakah operasi ini menunggu lock yang diperebutkan? |
planSummary | Rencana query apa yang dipakai (mis. COLLSCAN)? |
Kombinasi client dan appName sering menjadi kunci tercepat: appName diambil dari connection string aplikasi, sehingga operasi liar bisa dilacak ke layanan pemiliknya tanpa menebak-nebak. Filter currentOp memakai sintaks query MongoDB biasa — misalnya hanya operasi yang sudah berjalan sekurang-kurangnya satu detik:
db.adminCommand({ currentOp: 1, secs_running: { $gte: 1 } }).inprogOutput yang Dihasilkan:
[]Array kosong pada server latihan adalah kabar baik: tidak ada operasi yang menggantung. Filter lain yang sering dipakai di produksi: { active: false } untuk koneksi menganggur, { ns: "toko.pesanan" } untuk satu collection tertentu, dan { waitingForLock: true } saat terdengar keluhan antrean lock. Tanpa filter sama sekali, currentOp juga menampilkan operasi internal server (Checkpointer, JournalFlusher) — thread yang sudah kita kenali di chapter Proses Server Database.
killOp: Menghentikan Operasi Bermasalah #
Ketika satu operasi terbukti merugikan — query tanpa index yang menghantam collection produksi selama berjam-jam — killOp menghentikannya lewat opid yang kita temukan di currentOp:
// mdtest: skip
// Langkah 1: temukan kandidat dari daftar operasi berjalan
db.currentOp({ active: true, secs_running: { $gte: 60 } })
// Langkah 2: hentikan dengan opid yang tercantum di entri tersebut
db.killOp(9547783)Server menandai operasi itu untuk dihentikan pada titik henti berikutnya. Sebagian besar operasi (query, aggregation, perintah biasa) memeriksa sinyal interrupt secara berkala, sehingga berhenti dalam hitungan detik. Namun killOp bukan tombol darurat instan: operasi yang sedang berada di tahap yang tidak bisa dihentikan akan menyelesaikan tahapnya lebih dulu.
Titik Pemeriksaan serverStatus #
Sebagai pemeriksaan rutin, db.serverStatus() tetap menjadi perintah pertama yang dijalankan admin. Kita tidak mengulang pembahasannya di sini — berikut peta ringkasnya beserta lokasi pembahasan:
| Bagian | Yang diceritakan | Dibahas di |
|---|---|---|
connections | Koneksi terbuka, slot tersisa, antrian | Monitoring Performa |
opcounters | Volume operasi per jenis | Monitoring Performa |
wiredTiger.cache | Tekanan memori dan eviksi | Monitoring Performa, Working Set dan Memory |
mem.resident | Memori fisik proses | Resource Utilization (chapter berikutnya) |
metrics.document | Document yang dikembalikan vs dimasukkan | Monitoring Performa |
Kebiasaan yang sehat: simpan sampel metrik ini secara berkala ke sistem deret waktu, karena nilainya hanya bermakna saat dibandingkan antarwaktu.
Free Monitoring dan Tools Penggantinya #
Versi-versi MongoDB lama menyediakan free monitoring: perintah db.enableFreeMonitoring() yang mengirim metrik ke dashboard cloud gratis. Fitur ini resmi dihentikan sejak MongoDB 7.0 — dashboard host-nya dimatikan dan perintahnya dihapus dari server. Mencobanya di 9.0 menghasilkan galat yang justru memastikan status itu:
db.adminCommand({ getFreeMonitoringStatus: 1 })Output yang Dihasilkan:
Uncaught
MongoServerError[CommandNotFound]: no such command: 'getFreeMonitoringStatus'Untuk pemantauan berkelanjutan, pilihan yang tersedia sekarang:
| Alat | Cocok untuk |
|---|---|
mongostat / mongotop | Pemeriksaan cepat dari terminal — dibahas di Monitoring Performa |
| Atlas | Deployment di cloud, metrik dan alert bawaan |
| Ops Manager | Fleet server self-managed skala enterprise |
| Exporter Prometheus + Grafana | Stack observability open source pilihan sendiri |
Rangkuman #
currentOpmenampilkan operasi yang sedang berjalan; field kuncinyaopid,secs_running,ns,client,command, danplanSummary.- Filter
currentOpmemakai sintaks query biasa —{ secs_running: { $gte: 1 } }adalah penyaring operasi menggantung yang paling sering dipakai. killOp(opid)menghentikan operasi bermasalah pada titik henti berikutnya; audit dulucommanddanclient-nya sebelum mengeksekusi.serverStatustetap sumber metrik rutin — pembahasan lengkapnya ada di chapter Monitoring Performa.- Free monitoring bawaan dihapus sejak 7.0; gunakan
mongostat/mongotop, Atlas, Ops Manager, atau stack Prometheus.