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:
- CPU > 85% selama 10 menit
- RAM > 90%
- Disk free < 15%
- 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.