Dalam dunia DevOps, melakukan pemantauan performa server dan aplikasi secara realtime merupakan kebutuhan penting. Apakah CPU server yang digunakan kelebihan beban? Berapa banyak memory, CPU atau bandwidth yang digunakan aplikasi?
Jawaban dari pertanyaan-pertanyaan tersebut bisa didapatkan dengan membangun sebuah sistem monitoring untuk melakukan pemantauan server ataupun infrastruktur digital.
Pada bagian ini, kita akan membahas cara membuat sistem monitoring sederhana menggunakan Grafana, Prometheus, dan Node Exporter, serta bonus tambahan untuk memonitor aplikasi NestJS.
Apa Itu Grafana, Prometheus, dan Node Exporter?
Sebelum masuk ke teknis, mari kita membahas dulu tiga tools utama yang akan digunakan pada tutorial ini.
Apa itu Prometheus?
Prometheus adalah tools open-source yang berfungsi sebagai time-series database. Ia bekerja dengan cara melakukan scraping data metrics dari berbagai sumber, seperti server atau aplikasi pada interval tertentu.
Apa itu Node Exporter?
Node Exporter adalah agen ringan yang dapat dipasang di server. Ia akan mengekspor berbagai metrik sistem seperti CPU, memory, disk usage, dan network, yang kemudian bisa dibaca oleh Prometheus.
Apa itu Grafana?
Grafana adalah platform visualisasi open-source. Dengan Grafana, kita bisa membuat dashboard interaktif untuk menampilkan metrik yang dikumpulkan oleh Prometheus dalam bentuk grafik atau visual lainnya.
Setup Monitoring Server (Prometheus, Node Exporter, Grafana)
Pastikan Sudah Install Docker dan Docker Compose
Pada tutorial ini, aplikasi untuk monitoring yang akan kita setup akan berjalan dalam container. Pastikan Docker dan Docker Compose sudah terpasang pada perangkat server anda, cek dengan perintah berikut di Terminal:
docker --version docker compose version
Jika Docker dan Docker Compose belum terpasang, kamu bisa install Docker dan Docker Compose terlebih dulu dari alamat berikut : https://docs.docker.com/get-docker/
Buat Folder Proyek
Langkah awal adalah membuat folder baru untuk menyimpan semua konfigurasi monitoring. Bisa gunakan Code Editor atau IDE:

Buat File docker-compose.yml
Setelah membuat folder untuk project, kemudian buat file “docker-compose.yml”. File ini akan digunakan untuk mendefinisikan semua service (Prometheus, Node Exporter, Grafana). Kita akan menggunakan image yang disediakan oleh Docker:
Kemudian isi file tersebut dengan source code berikut:
version: "3.8" services: prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" - "--web.console.libraries=/etc/prometheus/console_libraries" - "--web.console.templates=/etc/prometheus/consoles" - "--web.enable-lifecycle" networks: - monitoring-network restart: unless-stopped node-exporter: image: prom/node-exporter:latest container_name: node-exporter ports: - "9100:9100" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - "--path.procfs=/host/proc" - "--path.sysfs=/host/sys" - "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)" networks: - monitoring-network restart: unless-stopped grafana: image: grafana/grafana:latest container_name: grafana ports: - "3001:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana_data:/var/lib/grafana networks: - monitoring-network restart: unless-stopped depends_on: - prometheus networks: monitoring-network: driver: bridge volumes: prometheus_data: grafana_data:
Keterangan dari source code:
- prometheus: Service utama untuk mengumpulkan metrik.
- node-exporter: Mengirim metrik sistem host ke Prometheus.
- grafana: Menyediakan dashboard visual.
Buat Konfigurasi Prometheus
Prometheus memerlukan file konfigurasi untuk mengetahui target apa saja yang akan di-scrape. Untuk membuat file konfigurasi tersebut, buat folder dengan nama “prometheus” dan buat file dengan nama “prometheus.yml” di dalamnya, seperti pada gambar berikut:

Kemudian tulis source code berikut ke dalam file 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: ["node-exporter:9100"] - job_name: "nestjs-app" metrics_path: /metrics static_configs: - targets: ["nestjs-app:3100"]
Keterangan dari source code:
- scrape_interval: Frekuensi Prometheus melakukan pengambilan data
- targets: Endpoint service yang ingin dipantau.
Jalankan Semua Service
Kemudian jalan semua service yang telah dibuat dengan menggunakan perintah berikut:
docker compose up -d
Opsi -d pada perintah di atas berarti service akan berjalan di background. Untuk memastikan service sudah berjalan, kamu dapat memastikannya dengan menggunakan perintah berikut:
docker compose ps
Kemudian kamu akan melihat semua service yang sudah dibuat sebelumnya sudah berjalan ditandai dengan status “up” seperti pada gambar berikut:

Akses Prometheus & Grafana
Akses Prometheus & Grafana melalui web browser dengan url dan port yang ada di file konfigurasi atau “docker-compose.yml”
Untuk akses Prometheus, kamu bisa mengakses alamat dan port berikut seperti yang tertera pada file konfigurasi http://localhost:9090.
Kemudian coba masukkan query “node_cpu_seconds_total” untuk melihat metrik penggunaan CPU di server:

Metrik ini berasal dari Node Exporter yang mencatat jumlah total waktu (dalam detik) yang telah dihabiskan oleh CPU dalam berbagai mode operasional.
Setiap baris memiliki beberapa label sebagai berikut:
- cpu=”0″ atau cpu=”1″: menunjukkan CPU core yang dimaksud
- mode=”…”: menunjukkan jenis aktivitas CPU
- instance=”node-exporter:9100″: alamat dari target yang di-scrape
- job=”node-exporter”: nama job dari prometheus.yml.
- dan yang paling kanan adalah value dari metrik tersebut.
Untuk mengakses Grafana, kamu bisa mengakses alamat dan port berikut seperti yang tertera pada server, http://localhost:3001.
Kemudian login dengan username dan password default, yaitu username “admin” dan password ”admin” sesuai “env” yang ada di “docker-compose”:

Setup Konfigurasi Visualisasi di Grafana
Setelah semua konfigurasi sebelumnya selesai, selanjutnya adalah melakukan konfigurasi untuk Visualisasi di Grafana. Dengan Grafana kita bisa membuat dashboard interaktif untuk menampilkan metrik yang dikumpulkan oleh Prometheus.
Tambahkan Prometheus Sebagai Data Source
Langkah pertama adalah menambahkan Prometheus sebagai data source untuk visualisasi dashboard di Grafana. Masuk ke “Connections” -> kemudian pilih “Data”, lalu pilih “Prometheus”, seperti pada gambar di bawah:

Kemudian masukkan URL “http://prometheus:9090” atau “http://localhost:9090” di bagian “Connection” di “Prometheus server URL” seperti pada gambar dibawah:

Klik “Save & Test” untuk menyimpan konfigurasi.
Buat Dashboard Baru di Grafana untuk Monitoring Server
Setelah selesai melakukan konfigurasi URL Prometheus di Grafana, selanjutnya adalah buat dashboard baru untuk monitoring server. Pertama klik tombol “Create” kemudian pilih “Dashboard” dan pilih “Add new” untuk membuat dashboard baru.
Selanjutnya pilih “data source” Prometheus yang sudah kita tambahkan sebelumnya, seperti pada gambar berikut:

Kemudian, pada tab “Queries”, kita bisa melakukan “query” untuk metrik yang akan kita tampilkan visualnya. Misalnya kita bisa menggunakan “query” berikut seperti pada gambar di bawah:

Kamu bisa mengatur panel sesuai kebutuhan (warna, threshold, jenis grafik).
Bagian-bagian dan Modifikasi Panel di Dashboard Grafana
Berikut adalah bagian-bagian yang dikonfigurasi pada panel dashboard Grafana untuk menyesuaikan metrik dan visualisasi yang akan kita buat:
- Panel Title dan Description
- Title: Sebagai judul panel agar lebih deskriptif terhadap dashboard yang akan dibuat, misalnya: Available Memory
- Description: Berfungsi untuk menjelaskan fungsi panel ini atau query yang digunakan, berguna untuk dokumentasi tim. Ini bersifat opsional.
- Queries
- Data source: Untuk memilih sumber data yang akan digunakan dalam visualisasi, dalam hal ini sudah dikonfigurasi ke Prometheus
- Metric: Kamu menggunakan node_memory_MemAvailable_bytes, yaitu sisa RAM yang tersedia dalam satuan byte
- Label filters: Bisa difilter berdasarkan instance, job, dsb. Misalnya, instance=”node-exporter:9100″ jika ingin spesifik ke satu server.
- Query Options
- Interval: Untuk menentukan resolusi data, secara default nilainya otomatis (auto), tapi bisa disetel misalnya ke 1m, 5s, dsb.
- Legend: Dapat dikustomisasi untuk memberi nama label pada garis grafik.
- Visualization (Time series)
Ini menentukan jenis tampilan data. Saat ini kita menggunakan Time series, tetapi bisa diganti ke pilihan-pilihan lainnya seperti:
- Gauge: Cocok untuk nilai tunggal seperti CPU usage.
- Bar gauge, Stat, Table, dan lain sebagainya.
Cara Import Dashboard di Grafana
Fitur “Import Dashboard” di Grafana berfungsi untuk melakukan import dashboard yang sudah tersedia sebelumnya, misalnya kamu ingin menggunakan dashboard bawaan dari komunitas, menyalin dashboard dari server lain atau melakukan restore dashboard dari backup file “.json” dari dashboard yang sudah pernah dibuat sebelumnya.
Untuk melakukan import dashboard, kamu dapat mengikuti step-step berikut:
- Masuk ke Dashboard → Create → Import
- Kamu punya 3 pilihan sumber:
- Grafana.com Dashboard ID. Masukkan ID dashboard dari https://grafana.com/grafana/dashboards. Misalnya: 1860 untuk dashboard Node Exporter lengkap.
- Upload File JSON. Jika kamu memiliki file “.json” dashboard, klik “Upload JSON” dan pilih file yang ingin di-import.
- Paste JSON. Tempelkan langsung isi JSON dari clipboard ke dalam kolom teks.

- Setelah memilih sumber konfigurasi yang akan digunakan meng-import dashboard, kemudian pilih “Load”.
- Kemudian pilih data source, misalnya Prometheus yang akan digunakan dan sesuaikan nama untuk Dashboard ini.
- Kemudian klik “Import” untuk meng-import konfigurasi.

Kesimpulan
Dengan mengikuti tutorial ini, kamu telah berhasil membangun sistem monitoring server dan aplikasi menggunakan kombinasi tools modern yang terdiri dari Docker, Prometheus, Node Exporter, dan Grafana.
Melalui penggunaan Docker Compose, seluruh layanan dapat dijalankan secara terisolasi namun saling terhubung dalam satu konfigurasi terpusat, membuat proses setup menjadi lebih mudah, cepat, dan portabel.
Prometheus berperan sebagai alat pengumpul data (data collector) yang secara berkala men-scrape metrik dari berbagai sumber seperti Node Exporter, berdasarkan konfigurasi yang telah ditentukan di file “prometheus.yml”.
Node Exporter digunakan untuk mengumpulkan metrik dasar dari sistem, seperti penggunaan CPU, memori, disk, dan jaringan, yang sangat penting untuk mengetahui kondisi server secara real-time. Metrik-metrik seperti node_cpu_seconds_total dan node_memory_MemAvailable_bytes menjadi dasar untuk menganalisis performa dan kestabilan sistem.
Sementara itu, Grafana digunakan sebagai layer visualisasi yang menyajikan data dari Prometheus dalam bentuk dashboard interaktif dan informatif. Grafana memungkinkan pengguna memantau sistem dengan cara yang lebih mudah dipahami.
Dengan monitoring yang baik, kamu dapat menjaga kestabilan sistem sekaligus mempermudah proses troubleshooting ketika terjadi masalah.