Cara Setup Monitoring Server Murah Pakai Grafana + Prometheus (Step-by-Step) [Full]

Cara Setup Monitoring Server Murah Pakai Grafana + Prometheus (Step-by-Step) [Full]

Kebanyakan server itu sebenarnya nggak pernah “mati mendadak”. Biasanya ada tanda dulu: RAM mulai tinggi, disk makin penuh, response makin lambat. Masalahnya, tanda itu sering nggak kelihatan karena kita belum punya monitoring yang proper.

Di artikel ini kita setup monitoring yang simpel, murah, tapi kepake: Prometheus + Grafana + Node Exporter. Fokusnya bukan teori panjang, tapi setup yang realistis dipakai di server harian.

Kenapa pilih stack ini?

Alasannya sederhana:

  • Open-source dan gratis.
  • Cukup ringan buat VPS kecil-menengah.
  • Nanti gampang ditingkatkan (alerting, dashboard lanjutan, exporter tambahan).

Kalau server kamu masih satu-dua node, ini sudah lebih dari cukup untuk mulai observability dengan serius.

Arsitektur singkat

Alur dasarnya begini:

Node Exporter -> Prometheus -> Grafana

  • Node Exporter baca metric host (CPU, RAM, disk, network).
  • Prometheus scrape metric per interval.
  • Grafana visualisasi metric jadi dashboard yang enak dibaca.

Prasyarat

  • Linux server (Ubuntu/Debian)
  • Docker + Docker Compose
  • Akses sudo

1) Siapkan folder kerja

mkdir -p monitoring/prometheus
cd monitoring

2) Buat docker-compose

services:
  prometheus:
    image: prom/prometheus:v3.4.2
    container_name: prometheus
    restart: unless-stopped
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.path=/prometheus
      - --storage.tsdb.retention.time=15d
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus_data:/prometheus
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:11.6.0
    container_name: grafana
    restart: unless-stopped
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: GANTI_PASSWORD_KUAT
      GF_USERS_ALLOW_SIGN_UP: "false"
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "3000:3000"
    networks:
      - monitoring

  node-exporter:
    image: prom/node-exporter:v1.9.1
    container_name: node-exporter
    restart: unless-stopped
    command:
      - --path.rootfs=/host
      - --collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)
    volumes:
      - /:/host:ro,rslave
    networks:
      - monitoring

networks:
  monitoring:

volumes:
  prometheus_data:
  grafana_data:

Catatan penting: jangan buka Grafana mentah ke internet tanpa proteksi. Kalau server publik, lebih aman lewat reverse proxy + auth.

3) Buat konfigurasi Prometheus

File: monitoring/prometheus/prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["prometheus:9090"]

  - job_name: node-exporter
    static_configs:
      - targets: ["node-exporter:9100"]

4) Jalankan semua service

docker compose up -d
docker compose ps

Pastikan tiga container ini statusnya Up:

  • prometheus
  • grafana
  • node-exporter

5) Login Grafana dan tambah datasource

Buka: http://IP_SERVER:3000

Lalu di Grafana:

  • Connections -> Data Sources -> Add data source
  • Pilih Prometheus
  • URL: http://prometheus:9090
  • Klik Save & test

6) Import dashboard

Masuk ke Dashboards -> Import, lalu pakai dashboard Node Exporter yang sesuai.

Dari sini kamu sudah bisa lihat metrik inti:

  • CPU
  • Memory
  • Disk
  • Network
  • Load average

Alert dasar (jangan kebanyakan dulu)

Awal-awal cukup 4 ini:

  1. CPU > 85% selama 10 menit
  2. RAM > 90%
  3. Disk free < 15%
  4. Node Exporter down

Hindari bikin terlalu banyak alert dari awal, nanti malah “noise” dan akhirnya diabaikan.

Kesalahan yang sering terjadi

  • Datasource URL salah (pakai localhost, padahal harus nama service Docker).
  • Lupa persistence volume (dashboard hilang setelah container recreate).
  • Grafana dibuka publik tanpa proteksi.
  • Alert kebanyakan, akhirnya yang penting malah ketutup noise.

Penutup

Monitoring server nggak harus mahal. Dengan stack ini, kamu sudah punya fondasi yang kuat untuk mencegah kejadian “tau-tau down”.

Setelah basic ini stabil, baru lanjut ke level berikutnya: notifikasi Telegram, dashboard custom per service, dan SLO sederhana buat endpoint utama.