L
Observability & Monitoring • Literally Web ID

Observability Skala Penuh: Integrasi Prometheus, Grafana, dan OpenTelemetry

⏱️ 15 menit baca • 📅 14 Oct 2026 • 👁️ 2 views
Observability Skala Penuh: Integrasi Prometheus, Grafana, dan OpenTelemetry

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap arsitektur web modern yang mengandalkan mikroservis, sistem terdistribusi, dan infrastruktur cloud-native, kompleksitas operasional telah meningkat secara eksponensial. Sebuah permintaan HTTP sederhana dari klien tidak lagi sekadar melewati Nginx langsung ke backend monolitis PHP atau Node.js; permintaan tersebut kini melintasi CDN Edge (Cloudflare), WAF, Load Balancer, API Gateway, berbagai macam layanan mikro (Go, Python, Java), antrean pesan (RabbitMQ/Redis), hingga akhirnya mengakses cluster database master-slave (MySQL/PostgreSQL) dan penyimpanan objek (S3/MinIO).

Ketika terjadi bottleneck performa atau degradasi latensi di produksi, mencari akar permasalahan (root cause) menggunakan metode tradisional seperti tail -f /var/log/nginx/error.log atau top sudah tidak lagi memadai. Sering kali, tim Site Reliability Engineering (SRE) dan Backend Engineer terjebak dalam reaktif troubleshooting, di mana mereka baru mengetahui adanya kegagalan sistem setelah pengguna akhir melaporkannya melalui ticket atau media sosial.

Analisis Akar Masalah Utama di Produksi

  1. Ketiadaan Visibilitas End-to-End: Tanpa distributed tracing, mustahil melacak jejak satu request ID yang melewati 10 layanan mikro berbeda, sehingga sulit menentukan layanan mana yang menyebabkan lonjakan latensi (latency spikes).
  2. Metrik yang Terfragmentasi: Penggunaan alat monitoring yang terisolasi (misalnya mengandalkan metrik CPU server tanpa melihat beban connection pool database atau latensi kueri Redis) mengakibatkan keputusan tuning yang salah sasaran.
  3. Alert Fatigue: Konfigurasi alerting yang buruk—terlalu sensitif atau tidak kontekstual—membuat tim SRE mengabaikan peringatan penting, yang berujung pada outage besar.

Sebelum vs. Sesudah Penerapan Observability Skala Penuh

  • Sebelum Observability Terintegrasi: Debugging memakan waktu berjam-jam, melibatkan tebak-tebakan antar tim (blame game antara tim frontend, backend, dan infrastructure), ketiadaan data historis yang akurat, serta MTTR (Mean Time to Resolution) yang sangat tinggi.
  • Sesudah Penerapan OpenTelemetry, Prometheus, dan Grafana: Sistem secara otomatis mengumpulkan metrik, log, dan trace dalam satu platform terpadu. Bottleneck dapat dideteksi secara proaktif melalui alerting cerdas di Prometheus Alertmanager, divisualisasikan secara real-time di Grafana, dan di-drill-down hingga ke tingkat fungsi baris kode individu menggunakan OpenTelemetry.

2. Konsep Inti & Deep Dive Arsitektur

Observability modern berpilar pada tiga pilar utama (The Three Pillars of Observability): Metrics, Logs, dan Traces. Arsitektur yang kita bahas mengintegrasikan ketiga pilar ini menggunakan standar industri terbuka.

Alur Data dan Eksekusi (Under the Hood)

  1. Aplikasi (Backend Go/Node.js/PHP) diinstrumentasi menggunakan SDK OpenTelemetry. Setiap masuknya request HTTP menghasilkan sebuah Trace yang dibagi menjadi beberapa Spans. Setiap Span merekam durasi, status HTTP, metadata, dan atribut kustom.
  2. OpenTelemetry Collector (OTel Collector) bertindak sebagai agen perantara (collector/gateway). Ia menerima telemetry data (baik dalam format OTLP gRPC maupun HTTP) dari aplikasi, melakukan batching, filtering, atau transformasi data, lalu mengekspor metrik ke Prometheus (atau langsung diekspos via endpoint /metrics untuk di-scrape oleh Prometheus) dan traces ke backend penyimpan trace (seperti Tempo atau Jaeger).
  3. Prometheus secara berkala melakukan scraping terhadap target metrik, menyimpannya dalam time-series database berbasis memori/disk yang sangat efisien.
  4. Alertmanager memproses aturan pemberitahuan (alerting rules) dari Prometheus, melakukan deduplication, grouping, dan merutekan notifikasi ke kanal eksternal seperti Slack, PagerDuty, atau Webhook.
  5. Grafana bertindak sebagai lapisan visualisasi terpadu, menarik data secara real-time dari Prometheus (metrik) dan sistem penyimpanan trace untuk disajikan dalam bentuk dashboard interaktif.
+---------------------------------------------------------------------------------+
|                              Aplikasi Mikroservis                               |
|                  (Instrumentasi SDK OpenTelemetry / OTLP Exporter)              |
+---------------------------------------------------------------------------------+
                                         |
                                         | OTLP (gRPC / HTTP)
                                         v
+---------------------------------------------------------------------------------+
|                             OpenTelemetry Collector                             |-----> [Tracing Backend (Tempo/Jaeger)]
|                        (Receivers, Processors, Exporters)                       |
+---------------------------------------------------------------------------------+
                                         |
                                         | Prometheus Exporter / Scrape Endpoint
                                         v
+---------------------------------------------------------------------------------+
|                           Prometheus Time-Series DB                             |
+---------------------------------------------------------------------------------+
                                         |
                                         v
+---------------------------------------------------------------------------------+
|                             Prometheus Alertmanager                             |-----> [Slack / PagerDuty / Email]
+---------------------------------------------------------------------------------+
                                         |
                                         v
+---------------------------------------------------------------------------------+
|                                 Grafana UI                                      |
|                 (Dashboard Metrik Latency, CPU, & Deep Trace Drilldown)         |
+---------------------------------------------------------------------------------+

3. Perbandingan Komparatif / Analisis Pendekatan

Untuk memahami mengapa kombinasi OpenTelemetry + Prometheus + Grafana menjadi standar emas industri saat ini, mari kita bandingkan dengan pendekatan tradisional atau alternatif lain dalam tabel komparatif berikut:

Parameter Komparasi Pendekatan Tradisional (StatsD + Graphite / Nagios) APM Komersial Tertutup (Datadog / New Relic) Stack OpenTelemetry + Prometheus + Grafana
Vendor Lock-in Rendah Sangat Tinggi Nol (Open Standards)
Biaya Operasional Rendah (Infrastruktur lokal) Sangat Tinggi (Skala berbasis volume data) Menengah (Biaya server/cloud untuk penyimpanan)
Fleksibilitas Data Rendah (Metrik sederhana saja) Tinggi Sangat Tinggi (Kustomisasi penuh metrik, log, trace)
Penggunaan Sumber Daya (CPU/RAM) Efisien namun minim fitur Agen sering kali berat di memori aplikasi Sangat optimal dengan OTel Collector terpusat
Kurva Pembelajaran Rendah Sangat Mudah Menengah-Tinggi (Membutuhkan pemahaman arsitektur)

[!WARNING] Pemilihan agen APM komersial sering kali terlihat menarik di awal karena kemudahan instalasi. Namun, ketika trafik sistem mencapai jutaan request per second (RPS), biaya lisensi bulanan dapat membengkak secara drastis, membuat arsitektur berbasis Open Source Stack jauh lebih menguntungkan dalam jangka panjang.


4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum memulai implementasi, pastikan infrastruktur dan lingkungan produksi Anda memenuhi spesifikasi minimum berikut:

Spesifikasi Lingkungan

  • OS: Ubuntu Server 22.04 LTS / Debian 12 (Minimum 2 vCPU, RAM 4GB untuk node monitoring).
  • Docker & Docker Compose: Versi terbaru (Docker Engine 24.x+, Compose v2.x+).
  • Jaringan: Port berikut harus terbuka dan dapat diakses antar node:
    • 9090: Prometheus Web UI & API
    • 9093: Prometheus Alertmanager
    • 3000: Grafana Dashboard
    • 4317: OpenTelemetry Collector gRPC Receiver
    • 4318: OpenTelemetry Collector HTTP Receiver

Verifikasi Awal Sistem

Jalankan perintah berikut di terminal untuk memastikan lingkungan siap:

docker --version
docker compose version
sysctl vm.max_map_count

Jika menggunakan sistem produksi berskala besar, pastikan parameter kernel vm.max_map_count ditingkatkan untuk mendukung penyimpanan database timeseries:

sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

5. Panduan Implementasi Langkah demi Langkah

Kita akan membangun seluruh ekosistem Observability menggunakan docker-compose.yml terpusat yang mencakup Prometheus, Alertmanager, OpenTelemetry Collector, dan Grafana.

Langkah 1: Struktur Direktori Proyek

Buat struktur direktori berikut di server monitoring Anda:

mkdir -p /opt/observability/{prometheus,alertmanager,otelcol,grafana/provisioning/datasources,grafana/provisioning/dashboards}
cd /opt/observability

Langkah 2: Konfigurasi OpenTelemetry Collector (otelcol/otel-collector-config.yaml)

Buat file konfigurasi OTel Collector untuk menerima data dari aplikasi mikroservis:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:
    timeout: 1s
    send_batch_size: 1024
  memory_limiter:
    check_interval: 1s
    limit_percentage: 80
    spike_limit_percentage: 20

exporters:
  prometheus:
    endpoint: 0.0.0.0:8889
    namespace: "otel"

service:
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [prometheus]
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: []

Langkah 3: Konfigurasi Prometheus (prometheus/prometheus.yml)

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']

rule_files:
  - "/etc/prometheus/alert.rules.yml"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'otel-collector'
    static_configs:
      - targets: ['otel-collector:8889']

  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']

Langkah 4: Konfigurasi Alertmanager (alertmanager/alertmanager.yml)

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname', 'job']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
  receiver: 'slack-notifications'

receivers:
  - name: 'slack-notifications'
    slack_configs:
      - api_url: 'https://hooks.slack.com/services/T00/B00/XXXXXX'
        channel: '#alerts-production'
        send_resolved: true
        title: '[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}'
        text: "{{ range .Alerts }}{{ .Annotations.description }}
*Instance:* {{ .Labels.instance }}
{{ end }}"

Langkah 5: Aturan Alerting Prometheus (prometheus/alert.rules.yml)

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