Apa Itu Exporter
Exporter adalah program kecil yang membaca informasi dari suatu sistem (kernel Linux, PostgreSQL, Redis, perangkat jaringan) lalu menyajikannya sebagai endpoint /metrics yang bisa dibaca Prometheus. Ia adalah penerjemah — bukan penyimpan.
Exporter yang Paling Sering Dipakai
| Exporter | Port | Memantau |
|---|---|---|
node_exporter | 9100 | CPU, memori, disk, jaringan Linux/Unix |
windows_exporter | 9182 | Setara node_exporter untuk Windows |
cAdvisor | 8080 | Penggunaan sumber daya per container |
blackbox_exporter | 9115 | Probe dari luar: HTTP, TCP, ICMP, DNS, TLS |
postgres_exporter | 9187 | PostgreSQL: koneksi, lock, replikasi, ukuran |
mysqld_exporter | 9104 | MySQL / MariaDB |
redis_exporter | 9121 | Redis: memori, hit rate, koneksi klien |
nginx-prometheus-exporter | 9113 | Nginx |
kafka_exporter | 9308 | Kafka: consumer lag, partisi |
Blackbox Exporter — Memantau dari Sudut Pandang Pengguna
Ini exporter yang paling sering diremehkan. Semua metrik internal bisa hijau sementara pengguna sama sekali tidak bisa mengakses situs Anda (sertifikat kedaluwarsa, DNS salah, load balancer salah konfigurasi). Blackbox exporter memeriksa dari luar.
modules:
http_2xx:
prober: http
timeout: 8s
http:
valid_status_codes: [200, 201, 204]
valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
method: GET
follow_redirects: true
preferred_ip_protocol: ip4
fail_if_body_not_matches_regexp:
- '"status"\s*:\s*"ok"'
http_post_login:
prober: http
timeout: 10s
http:
method: POST
headers: { Content-Type: application/json }
body: '{"username":"probe","password":"probe"}'
valid_status_codes: [200]
tcp_connect:
prober: tcp
timeout: 5s
icmp_ping:
prober: icmp
timeout: 5s - job_name: blackbox-http
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://tokocepat.id
- https://api.tokocepat.id/health
- https://admin.tokocepat.id
relabel_configs:
# Pola WAJIB untuk blackbox — tanpa ini probe tidak akan bekerja
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115# Situs tidak bisa diakses
probe_success == 0
# Sertifikat TLS akan kedaluwarsa dalam 14 hari
(probe_ssl_earliest_cert_expiry - time()) / 86400 < 14
# Waktu respons dari luar memburuk
probe_duration_seconds > 3Alert sertifikat kedaluwarsa sendirian sudah menyelamatkan banyak tim dari insiden akhir pekan yang tidak perlu.
Textfile Collector — Metrik Kustom Tanpa Menulis Exporter
Fitur node_exporter yang sangat berguna: ia membaca berkas .prom dari sebuah direktori dan menyajikannya sebagai metrik. Cocok untuk hasil cron job, skrip backup, atau data dari sistem lama.
#!/usr/bin/env bash
# Dijalankan oleh cron setelah backup selesai.
set -euo pipefail
DIR=/var/lib/node_exporter/textfile
TMP="$DIR/backup.prom.$$" # tulis ke temp dulu
BERKAS=$(ls -t /backup/*.sql.gz 2>/dev/null | head -1 || true)
if [ -z "$BERKAS" ]; then
UMUR=999999; UKURAN=0; SUKSES=0
else
UMUR=$(( $(date +%s) - $(stat -c %Y "$BERKAS") ))
UKURAN=$(stat -c %s "$BERKAS")
SUKSES=1
fi
cat > "$TMP" <<EOF
# HELP backup_terakhir_umur_detik Umur berkas backup terbaru dalam detik.
# TYPE backup_terakhir_umur_detik gauge
backup_terakhir_umur_detik $UMUR
# HELP backup_terakhir_ukuran_bytes Ukuran berkas backup terbaru.
# TYPE backup_terakhir_ukuran_bytes gauge
backup_terakhir_ukuran_bytes $UKURAN
# HELP backup_sukses Apakah backup terakhir berhasil (1) atau tidak (0).
# TYPE backup_sukses gauge
backup_sukses $SUKSES
EOF
# Pindah atomik supaya node_exporter tidak pernah membaca berkas separuh jadi
mv "$TMP" "$DIR/backup.prom"node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfilemvBila skrip menulis langsung ke backup.prom, ada kemungkinan node_exporter membacanya saat isinya baru separuh — menghasilkan error parsing dan metrik yang hilang. Perintah mv pada filesystem yang sama bersifat atomik, sehingga pembaca selalu melihat berkas utuh.
Menjalankan Exporter yang Butuh Kredensial
postgres-exporter:
image: quay.io/prometheuscommunity/postgres-exporter:v0.16.0
environment:
# Pakai akun read-only khusus monitoring, BUKAN superuser
DATA_SOURCE_NAME: "postgresql://pemantau:${PG_PASS}@db:5432/tokocepat?sslmode=disable"
ports: ["9187:9187"]-- Akun khusus monitoring dengan hak minimum
CREATE USER pemantau WITH PASSWORD 'ganti-ini';
GRANT pg_monitor TO pemantau; -- role bawaan PostgreSQL 10+
GRANT CONNECT ON DATABASE tokocepat TO pemantau;