Pernah nggak sih, server tiba-tiba down di jam 2 pagi dan kamu baru sadar pagi harinya pas user sudah komplain? Atau tiba-tiba disk penuh, RAM bocor, atau CPU nembus 100% — tapi kamu nggak punya data apa-apa buat investigasi?
Kalau kamu pernah ngalamin itu, selamat — kamu butuh monitoring. Dan kalau kamu lagi baca artikel ini, berarti kamu sudah di jalur yang benar.
Hari ini gue mau sharing cara setup monitoring server dari nol pakai Prometheus dan Grafana. Dua tools ini bisa dibilang the golden combo di dunia DevOps buat monitoring. Prometheus ngurusin pengumpulan dan penyimpanan metrik, sementara Grafana bikin metrik-metrik itu jadi dashboard cantik yang gampang dibaca.
Nggak perlu khawatir kalau kamu belum pernah pakai keduanya. Gue akan jelasin step-by-step, dari installasi sampai dashboard jadi, kayak lagi ngobrol bareng teman. Let’s go.
Kenapa Harus Prometheus & Grafana?
Sebelum masuk ke teknis, penting buat ngerti kenapa duo ini jadi pilihan utama banyak engineer di seluruh dunia.
Prometheus itu pada dasarnya adalah time-series database yang dirancang khusus buat menyimpan metrik. Dia mengumpulkan data dari target yang kamu tentukan (misalnya server, aplikasi, database) secara periodik lewat mekanisme yang disebut pull-based scraping. Artinya, Prometheus yang aktif “menarik” data dari target, bukan target yang mengirim data ke Prometheus.
Kenapa ini bagus? Karena kamu punya kontrol penuh atas kapan dan dari mana data diambil. Plus, kalau target mati, kamu langsung tahu karena Prometheus gagal melakukan scrape.
Grafana, di sisi lain, adalah tools visualisasi. Dia bisa konek ke berbagai sumber data — termasuk Prometheus — lalu menampilkan data itu dalam bentuk grafik, gauge, table, dan berbagai visualisasi lain. Hasilnya? Dashboard interaktif yang bikin kamu bisa glance sekali langsung tahu kondisi server.
Kalau dipasang bareng, kombinasi ini memberi kamu:
- Pengumpulan metrik otomatis — CPU, RAM, disk, network, proses, dan banyak lagi
- Penyimpanan time-series yang efisien dan bisa di-query pakai PromQL
- Dashboard visual yang bisa di-custom sesuai kebutuhan
- Alerting — bisa kirim notifikasi ke Slack, Telegram, email, atau PagerDuty kalau ada anomali
- Ekosistem luas — banyak exporter buat berbagai service (MySQL, Redis, Nginx, dll.)
Singkatnya: kalau kamu mau monitoring yang serius tapi tetap fleksibel dan open-source, Prometheus + Grafana jawabannya.
Arsitektur dan Komponen yang Dibutuhkan
Sebelum mulai install, mari kita pahami dulu arsitekturnya. Jangan skip bagian ini — memahami arsitektur akan sangat membantu kalau nanti kamu perlu troubleshoot.
Komponen Utama
Komponen yang kita butuhkan:
- Prometheus Server — otak dari operasi, bertugas scraping dan menyimpan metrik
- Node Exporter — agent yang jalan di server target, mengekspos metrik hardware dan OS (CPU, RAM, disk, network)
- Grafana — frontend buat visualisasi data
Di artikel ini kita akan setup semuanya di satu server (single-node). Tapi konsepnya sama kalau kamu mau scale ke banyak server — tinggal tambah target di config Prometheus.
Persiapan Server
Pastikan server kamu memenuhi syarat berikut:
- OS: Ubuntu 22.04 LTS (atau distro Linux lain yang kamu pakai)
- RAM: Minimal 2 GB (4 GB lebih baik kalau mau jalanin semuanya di satu mesin)
- Port terbuka: 9090 (Prometheus), 9100 (Node Exporter), 3000 (Grafana)
- Akses root/sudo
Kalau semua siap, lanjut ke installasi.
Step 1: Install Prometheus
Pertama, kita setup Prometheus. Ada beberapa cara: install langsung dari binary, pakai Docker, atau pakai package manager. Di sini gue akan tunjukin cara install dari binary karena lebih transparan buat belajar, plus gue juga kasih versi Docker-nya.
Opsi A: Install dari Binary
Buat user khusus Prometheus (biar nggak jalan sebagai root):
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
Download dan extract binary Prometheus:
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz
tar xvf prometheus-2.54.0.linux-amd64.tar.gz
Copy binary ke path yang benar:
sudo cp prometheus-2.54.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.54.0.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.54.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.54.0.linux-amd64/console_libraries /etc/prometheus
Buat config dasar:
# /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node-exporter"
static_configs:
- targets: ["localhost:9100"]
Atur ownership:
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
Buat systemd service supaya Prometheus jalan otomatis:
# /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
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 \
--web.enable-lifecycle
Restart=always
[Install]
WantedBy=multi-user.target
Jalankan:
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus
Kalau semuanya benar, buka http://IP_SERVER:9090 dan kamu akan melihat halaman Prometheus. Coba ketik up di bagian query — kalau hasilnya 1, berarti Prometheus sudah berhasil scrape targetnya.
Opsi B: Pakai Docker (Lebih Cepat)
Kalau kamu lebih suka pakai Docker, tinggal jalankan ini:
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:v2.54.0
Pastikan file prometheus.yml sudah kamu buat di /etc/prometheus/prometheus.yml terlebih dahulu.
Step 2: Install Node Exporter
Node Exporter adalah “mata dan telinga” Prometheus di server kamu. Dia mengumpulkan metrik sistem operasi dan hardware, lalu mengeksposnya di endpoint /metrics yang bisa di-scrape oleh Prometheus.
Install Node Exporter:
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xvf node_exporter-1.8.2.linux-amd64.tar.gz
sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
Buat systemd service:
# /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
Jalankan:
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
Cek apakah Node Exporter sudah berjalan:
curl http://localhost:9100/metrics | head -20
Kalau kamu melihat output berisi baris-baris metrik seperti node_cpu_seconds_total, node_memory_MemTotal_bytes, dan lain-lain — berarti Node Exporter sudah siap.
Sekarang kalau kamu buka halaman Prometheus (http://IP_SERVER:9090/targets), seharusnya kedua target (prometheus dan node-exporter) sudah terdeteksi dengan status UP.
Step 3: Install & Konfigurasi Grafana
Sekarang bagian yang paling seru — install Grafana.
Install Grafana di Ubuntu
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
Atau kalau pakai Docker:
docker run -d \
--name grafana \
-p 3000:3000 \
grafana/grafana:11.2.0
Buka http://IP_SERVER:3000 di browser. Login dengan:
- Username:
admin - Password:
admin(kamu akan diminta mengubahnya saat pertama login)
Tambahkan Prometheus sebagai Data Source
- Klik ikon hamburger menu di kiri atas → Connections → Data Sources
- Klik Add data source
- Pilih Prometheus
- Di field Prometheus server URL, masukkan:
http://localhost:9090 - Klik Save & Test
Kalau muncul pesan “Successfully queried the Prometheus API”, berarti koneksi berhasil.
Import Dashboard Populer
Nggak perlu bikin dashboard dari nol. Komunitas Grafana sudah menyediakan ribuan dashboard siap pakai. Yang paling populer buat monitoring server adalah Dashboard #1860 (Node Exporter Full).
Caranya:
- Klik + di sidebar → Import
- Masukkan ID:
1860 - Klik Load
- Pilih data source Prometheus yang tadi kamu tambahkan
- Klik Import
Dan boom — kamu langsung punya dashboard lengkap yang menampilkan CPU usage, memory, disk I/O, network traffic, uptime, dan banyak lagi. Semuanya real-time.
Step 4: Menambahkan Alerting (Opsional tapi Penting)
Dashboard itu bagus, tapi kamu nggak mungkin mantengin layar 24/7. Di sinilah alerting berperan.
Alert di Prometheus
Edit prometheus.yml dan tambahkan rules:
# /etc/prometheus/prometheus.yml
rule_files:
- "alert_rules.yml"
alerting:
alertmanagers:
- static_configs:
- targets: ["localhost:9093"]
Buat file alert rules:
# /etc/prometheus/alert_rules.yml
groups:
- name: server_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU usage tinggi di {{ $labels.instance }}"
description: "CPU usage sudah di atas 80% selama 5 menit."
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "Memory usage tinggi di {{ $labels.instance }}"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
for: 2m
labels:
severity: critical
annotations:
summary: "Disk space tinggal sedikit di {{ $labels.instance }}"
Reload Prometheus:
curl -X POST http://localhost:9090/-/reload
Alert di Grafana (Lebih Mudah)
Alternatif yang lebih user-friendly: bikin alert langsung di Grafana.
- Buka dashboard → klik salah satu panel (misal CPU)
- Klik Edit → tab Alert
- Klik Create Alert rule
- Atur kondisi, misalnya:
WHEN last() OF query(A) IS ABOVE 80 - Atur notification channel (Slack, email, Telegram, dll.)
- Save
Grafana 10+ sudah mendukung Grafana Alerting yang powerful, termasuk alert grouping, silencing, dan routing. Jadi kalau kamu mau cara yang lebih visual, ini pilihan yang bagus.
Tips Tambahan dari Pengalaman
Setelah pakai setup ini di beberapa production server, gue punya beberapa catatan yang mungkin berguna:
1. Perhatikan Retention Policy
Secara default, Prometheus menyimpan data selama 15 hari. Kalau kamu butuh data lebih lama, tambahkan flag ini:
--storage.tsdb.retention.time=90d
Atau kalau mau hemat disk, bisa juga atur berdasarkan ukuran:
--storage.tsdb.retention.size=10GB
2. Gunakan File Discovery untuk Banyak Server
Kalau kamu punya banyak server, jangan hardcode semua target di prometheus.yml. Pakai file_sd_configs supaya lebih rapi:
scrape_configs:
- job_name: "node-servers"
file_sd_configs:
- files:
- /etc/prometheus/targets/*.json
refresh_interval: 30s
Lalu buat file JSON di /etc/prometheus/targets/servers.json:
[
{
"targets": ["192.168.1.10:9100"],
"labels": { "env": "production", "role": "web" }
},
{
"targets": ["192.168.1.11:9100"],
"labels": { "env": "production", "role": "database" }
}
]
Dengan cara ini, kamu tinggal update JSON tanpa restart Prometheus.
3. Amankan Akses
Di production, jangan biarkan Prometheus dan Grafana terbuka ke internet tanpa autentikasi. Beberapa opsi:
- Pakai reverse proxy (Nginx/Caddy) dengan HTTPS dan basic auth
- Batasi akses via firewall (iptables/ufw)
- Kalau pakai Grafana Cloud, mereka sudah handle ini
- Pertimbangkan pakai VPN atau SSH tunnel
4. Backup Grafana Dashboard
Dashboard yang sudah kamu custom susah payah, jangan sampai hilang. Backup secara berkala:
# Export dashboard via API
curl -u admin:password http://localhost:3000/api/dashboards/uid/UID_DASHBOARD > backup.json
Atau lebih baik lagi, simpan dashboard sebagai code menggunakan Grafana provisioning files di repo Git.
Troubleshooting Umum
Beberapa masalah yang sering muncul dan solusinya:
| Masalah | Kemungkinan Penyebab | Solusi |
|---|---|---|
| Target di Prometheus status DOWN | Port tidak terbuka / service belum jalan | Cek systemctl status node_exporter dan firewall |
| Grafana tidak bisa konek ke Prometheus | URL salah | Pastikan pakai http://localhost:9090 (bukan https) |
| Dashboard kosong / No data | Data source belum dikonfigurasi | Pastikan Prometheus di-set sebagai data source di Grafana |
| Prometheus consuming RAM banyak | Terlalu banyak time series | Kurangi jumlah target atau turunkan scrape interval |
Butuh Bantuan Setup Monitoring di Infrastruktur Kamu?
Kalau kamu sudah coba panduan di atas tapi masih stuck, atau butuh setup yang lebih advanced — misalnya monitoring cluster Kubernetes, multi-server, atau integrasi dengan tools lain seperti Alertmanager, Loki, atau Jaeger — jangan ragu buat reach out.
Email: [email protected]
Gue senang bisa bantu diskusi soal monitoring, DevOps, atau infrastruktur kamu. Gratis buat ngobrol, kok.
FAQ (Pertanyaan yang Sering Ditanyakan)
Apakah Prometheus & Grafana gratis?
Ya, keduanya 100% open-source dan gratis. Prometheus di-maintain oleh Cloud Native Computing Foundation (CNCF), dan Grafana dikembangkan oleh Grafana Labs. Keduanya juga punya versi enterprise/hosted (Grafana Cloud, Grafana Enterprise) kalau kamu butuh fitur tambahan atau managed service. Tapi untuk kebanyakan use case, versi open-source-nya sudah lebih dari cukup.
Berapa resource yang dibutuhkan untuk menjalankan Prometheus dan Grafana?
Untuk skala kecil sampai menengah (1–10 server), 2 GB RAM dan 1 vCPU sudah cukup buat menjalankan semuanya di satu mesin. Namun perlu diingat, konsumsi resource Prometheus naik seiring bertambahnya jumlah metrik yang di-scrape. Kalau kamu punya ratusan target, alokasikan 4–8 GB RAM dan pertimbangkan pisahkan komponen ke server berbeda. Untuk storage, hitung kasar: sekitar 1–2 bytes per sample, dengan 15-second scrape interval dan 1000 metrik, kamu butuh sekitar 10–20 GB untuk data 90 hari.
Bisakah monitoring server Windows pakai setup ini?
Bisa! Node Exporter memang khusus Linux, tapi untuk Windows kamu bisa pakai Windows Exporter (sebelumnya bernama WMI Exporter). Installasi dan konfigurasinya mirip — tinggal jalankan Windows Exporter di server Windows, tambahkan target-nya di prometheus.yml, lalu import dashboard Windows Exporter di Grafana (cari dashboard ID 14694 atau 6526 di Grafana community). Kombinasi Prometheus + Grafana mendukung monitoring campuran Linux dan Windows tanpa masalah.
Apakah ada alternatif selain Prometheus dan Grafana?
Tentu. Beberapa alternatif populer: Zabbix (lebih tua, fitur lengkap, tapi lebih berat), Datadog (SaaS, mudah tapi mahal), New Relic (APM-focused), Netdata (real-time, sangat ringan), dan Victoria Metrics (Prometheus-compatible tapi lebih efisien). Pilihan tergantung kebutuhan — kalau kamu mau yang open-source, fleksibel, dan punya komunitas besar, Prometheus + Grafana tetap jadi rekomendasi utama gue.
Semoga artikel ini membantu kamu memulai perjalanan monitoring server. Kalau ada pertanyaan, tinggalkan di kolom komentar atau hubungi gue langsung. Happy monitoring! 🚀