L
Observability & Monitoring • Literally Web ID

Comprehensive Observability & Monitoring Setup with Prometheus and Grafana

⏱️ 15 menit baca • 📅 15 Oct 2026 • 👁️ 1 views
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)                  |
+-------------------------------------------------------------------------+
  1. 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.
  2. 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.
  3. PromQL Engine: Pengguna atau sistem alert mengevaluasi data menggunakan bahasa kueri khusus Prometheus (PromQL) untuk melakukan agregasi, filtering, dan perhitungan laju perubahan (rate).
  4. 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.
  5. 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 sudo atau root pada 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\
🏷️ Tags: #Nginx #High Concurrency #Performance #Sysadmin #Web Server