Prometheus + Grafana + Exporter

Prometheus + Grafana + Exporter

šŸ“¦ 1. Arsitektur Umum: Grafana + Prometheus + Exporter

graph TD
A[Target Sistem (Linux, Docker, MySQL, dll)]
B[Exporter (/metrics endpoint)]
C[Prometheus]
D[Grafana (Dashboard)]
E[Alertmanager]

A --> B
B --> C
C --> D
C --> E


šŸ” Alur Data:

  1. Exporter berjalan di setiap sistem target, expose metrik via HTTP (/metrics)
  2. Prometheus melakukan scrape secara berkala (pull) ke endpoint endpoint tersebut
  3. Prometheus menyimpan metrik di internal time-series database (TSDB)
  4. Grafana melakukan query ke Prometheus untuk menampilkan metrik dalam bentuk dashboard (grafik, gauge, tabel, dsb)
  5. Jika diperlukan, Prometheus juga mengirim alert ke Alertmanager

šŸ”¹ 2. Penjelasan Per Komponen

šŸ”ø A. Exporter

  • Bertugas mengubah data sistem jadi format Prometheus
  • Contoh: node_exporter, cadvisor, mysqld_exporter
  • Expose metrik via endpoint HTTP, misalnya:
    http://192.168.1.10:9100/metrics

šŸ”ø B. Prometheus

  • Scrape data dari exporter setiap X detik (default: 15s)
  • Simpan dalam internal TSDB
  • Bisa menulis alert rule, seperti:- alert: HighCPU
    expr: 100 * (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[1m]))) > 90
    for: 1m
    labels:
    severity: warning
    annotations:
    summary: "CPU usage > 90%"

  • Expose query API (/api/v1/query) untuk diakses Grafana

šŸ”ø C. Grafana

  • Tool visualisasi untuk time-series data
  • Bisa tarik data dari Prometheus (atau banyak datasource lain)
  • Support dashboard, alert, sharing, dsb
  • Query pakai PromQL, contohnya:rate(node_network_receive_bytes_total[5m])

šŸ” 3. Contoh Implementasi Nyata (Misal: di Homelab kamu)

Misal kamu punya setup sebagai berikut:

KomponenDetail
PrometheusContainer di 192.168.1.2:9090
GrafanaContainer di 192.168.1.2:3000
node_exporterDi semua VM/host, port 9100
cadvisorDi semua host Docker, port 8080
mysqld_exporterDi MySQL server, port 9104
snmp_exporterUntuk MikroTik/switch, port 9116

šŸ“ Sample prometheus.yml

global:
scrape_interval: 15s

scrape_configs:
- job_name: "node"
static_configs:
- targets: ["192.168.1.10:9100", "192.168.1.11:9100"
]

- job_name: "cadvisor"
static_configs:
- targets: ["192.168.1.10:8080"
]

- job_name: "mysql"
static_configs:
- targets: ["192.168.1.12:9104"
]

- job_name: "mikrotik"
static_configs:
- targets: ["192.168.1.1:161"
]
metrics_path: /snmp
params:
module: [mikrotik
]


šŸ–„ļø Di Grafana

  1. Tambahkan Datasource Prometheus
    URL: http://192.168.1.2:9090
  2. Import Dashboard:
    • 1860 → Node Exporter Full
    • 193 → MySQL Overview
    • 179 → Docker Host Monitor
    • Bisa juga bikin dashboard custom
  3. Buat Panel:
    • Judul: CPU Usage
    • Query:promqlCopyEdit100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)

āœ… Keuntungan Setup Ini

KelebihanPenjelasan
āœ… Real-time monitoringData update per detik
āœ… Mudah diskalakanTambah target tinggal nambah job
āœ… Dashboard fleksibelBisa custom panel sesuka hati
āœ… Alerting kuatBisa alert ke ntfy, Telegram, email
āœ… Open-source & integrasi luasBisa gabung ke sistem lain (ELK, Loki, dsb)

šŸ’” Tips

  • Gunakan Docker untuk semua komponen agar mudah deploy
  • Simpan konfigurasi dalam bentuk Docker Compose
  • Backup data TSDB atau pakai remote write ke Thanos/Cortex
  • Gunakan label seperti env="prod" atau region="id" untuk filtering data di Grafana