VPS Murah Nevacloud

Yuk, Pasang Grafana + Prometheus untuk Monitoring VPS Tanpa Biaya Bulanan

Halo Sobat Online! Sebuah VPS yang menyala 24 jam itu mirip mobil yang dipakai terus tanpa pernah membuka kap mesinnya. Selama tidak ada lampu peringatan, kita baru sadar ada masalah setelah mesinnya benar-benar mati. Di artikel ini kita akan membangun monitoring VPS sendiri memakai Grafana + Prometheus: sepenuhnya self-hosted, tanpa biaya bulanan, dan tanpa mengirim data server ke pihak ketiga.

Setelah selesai, kamu punya satu papan dasbor yang menampilkan pemakaian CPU, RAM, disk, dan trafik jaringan setiap 15 detik. Jadi saat RAM mulai bocor atau disk mulai penuh, kamu tahu berminggu-minggu sebelum pengunjung website merasakannya.

Kenapa Monitoring VPS dengan Grafana dan Prometheus Layak Dicoba?

Masalah di server hampir tidak pernah datang tiba-tiba. Biasanya ada gejala lebih dulu:

  • RAM naik pelan dari 40% ke 85% selama beberapa hari karena ada proses yang tidak pernah berhenti.
  • Disk terisi 2 GB per hari karena file log tumbuh tanpa pernah diputar.
  • Load average naik di jam tertentu karena ada bot yang menggerogoti halaman login.
  • Trafik keluar melonjak karena ada yang menyalahgunakan servermu.

Pertanyaan “apakah website saya masih terbuka?” tidak bisa menjawab semua itu. Yang bisa menjawab adalah angka historis — dan itulah inti dari monitoring, bukan sekadar cek hidup atau mati.

Bedanya dengan Uptime Kuma

Kita sudah pernah membahas Uptime Kuma untuk memantau website. Perannya tetap penting, tapi fokusnya berbeda:

  • Uptime Kuma menjawab pertanyaan “layanan ini masih hidup atau mati?” dengan tes ringan dari luar server.
  • Prometheus + Grafana menjawab “bagaimana kondisi mesinnya?” dengan mengumpulkan ratusan angka dari dalam server, lalu menyimpannya sebagai riwayat yang bisa digambar.
  • Uptime Kuma memanggil kita saat ada yang tumbang; Grafana memberi tahu kita sebelum ada yang tumbang.

Anggap saja Uptime Kuma itu alarm kebakaran, dan Prometheus + Grafana itu panel suhu mesin lengkap dengan grafiknya. Keduanya butuh dijalankan.

Tiga Kontainer yang Akan Kita Pasang

Semua yang kita pasang berjalan sebagai kontainer Docker, jadi sistem Ubuntu-mu tetap bersih. Ada tiga servis dengan pembagian tugas yang jelas:

  • node_exporter (versi stabil 1.12.1) — alat pengukur. Ia membaca angka dari /proc dan /sys milik server lalu menyajikannya di satu halaman http://IP:9100/metrics. Ibaratnya petugas yang berdiri di ruang mesin dan membacakan semua instrumen tiap beberapa detik.
  • Prometheus (versi 3.15.0, rilis 24 September 2026; jalur LTS 3.13 yang didukung sampai Juli 2027) — perekamnya. Ia menarik data dari node_exporter setiap 15 detik lalu menyimpannya di basis data deret waktu sendiri.
  • Grafana (versi 13.2.3, rilis 29 September 2026) — papannya. Ia membaca angka dari Prometheus, lalu menggambarnya menjadi grafik yang enak dilihat dan bisa memicu notifikasi.

Ketiganya ringan. Satu VPS 2 GB RAM sudah cukup lega; 1 GB masih bisa asal retensinya tidak berlebihan.

Persiapan Sebelum Memasang

Bereskan lima hal ini dulu supaya tidak tersandung di tengah jalan:

  1. VPS dengan Ubuntu 22.04 atau 24.04, plus akses root lewat SSH.
  2. Docker Engine dan plugin Docker Compose sudah terpasang. Cek dengan docker compose version.
  3. Ruang disk minimal 10 GB. Prometheus menyimpan deret waktu di disk, bukan di RAM.
  4. Domain khusus untuk Grafana, misalnya grafana.domainmu.com — atau lewati saja kalau kamu memilih akses lewat terowongan SSH.
  5. Password kuat untuk akun admin Grafana, disiapkan sebelum instalasi karena kita akan mengisinya lewat variabel lingkungan di langkah berikutnya.

Perhatikan satu keputusan desain penting: seluruh port kita ikat hanya ke 127.0.0.1, bukan ke semua antarmuka. Artinya, baik Prometheus, node_exporter, maupun Grafana tidak bisa diakses dari internet. Cara mengaksesnya ada dua — terowongan SSH untuk sesekali, atau reverse proxy dengan HTTPS untuk pemakaian harian. Kita bahas keduanya nanti.

Langkah 1: Siapkan Folder dan Konfigurasi Prometheus

Masuk ke server sebagai root, lalu buat struktur folder yang rapi. Semua file kita tinggal di /opt/monitoring:


mkdir -p /opt/monitoring/prometheus
mkdir -p /opt/monitoring/grafana/provisioning/datasources
cd /opt/monitoring

Sekarang buat file prometheus.yml berisi target yang akan dipantau:


global:
  scrape_interval: 15s
  evaluation_interval: 15s

storage:
  tsdb:
    retention:
      time: 30d
      size: 2GB

scrape_configs:
  - job_name: node
    static_configs:
      - targets: ['127.0.0.1:9100']

Tiga hal yang perlu dicatat dari file sekecil ini:

  • job_name: node jangan diganti. Dasbor populer yang akan kita impor nanti mencari label job dengan nama itu; kalau diganti, grafiknya kosong.
  • storage.tsdb.retention menjaga server dari kehabisan disk: data dipangkas setelah 30 hari, dan ikut dipangkas kalau ukurannya menembus 2 GB.
  • Sejak Prometheus 3.15, setelan retensi lewat flag --storage.tsdb.retention.time sudah deprecated; cara yang dianjurkan adalah blok storage: di file konfigurasi seperti di atas.

Langkah 2: Susun docker-compose.yml

Tiga kontainer, satu file. Simpan sebagai /opt/monitoring/docker-compose.yml:


services:
  node-exporter:
    image: quay.io/prometheus/node-exporter:v1.12.1
    container_name: node-exporter
    restart: unless-stopped
    network_mode: host
    pid: host
    command:
      - '--path.rootfs=/host'
      - '--web.listen-address=127.0.0.1:9100'
    volumes:
      - '/:/host:ro,rslave'

  prometheus:
    image: prom/prometheus:v3.15.0
    container_name: prometheus
    restart: unless-stopped
    network_mode: host
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--web.listen-address=127.0.0.1:9090'
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus-data:/prometheus

  grafana:
    image: grafana/grafana:13.2.3
    container_name: grafana
    restart: unless-stopped
    network_mode: host
    depends_on:
      - prometheus
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: 'Ganti-Dengan-Password-Kuat'
      GF_SERVER_HTTP_ADDR: 127.0.0.1
      GF_SERVER_HTTP_PORT: '3000'
    volumes:
      - grafana-data:/var/lib/grafana
      - ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources:ro

volumes:
  prometheus-data:
  grafana-data:

Kenapa node_exporter memakai network_mode: host dan pid: host? Karena alat ini memang dirancang membaca metrik host, bukan metrik kontainernya sendiri. Dokumentasi resminya meminta dua hal itu supaya ia bisa melihat seluruh proses di server, ditambah pemasangan /:/host:ro,rslave yang membuat angka disk dan CPU milik server asli, bukan milik kontainer.

Dua catatan kecil yang berguna:

  • Kalau kamu lebih suka Grafana dan Prometheus tetap di jaringan bridge Docker, ganti target scrape menjadi host.docker.internal:9100 dan tambahkan extra_hosts: ['host.docker.internal:host-gateway'] pada Prometheus. Pola ini resmi didokumentasikan Docker, tetapi hanya berlaku untuk Docker 20.10 ke atas.
  • Beberapa panel di dasbor nanti menampilkan daftar service systemd atau jumlah proses. Datanya butuh flag tambahan --collector.systemd dan --collector.processes. Di dalam kontainer, collector systemd perlu akses socket D-Bus host, jadi kalau panel itu kosong, jalankan node_exporter langsung sebagai service di host — bukan kesalahan instalasimu.

Terakhir, siapkan file agar Grafana langsung mengenali Prometheus saat pertama kali dinyalakan:


apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://127.0.0.1:9090
    isDefault: true

Simpan sebagai /opt/monitoring/grafana/provisioning/datasources/prometheus.yml. Dengan provisioning, kamu tidak perlu klik-klik menambahkan data source di antarmuka.

Langkah 3: Jalankan Stack dan Pastikan Target Terdeteksi


cd /opt/monitoring
docker compose up -d
docker compose ps
curl -s http://127.0.0.1:9090/api/v1/targets

Yang kita cari di keluaran terakhir adalah status "health":"up" untuk job node. Kalau masih down, urutan pemeriksaannya sederhana: cek kontainer node-exporter hidup, cek curl -s http://127.0.0.1:9100/metrics mengeluarkan angka, lalu cek ulang ejaan target di prometheus.yml.

Langkah 4: Masuk ke Grafana Lewat Terowongan SSH

Karena Grafana hanya mendengarkan di localhost server, kita buat terowongan dari komputer sendiri:


ssh -L 3000:127.0.0.1:3000 -L 9090:127.0.0.1:9090 user@IP-VPS

Biarkan terminal itu terbuka, lalu buka http://localhost:3000 di browser. Masuk dengan username admin dan password yang kamu tulis di GF_SECURITY_ADMIN_PASSWORD. Kalau kamu membiarkan password default admin, Grafana akan meminta kamu menggantinya saat login pertama — perilaku ini memang disengaja, jadi langsung pakai password sendiri sejak awal.

Setelah masuk, cek Connections → Data sources: di situ harus sudah ada Prometheus berlabel default. Klik Save & test untuk memastikan Grafana benar-benar tersambung.

Langkah 5: Impor Dasbor Node Exporter Full

Menulis grafik satu per satu jelas tidak efisien, dan memang tidak perlu. Grafana punya perpustakaan dasbor siap pakai:

  1. Buka menu Dashboards → New → Import.
  2. Isi kolom ID dengan 1860, lalu klik Load. Dasbor ini bernama Node Exporter Full dan grafiknya sudah lengkap dari CPU per core sampai suhu perangkat.
  3. Pada pilihan data source, pilih Prometheus, lalu klik Import.
  4. Tunggu beberapa menit sampai data terkumpul. Panel pertama yang layak kamu perhatikan adalah Memory, Disk Space, dan Network Traffic.

Simpan juga ID dasbor ini di catatanmu. Kalau suatu hari Grafana perlu dibangun ulang dari nol, impor ulang nomor yang sama jauh lebih cepat daripada menyusun grafik dari awal.

Bikin Alarm Sederhana Sebelum Menutup Artikel

Dasbor yang tidak pernah dibuka itu tidak ada gunanya. Karena itu, pindahkan penjagaan ke Grafana Alerting supaya kamu yang dihubungi, bukan kamu yang harus mengecek. Dua aturan yang paling sering menyelamatkan server:

  • RAM dan CPU tinggi — ekspresi 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85 artinya pemakaian CPU rata-rata di atas 85% selama 5 menit.
  • Disk hampir penuh — ekspresi node_filesystem_avail_bytes{mountpoint="/",fstype!~"tmpfs|overlay"} / node_filesystem_size_bytes{mountpoint="/"} * 100 < 15 artinya sisa ruang disk tinggal di bawah 15%.

Buka Alerting → Alert rules → New alert rule, tempel salah satu ekspresi di atas, lalu pasang ambang dan durasi for 10 menit supaya alarm tidak berisik hanya karena lonjakan sesaat. Untuk pengirimannya, tambahkan contact point Telegram atau email di Alerting → Contact points.

Amankan Panel Monitoring

Grafana menyimpan seluruh riwayat server dan punya akses baca ke metrikmu. Karena itu, jangan pernah membuka port 3000 dan 9090 ke internet. Dua jalan yang aman:

  • Terowongan SSH seperti di Langkah 4, cocok untuk pemakaian sesekali.
  • Reverse proxy dengan HTTPS untuk akses harian, dengan subdomain khusus dan sertifikat Let’s Encrypt. Pola ini sama seperti yang kita pakai saat membahas Nginx dan Cloudflare Tunnel: proxy di depan, aplikasi tetap mendengarkan di localhost.

Di sisi firewall server, cukup izinkan SSH dan layanan web saja:


ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Perlu diingat, GF_SECURITY_ADMIN_PASSWORD hanya berpengaruh saat volume Grafana masih kosong. Kalau kamu salah menulisnya, ubah saja lewat Administration → Users di antarmuka, atau reset dari dalam kontainer memakai perintah grafana cli admin reset-admin-password. Dan seperti biasa: jangan tinggalkan port 22 tanpa pengamanan — langkah-langkahnya sudah kita bahas di artikel cara amankan SSH dari brute force.

Kesimpulan

Monitoring VPS dengan Grafana + Prometheus adalah investasi satu jam yang akan terbayar berkali-kali. Tiga kontainer, tiga file konfigurasi, dan kamu sudah punya riwayat lengkap tentang kesehatan server sendiri: CPU, RAM, disk, dan jaringan, tanpa langganan bulanan dan tanpa mengirim data ke mana pun.

Praktik terbaiknya sederhana: biarkan angka terkumpul beberapa hari dulu, perhatikan polanya, baru pasang alarm pada ambang yang benar-benar masuk akal untuk servermu. Server yang terukur adalah server yang bisa dipercaya — dan sekarang kamu yang memegang alat ukurnya. Selamat mencoba, Sobat Online!

Baca juga

Nevacloud VPS Indonesia

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *