Kenapa Perlu Monitoring Sendiri
VPS provider biasanya memberi metrik dasar: CPU usage, traffic network, disk I/O. Tapi metrik ini tidak cukup untuk debugging aplikasi.
Kamu perlu tahu: berapa banyak request yang gagal? Berapa response time per endpoint? Kapan RAM mulai penuh dan aplikasi mulai swapping? Kapan disk usage mencapai 85%?
Prometheus + Grafana adalah stack monitoring open source yang paling banyak dipakai. Artikel ini fokus ke setup dasar: install, konfigurasi exporter, dan dashboard siap pakai.
Arsitektur
[Node Exporter] ──┐
[MySQL Exporter] ─┤──→ [Prometheus] ──→ [Grafana]
[Nginx Exporter] ─┘ (metrics DB) (dashboard)
Exporter adalah service kecil yang membaca data dari target (server, database, web server) dan menyajikannya dalam format yang dipahami Prometheus. Prometheus menarik data dari semua exporter setiap 15 detik. Grafana membaca data dari Prometheus dan menampilkannya sebagai grafik.
Persiapan
| Komponen | Port | Fungsi |
|---|---|---|
| Prometheus | 9090 | Menyimpan dan memproses metrik |
| Node Exporter | 9100 | Metrik sistem: CPU, RAM, disk, network |
| Grafana | 3000 | Dashboard visualisasi |
1. Install Node Exporter — Metrik Server
Node Exporter harus diinstall di setiap server yang ingin kamu monitor. Mulai dari server utama.
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xzf node_exporter-1.8.2.linux-amd64.tar.gz
sudo mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
rm -rf node_exporter-1.8.2*
Jalankan sebagai systemd service:
sudo nano /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=nobody
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
curl http://localhost:9100/metrics | head -20
2. Install Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.55.0/prometheus-2.55.0.linux-amd64.tar.gz
tar xzf prometheus-2.55.0.linux-amd64.tar.gz
sudo mv prometheus-2.55.0.linux-amd64/prometheus /usr/local/bin/
sudo mv prometheus-2.55.0.linux-amd64/promtool /usr/local/bin/
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo mv prometheus-2.55.0.linux-amd64/{consoles,console_libraries} /etc/prometheus/
rm -rf prometheus-2.55.0*
Konfigurasi /etc/prometheus/prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
labels:
instance: 'server-utama'
Service systemd:
[Unit]
Description=Prometheus
After=network.target
[Service]
User=nobody
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
Cek: buka http://ip_server:9090. Masuk ke Status > Targets, pastikan node exporter statusnya "UP".
3. Install Grafana
sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana
sudo systemctl enable --now grafana-server
Buka http://ip_server:3000. Login default: admin / admin (langsung ganti password setelah login).
Koneksi Grafana ke Prometheus
- Menu: Connections > Data Sources > Add data source
- Pilih Prometheus
- Isi URL:
http://localhost:9090 - Klik Save & Test
4. Dashboard — Langsung Pakai, Tidak Perlu Bikin dari Nol
Bikin dashboard dari nol itu ribet. Grafana punya ribuan dashboard siap pakai.
Dashboard Node Exporter yang paling populer (ID: 1860):
- Menu: Dashboards > New > Import
- Masukkan ID: 1860
- Pilih data source Prometheus
- Klik Import
Kamu langsung dapat dashboard lengkap: CPU usage, RAM usage, disk I/O, network traffic, load average, uptime.
5. Alerting — Kamu Harus Tahu Sebelum User Komplain
Alert Rules di Prometheus
Buat /etc/prometheus/alert_rules.yml:
groups:
- name: server_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU usage above 80% for 5 minutes"
- alert: DiskAlmostFull
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
for: 1m
labels:
severity: critical
annotations:
summary: "Disk space below 15% free"
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "Memory usage above 90%"
Tambah ke prometheus.yml:
rule_files:
- "alert_rules.yml"
Notifikasi ke Telegram
Install Alertmanager (opsional, untuk notifikasi multi-channel). Cara cepat: set Grafana Alerting dengan Contact Point Telegram.
- Di Grafana: Alerting > Contact Points > New
- Pilih Telegram, isi Bot Token + Chat ID
- Buat Notification Policy — kirim semua alert ke Telegram
6. Monitoring Beberapa Server
Tambah entry di prometheus.yml untuk setiap server:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
labels:
instance: 'server-utama'
- targets: ['192.168.1.11:9100']
labels:
instance: 'server-backend-1'
- targets: ['192.168.1.12:9100']
labels:
instance: 'server-backend-2'
Pastikan firewall mengizinkan koneksi dari server Prometheus ke port 9100 di server lain. Jangan buka port 9100 ke internet.
Takeaway
Monitoring bukan barang mewah — ini tools debugging yang menghilangkan "tebak-tebakan" saat ada masalah.
Dengan Prometheus + Grafana:
- Tahu persis kapan CPU/RAM mulai penuh — sebelum aplikasi crash
- Bisa lihat tren: traffic naik 5% per minggu? Saatnya upgrade server
- Alert otomatis ke Telegram — tahu masalah lebih cepat dari user
- Dashboard historis — lihat apa yang terjadi saat incident kemarin
Waktu setup: 20 menit. Benefit: ketenangan jangka panjang.