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

┌│││└┌│││└─────────NE(──AE──oxd──pxo──dpi──ppp──eo──os──rs──ri──te──to──er──en──rv──ra──e──l──r──)──)───────┐┘┐┘││││││◄◄───/─/s─ms─mc─ec─er─tr─ta─ra─rp─ip─ie─ce─c─s─s──────────┌─│││└┌││└─────────PS(──G──ret──rv──ori──ai──mvm──fs──eee──au──tr-─││▼─na──hs┬│─al──ee─d─i──ur─a─s──si─t─a──e─a─s──s─s─i───o─)──D─u───B─r──┐)─c──┘e┐┘│││││

Komponen yang kita butuhkan:

  1. Prometheus Server — otak dari operasi, bertugas scraping dan menyimpan metrik
  2. Node Exporter — agent yang jalan di server target, mengekspos metrik hardware dan OS (CPU, RAM, disk, network)
  3. 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

  1. Klik ikon hamburger menu di kiri atas → Connections → Data Sources
  2. Klik Add data source
  3. Pilih Prometheus
  4. Di field Prometheus server URL, masukkan: http://localhost:9090
  5. 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:

  1. Klik + di sidebar → Import
  2. Masukkan ID: 1860
  3. Klik Load
  4. Pilih data source Prometheus yang tadi kamu tambahkan
  5. 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.

  1. Buka dashboard → klik salah satu panel (misal CPU)
  2. Klik Edit → tab Alert
  3. Klik Create Alert rule
  4. Atur kondisi, misalnya: WHEN last() OF query(A) IS ABOVE 80
  5. Atur notification channel (Slack, email, Telegram, dll.)
  6. 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:

MasalahKemungkinan PenyebabSolusi
Target di Prometheus status DOWNPort tidak terbuka / service belum jalanCek systemctl status node_exporter dan firewall
Grafana tidak bisa konek ke PrometheusURL salahPastikan pakai http://localhost:9090 (bukan https)
Dashboard kosong / No dataData source belum dikonfigurasiPastikan Prometheus di-set sebagai data source di Grafana
Prometheus consuming RAM banyakTerlalu banyak time seriesKurangi 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! 🚀