Kodeloka
  1. Kodeloka
  2. Kelas Prometheus
  3. Materi

Modul 5 · Modul 5 dari 15

Exporter: node, blackbox, postgres, cAdvisor & Textfile

Memantau sistem dan software yang tidak bisa Anda ubah kodenya, serta cara membuat metrik kustom tanpa menulis exporter sendiri.

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

ExporterPortMemantau
node_exporter9100CPU, memori, disk, jaringan Linux/Unix
windows_exporter9182Setara node_exporter untuk Windows
cAdvisor8080Penggunaan sumber daya per container
blackbox_exporter9115Probe dari luar: HTTP, TCP, ICMP, DNS, TLS
postgres_exporter9187PostgreSQL: koneksi, lock, replikasi, ukuran
mysqld_exporter9104MySQL / MariaDB
redis_exporter9121Redis: memori, hit rate, koneksi klien
nginx-prometheus-exporter9113Nginx
kafka_exporter9308Kafka: 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.

blackbox.ymlyaml
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
prometheus.yml (bagian scrape)yaml
  - 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
💡 Alert paling berharga dari blackbox exporter
promql
# 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 > 3

Alert 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/local/bin/cek-backup.shbash
#!/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"
menjalankan node_exporterbash
node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile
⚠️ Selalu tulis ke berkas sementara lalu mv

Bila 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

docker-compose.ymlyaml
  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"]
siapkan-akun.sqlsql
-- 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;