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──▶        │
                                     └──▶ Alertmanager

Docker 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/-/reload

Atau restart container.

PromQL dasar

QueryArti
upTarget hidup (1) atau mati (0)
node_cpu_seconds_totalTotal waktu CPU
node_memory_MemAvailable_bytesRAM tersedia
node_filesystem_avail_bytesDisk 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

  1. Buka http://IP:3001.
  2. Login admin.
  3. Connections → Data sources → Add Prometheus.
  4. URL: http://prometheus:9090.
  5. Simpan dan uji.
  6. Impor dashboard Node Exporter (ID umum: 1860) atau buat sendiri.

Dashboard minimal:

  • CPU usage per instance.
  • Memory available.
  • Disk usage.
  • Network.
  • up status.
  • 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.yml

Alertmanager

services:
  alertmanager:
    image: prom/alertmanager:latest
    ports:
      - "127.0.0.1:9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro

alertmanager.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/webhook

Retensi dan resource

  • Prometheus menyimpan TSDB lokal.
  • Atur --storage.tsdb.retention.time sesuai kapasitas.
  • Pantau penggunaan disk Prometheus.
  • Untuk skala besar, gunakan remote write ke VictoriaMetrics/Thanos/Mimir.

Praktik: monitoring host Proxmox/LXC

  1. Jalankan Node Exporter di host/LXC.
  2. Tambahkan target ke Prometheus.
  3. Pastikan up{job="node"} == 1.
  4. Buat dashboard CPU, RAM, disk, network.
  5. Buat alert InstanceDown dan disk.
  6. Uji dengan mematikan exporter sementara.

Troubleshooting

GejalaCek
Target downPort, firewall, service
Tidak ada datascrape_interval, label, waktu
Grafana tidak connectURL datasource di jaringan Docker
Alert tidak terkirimRule, Alertmanager, webhook
Disk Prometheus penuhRetensi, 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

On this page