Prakata
Sebelum mengikuti tutorial ini, silahkan setup dockprom terlebih dahulu di server. Apabila sudah, baru bisa mengikuti tutorial ini
Setup Percona MongoDB Exporter dengan Docker

Sedikit catatan, saya menggunakan mongodb non Percona tapi masih bisa menggunakan percona mongodb exporter. Saya menggunakan docker untuk dibanding menginstall file binary exporter nya, anti ribet (aslinya, lama risetnya). Berikut cara setup percona mongodb exporter
- Buat satu file baru,
docker-compose.yml
isikan dengan
version: "3.3"
services:
mongodb_exporter:
image: percona/mongodb_exporter:0.20
container_name: mongodb-exporter
ports:
- 9216:9216
entrypoint: ["/mongodb_exporter", "--mongodb.uri=mongodb://username:password@192.168.3.69:27017/?authSource=admin", "--enable.dbstats", "--log.level=info", "--discovering-mode", "--mongodb.collstats-colls=your_main_db.*", "--mongodb.indexstats-colls=yourLovelyDatabase.*", "--mongodb.global-conn-pool", "--compatible-mode"]
Sebelumnya jangan lupa buat user dulu khusus untuk monitoring
db.createUser(
{ user: "cluster_monitor_user",
pwd: "password",
roles:[ {
"role":"clusterMonitor",
"db":"admin"
},
{
"role":"read",
"db":"local"
}]});
-
Jalankan dengan
docker-compose up -d
Deploy Percona MongoDB Exporter
-
Untuk test jalan atau tidak, bisa di cek dengan
curl localhost:9216/metrics
Tambahkan di Prometheus
- Buka file prometheus.yml (di dockprom terletak di folder dockprom/prometheus), tambahkan
- job_name: 'mongodb'
scrape_interval: 10s
honor_labels: true
static_configs:
- targets: ['192.168.3.69:9216', '192.168.3.96:9216']
- Buat file mongodb.rules di folder dockprom/prometheus
#di ambil dari https://awesome-prometheus-alerts.grep.to/rules#mongodb
groups:
- name: mongodb
rules:
- alert: MongoDBDown
expr: mongodb_up == 0
for: 0m
labels:
severity: critical
annotations:
summary: MongoDB Down (instance {{ $labels.instance }})
description: "MongoDB instance is down\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: MongoDBReplicationLag
expr: mongodb_mongod_replset_member_optime_date{state="PRIMARY"} - ON (set) mongodb_mongod_replset_member_optime_date{state="SECONDARY"} > 10
for: 0m
labels:
severity: critical
annotations:
summary: MongoDB replication lag (instance {{ $labels.instance }})
description: "MongoDB replication lag is more than 10s\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: MongoDBReplicationHeadroom
expr: (avg(mongodb_mongod_replset_oplog_head_timestamp - mongodb_mongod_replset_oplog_tail_timestamp) - (avg(mongodb_mongod_replset_member_optime_date{state="PRIMARY"}) - avg(mongodb_mongod_replset_member_optime_date{state="SECONDARY"}))) <= 0
for: 0m
labels:
severity: critical
annotations:
summary: MongoDB replication headroom (instance {{ $labels.instance }})
description: "MongoDB replication headroom is <= 0\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: MongoDBNumberCursorsOpen
expr: mongodb_mongod_metrics_cursor_open{state="total"} > 10 * 1000
for: 2m
labels:
severity: warning
annotations:
summary: MongoDB number cursors open (instance {{ $labels.instance }})
description: "Too many cursors opened by MongoDB for clients (> 10k)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: MongoDBCursorsTimeouts
expr: increase(mongodb_mongod_metrics_cursor_timed_out_total[1m]) > 100
for: 2m
labels:
severity: warning
annotations:
summary: MongoDB cursors timeouts (instance {{ $labels.instance }})
description: "Too many cursors are timing out\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: MongoDBTooManyConnections
expr: avg by(instance) (rate(mongodb_connections{state="current"}[1m])) / avg by(instance) (sum (mongodb_connections) by (instance)) * 100 > 80
for: 2m
labels:
severity: warning
annotations:
summary: MongoDB too many connections (instance {{ $labels.instance }})
description: "Too many connections (> 80%)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: MongoDBVirtualMemoryUsage
expr: (sum(mongodb_memory{type="virtual"}) BY (instance) / sum(mongodb_memory{type="mapped"}) BY (instance)) > 3
for: 2m
labels:
severity: warning
annotations:
summary: MongoDB virtual memory usage (instance {{ $labels.instance }})
description: "High memory usage\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- Restart prometheus,
docker restart prometheus

MongoDB Exporter di Prometheus
Setup Grafana Dashboard
Untuk grafana dashboard nya, saya menggunakan dashboard 12079

Tampilan Dashboard 12079
Catatan, setelah setup data tidak akan langsung muncul, tunggu beberapa menit

Jika kamu merasa tulisan ini bermanfaat & membantu kamu, kamu bisa berdonasi lewat saweria
If you feel this website help you, you can donate at saweria