L
Observability & Monitoring • Literally Web ID

Membangun Sistem Observability Komprehensif dengan Prometheus dan Grafana

⏱️ 15 menit baca • 📅 19 Oct 2026 • 👁️ 4 views
Membangun Sistem Observability Komprehensif dengan Prometheus dan Grafana

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap infrastruktur web modern yang mendayagunakan arsitektur terdistribusi—mulai dari reverse proxy Nginx, layanan backend berbasis Go, PHP-FPM, Node.js, penyimpanan objek MinIO, hingga manajemen antrean Redis dan database MySQL/MariaDB—kegagalan sistem bukanlah sebuah kemungkinan (if), melainkan sebuah kepastian waktu (when). Kegagalan tanpa sistem observabilitas yang mendarah daging akan berujung pada Mean Time to Detection (MTTD) dan Mean Time to Resolution (MTTR) yang sangat tinggi. Di era di mana milidetik berarti konversi bisnis, ketidaktahuan terhadap lonjakan latensi latensi 502 Bad Gateway atau saturasi memori Redis dapat mengakibatkan kerugian finansial yang masif.

Secara historis, administrator sistem mengandalkan log parsing manual atau skrip pemantauan ping sederhana berbasis bash untuk memantau server. Pendekatan ini memiliki cacat fatal: reaktif, lambat, tidak memiliki kemampuan agregasi deret waktu (time-series), dan buta terhadap kesehatan internal aplikasi. Ketika terjadi lonjakan traffic mendadak akibat bot, serangan DDoS, atau kampanye pemasaran, server web Nginx akan kehabisan worker connection, database MySQL mengalami thread exhaustion, dan antrean Supervisor meluber tanpa ada satupun sinyal peringatan dini hingga layanan benar-benar tumbang total.

Perbandingan kondisi Sebelum dan Sesudah penerapan sistem observabilitas komprehensif berbasis Prometheus dan Grafana:

  • Sebelum Penerapan:
    • Mengetahui server down dari keluhan pengguna di media sosial atau tiket dukungan pelanggan.
    • Debugging reaktif dengan membuka file log berukuran gigabyte menggunakan perintah grep atau tail -f di terminal secara manual.
    • Tidak ada metrik historis untuk analisis kapasitas jangka panjang; penambahan sumber daya dilakukan secara tebak-tebakan (guesswork).
    • Sistem keamanan seperti kegagalan otentikasi SSH atau serangan brute force pada WordPress/Postfix baru diketahui setelah sistem dijebol.
  • Sesudah Penerapan:
    • Deteksi dini anomali latensi dan lonjakan error HTTP 5xx dalam hitungan detik melalui sistem alerting otomatis ke PagerDuty atau Telegram.
    • Dashboard visual real-time terpusat yang menampilkan performa seluruh stack teknologi: penggunaan CPU/RAM host, throughput Nginx, status koneksi PHP-FPM, hit ratio cache Redis, hingga status replikasi MySQL.
    • Perencanaan kapasitas berbasis data historis deret waktu (time-series forecasting) yang akurat.
    • Visibilitas penuh terhadap performa DNS, validitas sertifikat SSL Let's Encrypt, antrean email Postfix, dan performa CDN Cloudflare.

[!IMPORTANT] Observabilitas bukan sekadar monitoring. Monitoring memberi tahu Anda jika sistem rusak; observabilitas membantu Anda memahami mengapa sistem tersebut rusak dengan menganalisis dari luar ke dalam (white-box metrics).

2. Konsep Inti & Deep Dive Arsitektur

Arsitektur Prometheus dirancang dengan pendekatan pull-based model (pengambilan data secara berkala). Prometheus server secara aktif melakukan scraping (mengambil) metrik HTTP dari berbagai exporter atau aplikasi target yang mengekspos endpoint /metrics. Pendekatan ini berbeda dengan sistem push (seperti StatsD atau InfluxDB lama), di mana target harus mengirim data secara mandiri ke server pusat.

Berikut adalah representasi visual dari alur data dalam ekosistem Prometheus dan Grafana:

+-------------------------------------------------------------------------+
|                       INFRASTRUKTUR WEB TARGET                          |
|                                                                         |
|  +-------------------+  +-------------------+  +---------------------+  |
|  |    Nginx Web      |  |     Node.js /     |  |    MySQL / Redis    |  |
|  |  (Nginx Exporter) |  |   Go Application  |  |  (Database Exporter)|  |
|  |   Port: 9113      |  |    Port: 8080     |  |     Port: 9104      |  |
|  +---------+---------+  +---------+---------+  +----------+----------+  |
+------------|----------------------|-----------------------|-------------+
             | (HTTP GET /metrics)  |                       |             
             +----------------------+-----------------------+             
                                    |                                     
                                    v                                     
+-------------------------------------------------------------------------+
|                           PROMETHEUS SERVER                             |----+
|  +-------------------------------------------------------------------+  |    |
|  |                 Scraping Engine & TSDB Storage                    |  |    |
|  +---------------------------------+---------------------------------+  |    |
+------------------------------------|------------------------------------+    |
                                     | (Alert Evaluation)                      v
                                     v                         +---------------+---+
+------------------------------------------------------------+ |    ALERTMANAGER   |
|                        GRAFANA                             | |                   |
|  +------------------------------------------------------+  | |  - Deduplication  |
|  |               Visualisasi Dashboard                  |  | |  - Grouping       |
|  +------------------------------------------------------+  | |  - Routing        |
+------------------------------------------------------------+ +-------+-----------+
                                                                       |
                                                                       v
                                                              +--------+----------+
                                                              | PagerDuty / Email |
                                                              +-------------------+

Alur Kerja di Balik Layar:

  1. Prometheus Scraper: Berjalan sesuai interval waktu yang dikonfigurasi (scrape_interval, misalnya setiap 15 detik), melakukan permintaan HTTP GET ke target metrics endpoints.
  2. Time Series Database (TSDB): Prometheus menyimpan semua data metrik yang dikumpulkan ke dalam penyimpanan lokal berbasis deret waktu yang sangat terkompresi dan dioptimalkan untuk penulisan cepat.
  3. PromQL (Prometheus Query Language): Bahasa kueri fungsional yang memungkinkan SRE mengambil, menggabungkan, dan memanipulasi data deret waktu secara real-time.
  4. Grafana Integration: Grafana bertindak sebagai lapisan visualisasi, terhubung ke Prometheus sebagai datasource, mengeksekusi kueri PromQL, dan merendernya ke dalam bentuk grafik time-series, gauge, stat, atau peta panas (heatmap).
  5. Alertmanager: Menerima alerts dari Prometheus ketika aturan ambang batas (alerting rules) terlampaui. Alertmanager melakukan deduplication, grouping, dan routing notifikasi ke kanal eksternal seperti PagerDuty, Slack, atau Webhook.

3. Perbandingan Komparatif / Analisis Pendekatan

Dalam membangun sistem observabilitas untuk infrastruktur web, terdapat beberapa pendekatan arsitektural yang umum dipertimbangkan. Tabel berikut membandingkan Prometheus + Grafana dengan alternatif populer lainnya.

Parameter Komparasi Prometheus + Grafana ELK Stack (Elasticsearch, Logstash, Kibana) Datadog / New Relic (SaaS) Zabbix / Nagios Tradisional
Fokus Utama Metrik & Timeseries Log & Teks Analitik All-in-one (Metrics, Logs, APM, Traces) Infrastruktur & Jaringan
Model Pengumpulan Pull-based Push-based (Logstash/Filebeat) Push-based (Agent) Push/Pull campuran
Konsumsi Sumber Daya Efisien (RAM/CPU moderat) Sangat Tinggi (Terutama RAM Elasticsearch) Rendah di Server (Agent ringan) Moderat hingga Tinggi
Biaya Open Source (Self-hosted) Open Source / Berbayar (Enterprise) Model Langganan Bulanan (Sangat Mahal di Skala Besar) Open Source (Self-hosted)
Kurva Belajar Sedang (PromQL) Tinggi (Query Syntax Kompleks) Rendah (UI Sangat Intuitif) Tinggi (Konfigurasi XML/UI Lama)
Skalabilitas Menengah-Tinggi (Thanos/Cortex untuk Enterprise) Sangat Tinggi (Cluster Distributed) Sangat Tinggi (Dikelola Penuh Cloud) Menengah

[!TIP] Kombinasi Prometheus dan Grafana adalah standar emas industri untuk efisiensi biaya dan performa pada infrastruktur self-hosted, sementara solusi SaaS seperti Datadog dipilih jika perusahaan memiliki anggaran besar dan tidak ingin mengelola infrastruktur monitoring itu sendiri.

4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum melakukan instalasi stack observabilitas, pastikan Anda menyiapkan server terdedikasi atau VPS dengan spesifikasi minimum untuk produksi:

  • OS: Ubuntu 22.04 LTS / Debian 12 / RHEL 9
  • CPU: Minimal 2 vCPU
  • RAM: Minimal 4 GB (TSDB membutuhkan alokasi RAM yang cukup untuk memory mapping)
  • Storage: 50 GB SSD NVMe (tergantung retensi data metrik)
  • Network: Port terbuka untuk akses (Prometheus: 9090, Grafana: 3000, Alertmanager: 9093, Node Exporter: 9100, Nginx Exporter: 9113)

Verifikasi Awal & Manajemen Pengguna Sistem

Jalankan perintah berikut pada server target untuk membuat pengguna khusus sistem (system users) demi alasan keamanan:

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

sudo groupadd --system grafana
sudo useradd -s /sbin/nologin --system -g grafana grafana

sudo groupadd --system alertmanager
sudo useradd -s /sbin/nologin --system -g alertmanager alertmanager

sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo mkdir -p /etc/alertmanager /var/lib/alertmanager

5. Panduan Implementasi Langkah demi Langkah

Langkah 1: Instalasi Node Exporter (Di Server Aplikasi Web)

Node Exporter mengumpulkan metrik tingkat OS (CPU, memori, disk I/O, jaringan).

VERSION="1.8.2"
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${VERSION}/node_exporter-${VERSION}.linux-amd64.tar.gz
tar xvf node_exporter-${VERSION}.linux-amd64.tar.gz
sudo cp node_exporter-${VERSION}.linux-amd64/node_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/node_exporter

Buat file systemd service untuk Node Exporter di /etc/systemd/system/node_exporter.service:

[Unit]
Description=Prometheus 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

[Install]
WantedBy=multi-user.target

Aktifkan 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 dan pasang biner Prometheus:

PROMETHEUS_VERSION="2.53.1"
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
tar xvf prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
sudo cp prometheus-${PROMETHEUS_VERSION}.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-${PROMETHEUS_VERSION}.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

sudo cp -r prometheus-${PROMETHEUS_VERSION}.linux-amd64/consoles /etc/prometheus/
sudo cp -r prometheus-${PROMETHEUS_VERSION}.linux-amd64/console_libraries /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus/consoles /etc/prometheus/console_libraries
sudo chown -R prometheus:prometheus /var/lib/prometheus

Buat konfigurasi lengkap Prometheus di /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: 'web_infrastructure'
    static_configs:
      - targets: 
        - '192.168.1.10:9100'  # Node Exporter pada App Server 1
        - '192.168.1.11:9100'  # Node Exporter pada Database Server

  - job_name: 'nginx_proxy'
    static_configs:
      - targets: ['192.168.1.10:9113'] # Nginx Prometheus Exporter

  - job_name: 'mysql_database'
    static_configs:
      - targets: ['192.168.1.11:9104'] # MySQL Exporter

Buat aturan alerting di /etc/prometheus/alert_rules.yml:

groups:
  - name: WebInfrastructureAlerts
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Instance {{ $labels.instance }} down"
          description: "{{ $labels.instance } জাতীয় of job {{ $labels.job }} has been down for more than 1 minute."

      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle\
🏷️ Tags: #Nginx #High Concurrency #Performance #Sysadmin #Web Server