Comprehensive Observability & Monitoring Setup with Prometheus and Grafana
1. Konteks Industri & Analisis Akar Masalah
Dalam lanskap arsitektur web modern yang menuntut ketersediaan 99.99%, pengelolaan infrastruktur tanpa sistem observability yang komprehensif adalah tindakan spekulatif. Arsitektur web kontemporer tidak lagi berdiri sendiri; ia merupakan rantai kompleks yang melibatkan edge caching (Cloudflare), reverse proxy (Nginx/Caddy), aplikasi backend (Go/Node.js/PHP-FPM), database transaksional (MySQL/MariaDB), caching layer (Redis), hingga sistem antrean asynchronous (Supervisor, Cron). Ketika terjadi lonjakan traffic, degradasi performa pada salah satu titik rantai ini dapat memicu efek domino yang melumpuhkan seluruh layanan.
Secara historis, administrator sistem mengandalkan pemantauan reaktif berbasis log statis atau metrik sistem dasar seperti top dan htmp. Pendekatan ini memiliki cacat fatal: metrik tidak terstruktur, sulit dianalisis secara historis, dan hampir mustahil digunakan untuk memicu automated alerting secara real-time sebelum pengguna akhir merasakan dampaknya. Bottleneck umum di dunia nyata sering kali tersembunyi pada:
- Koneksi pool database yang habis akibat kueri SQL yang tidak terindeks.
- Lonjakan latensi I/O disk pada penyimpanan S3/MinIO atau persistent volume.
- Kebocoran memori (memory leak) pada proses Node.js atau worker PHP-FPM yang menyebabkan OOM (Out of Memory) Killer menghentikan proses secara paksa.
- Kegagalan resolusi DNS atau sertifikat SSL yang memutus jalur komunikasi API.
Perbandingan Kondisi: Sebelum vs Sesudah Penerapan Observability
| Aspek | Sebelum Observability Terintegrasi | Sesudah Setup Prometheus & Grafana |
|---|---|---|
| Deteksi Insiden | Berdasarkan laporan pengguna (reactive) | Berdasarkan threshold alert otomatis < 30 detik (proactive) |
| Root Cause Analysis | Membutuhkan waktu berjam-jam membaca log mentah | Visualisasi korelasi metrik secara real-time pada satu dashboard terpadu |
| Kapasitas Perencanaan | Tebak-tebakan berdasarkan insting | Berbasis tren historis penggunaan CPU, Memory, dan IOPS |
| Downtime Tahunan | Tinggi (berjam-jam per insiden) | Minimal (RTO dan RMT terpangkas signifikan) |
[!IMPORTANT] Observability bukan sekadar mengumpulkan log atau metrik; ini adalah kemampuan untuk memahami state internal sistem Anda hanya dengan mengamati output eksternal berupa metrik timeseries, trace, dan log.
2. Konsep Inti & Deep Dive Arsitektur
Stack pemantauan modern yang paling tangguh saat ini mengombinasikan Prometheus sebagai mesin pengumpul metrik (metrics scraper) dan Grafana sebagai lapisan visualisasi. Prometheus bekerja menggunakan model pull-based, di mana ia secara berkala melakukan scraping terhadap endpoint HTTP (biasanya /metrics) yang diekspos oleh target.
Alur Data & Eksekusi Arsitektur
+-------------------------------------------------------------------------+
| INFRASTRUKTUR PRODUKSI |
| |
| +------------------+ +------------------+ +-------------------+ |
| | Node Exporter | | Nginx Exporter | | Custom Go/PHP | |
| | (Port 9100) | | (Port 9113) | | (Port 8080) | |
| +--------+---------+ +--------+---------+ +---------+---------+ |
| | | | |
| +-----------------------+------------------------+ |
| | |
+-----------------------------------|-------------------------------------+
| HTTP Pull (Scrape Interval: 15s)
v
+-------------------------------------------------------------------------+
| PROMETHEUS SERVER |
| +-------------------------------------------------------------------+ |
| | Time-Series Database | |
| +-------------------------------------------------------------------+ |
| +-------------------------------------------------------------------+ |
| | Alertmanager Engine | |
| +-------------------------------------------------------------------+ |
+-----------------------------------|-------------------------------------+
| PromQL Queries
v
+-------------------------------------------------------------------------+
| GRAFANA DASHBOARD |
| (Visualisasi & Alert Notification) |
+-------------------------------------------------------------------------+
- Target Exporters: Setiap komponen infrastruktur (OS, Nginx, Database, Redis, Aplikasi) menjalankan exporter masing-masing yang mengubah metrik internal mereka menjadi format teks plain yang dapat dibaca Prometheus.
- Prometheus Scraper: Berdasarkan konfigurasi interval (misal setiap 15 detik), Prometheus melakukan permintaan HTTP GET ke setiap target, mengambil snapshot metrik, dan menyimpannya ke dalam Time-Series Database (TSDB) lokal yang sangat dioptimalkan.
- PromQL Engine: Pengguna atau sistem alert mengevaluasi data menggunakan bahasa kueri khusus Prometheus (PromQL) untuk melakukan agregasi, filtering, dan perhitungan laju perubahan (rate).
- Alertmanager: Jika aturan evaluasi (alert rules) terpenuhi, Prometheus mengirimkan sinyal ke Alertmanager yang bertugas melakukan deduplication, grouping, dan routing notifikasi ke Slack, PagerDuty, atau Email.
- Grafana: Mengambil data dari Prometheus menggunakan PromQL untuk dirender menjadi grafik interaktif, heatmaps, dan panel status.
3. Perbandingan Komparatif / Analisis Pendekatan
Dalam membangun sistem pemantauan, arsitek sering dihadapkan pada pilihan antara model Pull-based (Prometheus) vs Push-based (Datadog, Telegraf/InfluxDB).
| Parameter Perbandingan | Prometheus (Pull-Based) | InfluxDB + Telegraf (Push-Based) | Datadog / SaaS (Agent-Based Push) |
|---|---|---|---|
| Arsitektur Pengumpulan | Server menarik data dari target | Target mengirim data ke server | Agent mengirim data ke cloud SaaS |
| Konsumsi Sumber Daya | Sangat efisien di server pusat | Sedang, beban di ingestion server | Ringan di server, berat di biaya |
| Keamanan Jaringan | Target harus membuka port scrape | Server harus membuka port ingestion | Agent keluar via HTTPS outbound |
| Skalabilitas | Membutuhkan federasi atau Thanos | Membutuhkan clustering InfluxDB | Skalabilitas tak terbatas (Cloud) |
| Biaya Operasional | Gratis (Open Source), self-hosted | Gratis (OSS) atau berbayar Enterprise | Sangat mahal, berbasis per host |
| Kontrol Data (Privacy) | 100% di server lokal Anda | 100% di server lokal Anda | Data dikirim ke pihak ketiga |
Analisis Trade-off Sumber Daya:
- CPU & RAM: Prometheus menyimpan data di RAM dan disk secara sangat padat. Untuk 1 juta active time-series, dibutuhkan sekitar 2GB - 4GB RAM.
- Network: Model pull mengurangi overhead koneksi karena Prometheus mempertahankan connection pooling, namun memerlukan topologi jaringan yang mengizinkan server Prometheus mengakses semua node target (dapat diatasi dengan Prometheus Agent mode atau Grafana Agent).
4. Prasyarat Sistem & Persiapan Lingkungan
Sebelum melakukan instalasi, pastikan environment Anda memenuhi spesifikasi minimum berikut:
- OS: Ubuntu 22.04 LTS / Debian 12 / RHEL 9
- Hardware: Minimal 2 vCPU, 4 GB RAM, 50 GB SSD (untuk retensi metrik 15 hari).
- Network: Port TCP terbuka:
9090(Prometheus),3000(Grafana),9100(Node Exporter). - Privileges: Akses
sudoataurootpada seluruh node infrastruktur.
Pembuatan System User
Untuk keamanan, jalankan layanan Prometheus dan Exporters menggunakan system user khusus tanpa hak akses login shell:
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
5. Panduan Implementasi Langkah demi Langkah
Langkah 1: Instalasi dan Konfigurasi Node Exporter
Node Exporter mengumpulkan metrik tingkat OS (CPU, memory, disk, network).
# Unduh binary Node Exporter
VERSION="1.8.2"
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-amd64.tar.gz
# Ekstrak dan pindahkan ke /usr/local/bin
tar xvf node_exporter-${VERSION}.linux-amd64.tar.gz
sudo mv node_exporter-${VERSION}.linux-amd64/node_exporter /usr/local/bin/
# Buat systemd service untuk Node Exporter
sudo tee /etc/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--web.listen-address=0.0.0.0:9100 \
--collector.filesystem.mount-points-exclude='^/(sys|proc|dev|host|etc)($$|/)'
[Install]
WantedBy=multi-user.target
EOF
# Reload systemd dan jalankan layanan
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter
Langkah 2: Instalasi dan Konfigurasi Prometheus Server
# Unduh Prometheus Server
PROM_VERSION="2.53.0"
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v${PROM_VERSION}/prometheus-${PROM_VERSION}.linux-amd64.tar.gz
tar xvf prometheus-${PROM_VERSION}.linux-amd64.tar.gz
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo mv prometheus-${PROM_VERSION}.linux-amd64/prometheus /usr/local/bin/
sudo mv prometheus-${PROM_VERSION}.linux-amd64/promtool /usr/local/bin/
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
Buat file konfigurasi utama /etc/prometheus/prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
rule_files:
- "/etc/prometheus/alert_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'production-web-nodes'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']
labels:
environment: 'production'
tier: 'frontend'
- job_name: 'nginx-proxy'
static_configs:
- targets: ['192.168.1.10:9113']
labels:
environment: 'production'
tier: 'edge'
Buat file aturan alert /etc/prometheus/alert_rules.yml:
groups:
- name: infrastructure_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle\