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:
- Exporter berjalan di setiap sistem target, expose metrik via HTTP (
/metrics
) - Prometheus melakukan scrape secara berkala (pull) ke endpoint endpoint tersebut
- Prometheus menyimpan metrik di internal time-series database (TSDB)
- Grafana melakukan query ke Prometheus untuk menampilkan metrik dalam bentuk dashboard (grafik, gauge, tabel, dsb)
- 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[5
m])
š 3. Contoh Implementasi Nyata (Misal: di Homelab kamu)
Misal kamu punya setup sebagai berikut:
Komponen | Detail |
---|---|
Prometheus | Container di 192.168.1.2:9090 |
Grafana | Container di 192.168.1.2:3000 |
node_exporter | Di semua VM/host, port 9100 |
cadvisor | Di semua host Docker, port 8080 |
mysqld_exporter | Di MySQL server, port 9104 |
snmp_exporter | Untuk 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
- Tambahkan Datasource Prometheus
URL:http://192.168.1.2:9090
- Import Dashboard:
1860
ā Node Exporter Full193
ā MySQL Overview179
ā Docker Host Monitor- Bisa juga bikin dashboard custom
- Buat Panel:
- Judul: CPU Usage
- Query:promqlCopyEdit100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)
ā Keuntungan Setup Ini
Kelebihan | Penjelasan |
---|---|
ā Real-time monitoring | Data update per detik |
ā Mudah diskalakan | Tambah target tinggal nambah job |
ā Dashboard fleksibel | Bisa custom panel sesuka hati |
ā Alerting kuat | Bisa alert ke ntfy, Telegram, email |
ā Open-source & integrasi luas | Bisa 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"
atauregion="id"
untuk filtering data di Grafana