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:

  • currentOp mendalam: field per entri dan pola filter.
  • killOp untuk 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:

js
db.adminCommand({ currentOp: 1, active: true }).inprog[0]

Output yang Dihasilkan (dipadatkan):

text
{
  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:

FieldPertanyaan yang dijawab
opidNomor operasi — bahan untuk killOp
secs_runningSudah berjalan berapa detik?
nsCollection mana yang disentuh (db.collection)?
client + appNameDari mesin dan aplikasi siapa permintaan datang?
commandOperasi apa persisnya yang dijalankan?
waitingForLockApakah operasi ini menunggu lock yang diperebutkan?
planSummaryRencana 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:

js
db.adminCommand({ currentOp: 1, secs_running: { $gte: 1 } }).inprog

Output yang Dihasilkan:

text
[]

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:

js
// 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:

BagianYang diceritakanDibahas di
connectionsKoneksi terbuka, slot tersisa, antrianMonitoring Performa
opcountersVolume operasi per jenisMonitoring Performa
wiredTiger.cacheTekanan memori dan eviksiMonitoring Performa, Working Set dan Memory
mem.residentMemori fisik prosesResource Utilization (chapter berikutnya)
metrics.documentDocument yang dikembalikan vs dimasukkanMonitoring 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:

js
db.adminCommand({ getFreeMonitoringStatus: 1 })

Output yang Dihasilkan:

text
Uncaught 
MongoServerError[CommandNotFound]: no such command: 'getFreeMonitoringStatus'

Untuk pemantauan berkelanjutan, pilihan yang tersedia sekarang:

AlatCocok untuk
mongostat / mongotopPemeriksaan cepat dari terminal — dibahas di Monitoring Performa
AtlasDeployment di cloud, metrik dan alert bawaan
Ops ManagerFleet server self-managed skala enterprise
Exporter Prometheus + GrafanaStack observability open source pilihan sendiri

Rangkuman #

  • currentOp menampilkan operasi yang sedang berjalan; field kuncinya opid, secs_running, ns, client, command, dan planSummary.
  • Filter currentOp memakai 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 dulu command dan client-nya sebelum mengeksekusi.
  • serverStatus tetap 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.