Paket 2 · Praktik LanjutanModul G — Monitoring, Logging & Observability
Prometheus, Node Exporter & Grafana
Memasang stack monitoring dengan Docker Compose, scraping Node Exporter, query PromQL, dan dashboard Grafana.
Prometheus mengumpulkan metrik time-series dengan model pull. Node Exporter mengekspos metrik host, dan Grafana memvisualisasikannya.
Arsitektur
Node Exporter :9100 ──scrape──▶ Prometheus :9090 ──query──▶ Grafana :3000
App /metrics ──scrape──▶ │
└──▶ AlertmanagerDocker Compose
services:
prometheus:
image: prom/prometheus:latest
restart: unless-stopped
ports:
- "127.0.0.1:9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prom-data:/prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.retention.time=15d
node-exporter:
image: prom/node-exporter:latest
restart: unless-stopped
ports:
- "127.0.0.1:9100:9100"
pid: host
volumes:
- /:/host:ro,rslave
grafana:
image: grafana/grafana:latest
restart: unless-stopped
ports:
- "127.0.0.1:3001:3000"
volumes:
- grafana-data:/var/lib/grafana
environment:
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD}
volumes:
prom-data:
grafana-data:Jangan mengekspos port monitoring ke publik; akses lewat Tailscale atau reverse proxy dengan auth.
Konfigurasi Prometheus
prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
- job_name: node
static_configs:
- targets: ['node-exporter:9100']
- job_name: app
metrics_path: /metrics
static_configs:
- targets: ['10.10.10.11:3000']Reload konfigurasi:
curl -X POST http://localhost:9090/-/reloadAtau restart container.
PromQL dasar
| Query | Arti |
|---|---|
up | Target hidup (1) atau mati (0) |
node_cpu_seconds_total | Total waktu CPU |
node_memory_MemAvailable_bytes | RAM tersedia |
node_filesystem_avail_bytes | Disk tersedia |
rate(http_requests_total[5m]) | RPS |
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) | p95 latency |
Contoh CPU usage:
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)Error rate:
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))Grafana
- Buka
http://IP:3001. - Login admin.
- Connections → Data sources → Add Prometheus.
- URL:
http://prometheus:9090. - Simpan dan uji.
- Impor dashboard Node Exporter (ID umum: 1860) atau buat sendiri.
Dashboard minimal:
- CPU usage per instance.
- Memory available.
- Disk usage.
- Network.
upstatus.- App RPS, error rate, p95 latency.
Alert rules
alerts.yml:
groups:
- name: host
rules:
- alert: InstanceDown
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Target {{ $labels.instance }} mati"
- alert: DiskAlmostFull
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) < 0.1
for: 10m
labels:
severity: warning
annotations:
summary: "Disk {{ $labels.mountpoint }} hampir penuh"Tambahkan di prometheus.yml:
rule_files:
- /etc/prometheus/alerts.ymlAlertmanager
services:
alertmanager:
image: prom/alertmanager:latest
ports:
- "127.0.0.1:9093:9093"
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml:roalertmanager.yml:
route:
receiver: default
group_by: [alertname]
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receivers:
- name: default
webhook_configs:
- url: http://10.10.10.50:5001/webhookRetensi dan resource
- Prometheus menyimpan TSDB lokal.
- Atur
--storage.tsdb.retention.timesesuai kapasitas. - Pantau penggunaan disk Prometheus.
- Untuk skala besar, gunakan remote write ke VictoriaMetrics/Thanos/Mimir.
Praktik: monitoring host Proxmox/LXC
- Jalankan Node Exporter di host/LXC.
- Tambahkan target ke Prometheus.
- Pastikan
up{job="node"} == 1. - Buat dashboard CPU, RAM, disk, network.
- Buat alert
InstanceDowndan disk. - Uji dengan mematikan exporter sementara.
Troubleshooting
| Gejala | Cek |
|---|---|
| Target down | Port, firewall, service |
| Tidak ada data | scrape_interval, label, waktu |
| Grafana tidak connect | URL datasource di jaringan Docker |
| Alert tidak terkirim | Rule, Alertmanager, webhook |
| Disk Prometheus penuh | Retensi, ukuran TSDB |
Ringkasan
- Prometheus menarik metrik dari exporter dan aplikasi.
- Node Exporter menyediakan metrik host.
- Grafana memvisualisasikan dan membantu investigasi.
- Alert harus berbasis gejala dan diuji.
Selanjutnya
Satukan log di Centralized Logging, Loki & Alerting.