L
Observability & Monitoring • Literally Web ID

Observabilitas Skala Enterprise: OpenTelemetry, Prometheus, dan Grafana

⏱️ 15 menit baca • 📅 14 Oct 2026 • 👁️ 1 views
Observabilitas Skala Enterprise: OpenTelemetry, Prometheus, dan Grafana

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap arsitektur web modern yang mengandalkan pendekatan micro-frontend, microservices, dan edge computing melalui Cloudflare, kompleksitas operasional meningkat secara eksponensial. Ketika sebuah aplikasi web monolitik dipecah menjadi puluhan layanan independen yang ditulis dalam bahasa berbeda—seperti Go untuk backend berkinerja tinggi, Node.js untuk BFF (Backend for Frontend), PHP-FPM untuk sistem legasi, serta Nginx dan Caddy sebagai reverse proxy—menemukan sumber masalah latensi atau kegagalan transaksi menjadi bagaikan mencari jarum di dalam tumpukan jerami.

Bottleneck Performa & Keamanan Tradisional

  1. Blind Spot Antar Layanan: Pemantauan berbasis server tunggal (seperti top, htop, atau metrik CPU/RAM dasar) gagal memberikan visibilitas terhadap context propagation lintas jaringan. Ketika klien mengirimkan request HTTP melalui CDN ke Nginx, diteruskan ke Node.js, melakukan query ke Redis, lalu memicu event queue via RabbitMQ/Supervisor, kegagalan di tengah rantai tersebut sering kali hanya tercatat sebagai 502 Bad Gateway atau 504 Gateway Time-out tanpa jejak siapa penyebab utamanya.
  2. Keterbatasan Log File Terisolasi: Mengandalkan log file mentah pada direktori /var/log/nginx/ atau /var/log/php-fpm/ di setiap instans server menciptakan isolasi data. Saat terjadi traffic spike atau serangan DDoS yang diredam oleh Fail2ban, korelasi antara log akses web, log error PHP, dan status query database MySQL terputus.
  3. Reaksi Reaktif vs Proaktif: Tim SRE (Site Reliability Engineering) sering kali mengetahui adanya degradasi performa setelah pengguna akhir mengeluh melalui media sosial atau tiket dukungan (support ticket), bukan dari sistem alerting otomatis.

Kondisi Sebelum vs Sesudah Penerapan

  • Sebelum (Arsitektur Silo): Debugging memakan waktu berjam-jam (Mean Time to Resolution / MTTR tinggi). Engineer harus membuka SSH ke 5 server berbeda, melakukan grep manual pada ribuan baris file log menggunakan ekspresi reguler yang rumit, dan menebak-nebak letak kemacetan (bottleneck) tanpa data kuantitatif yang valid.
  • Sesudah (Observabilitas Terpadu): Mengimplementasikan OpenTelemetry untuk distributed tracing, Prometheus untuk pengumpulan metrik time-series, dan Grafana untuk visualisasi terpusat. MTTR turun drastis karena setiap request memiliki Trace ID unik yang melacak perjalanan lintas server dari browser pengguna hingga ke penyimpanan S3/MinIO dan basis data Redis/MySQL secara real-time.

2. Konteks Inti & Deep Dive Arsitektur

Sistem observabilitas enterprise dibangun di atas tiga pilar utama: Metrics (Metrik numerik agregat), Logs (Catatan kejadian diskrit), dan Traces (Jejak alur eksekusi terdistribusi). OpenTelemetry (OTel) bertindak sebagai standar tunggal untuk instrumentasi, mengumpulkan data dan mengirimkannya ke kolektor terpusat.

Alur Data & Eksekusi Under the Hood

[ Client Browser ] ---> (HTTPS / Cloudflare WAF & Edge Caching)
                           |
                           v
                   [ Nginx Reverse Proxy ] (SSL Termination & Rate Limiting)
                           |
          +----------------+----------------+
          | (OTel HTTP Propagation)          |
          v                                  v
    [ Node.js BFF ]                   [ Go Microservice ]
          |                                  |
          +---------> (Redis Cache) <--------+
          |                                  |
          v                                  v
  [ MySQL / MariaDB ]                 [ MinIO / S3 Storage ]
          
          *** SEMUA KOMPONEN MENGIRIMKAN TELEMETRI KE ***
                           |
                           v
             [ OpenTelemetry Collector ]
             /                         \
            v                           v
  [ Prometheus (Metrics) ]    [ Grafana Mimir/Loki (Traces/Logs) ]
                            |
                            v
                     [ Grafana Dashboard ]
  1. Inisiasi Request: Klien mengirimkan request HTTP. Cloudflare menambahkan header CF-Ray dan WAF memvalidasi keamanan.
  2. Propagasi Konteks: Nginx menerima request dan meneruskan header W3C Trace Context (traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01) ke backend Go/Node.js.
  3. Instrumentasi Otomatis & Manual: Kode aplikasi mencatat span (rentang waktu eksekusi fungsi/query) dan mengirimkannya secara asinkron menggunakan protokol OTLP (OpenTelemetry Protocol) ke OTel Collector.
  4. Scraping & Storage: Prometheus melakukan scraping metrik dari ekspositor aplikasi, sementara OTel Collector memproses dan meneruskan traces ke backend penyimpanan yang kompatibel.

3. Perbandingan Komparatif / Analisis Pendekatan

Berikut adalah analisis komparatif antara berbagai metode pengumpulan dan penyimpanan data observabilitas di lingkungan enterprise:

Parameter / Komponen OpenTelemetry (OTel) + Prometheus + Grafana ELK Stack Tradisional (Elasticsearch, Logstash, Kibana) APM Komersial (Datadog / New Relic)
Arsitektur & Standar Standar Terbuka (CNCF), Vendor-agnostic Berbasis Apache Lucene, Fokus pada Log Proprietary Agent, Vendor-lockin tinggi
Konsumsi Sumber Daya (CPU/RAM) Sangat efisien (Go/Rust based components) Tinggi (JVM memory footprint besar pada Elasticsearch) Ringan di agent, namun biaya lisensi sangat mahal
Latensi Pengolahan Data Real-time (< 1 detik dengan OTel Collector) Menengah (tergantung antrean Logstash) Real-time
Biaya Infrastruktur Biaya infrastruktur sendiri (Self-hosted) Biaya tinggi untuk klaster Elasticsearch Biaya langganan per host / gigabyte ingested
Fleksibilitas Kustomisasi Tak terbatas (Dapat diubah sesuai kebutuhan kode) Tinggi untuk teks/log, kurang optimal untuk metrik Terbatas pada fitur bawaan vendor

[!IMPORTANT] Pemilihan arsitektur self-hosted menggunakan OTel, Prometheus, dan Grafana memberikan kontrol penuh atas kepatuhan data (data compliance / GDPR) dan efisiensi biaya operasional jangka panjang pada skala ribuan request per second (RPS).


4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum melakukan deployment, pastikan infrastruktur memenuhi spesifikasi minimal berikut:

  • Sistem Operasi: Ubuntu 22.04 LTS / Debian 12 (Kernel Linux >= 5.15 untuk performa eBPF)
  • Spesifikasi Hardware (Dedicated Monitoring Node): 4 vCPU, 8 GB RAM, 100 GB SSD NVMe
  • Port Jaringan yang Harus Dibuka (Firewall/UFW):
    • 4317/TCP: OTLP gRPC receiver
    • 4318/TCP: OTLP HTTP receiver
    • 9090/TCP: Prometheus UI & API
    • 3000/TCP: Grafana Dashboard
  • Dependency Paket Sistem: curl, wget, git, jq, apt-transport-https

Verifikasi awal sistem dengan menjalankan perintah berikut di terminal:

sysctl vm.max_map_count
# Pastikan nilainya minimal 262144 untuk efisiensi memori sistem
sysctl -w vm.max_map_count=262144

5. Panduan Implementasi Langkah demi Langkah

Langkah 1: Konfigurasi OpenTelemetry Collector (otel-collector-config.yaml)

Buat file konfigurasi untuk OTel Collector yang bertindak sebagai pengumpul data terpusat:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  prometheus:
    config:
      scrape_configs:
        - job_name: 'otel-collector'
          scrape_interval: 10s
          static_configs:
            - targets: ['0.0.0.0:8888']

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

exporters:
  prometheus:
    endpoint: "0.0.0.0:8889"
    namespace: "enterprise"
  logging:
    verbosity: detailed

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [logging]
    metrics:
      receivers: [otlp, prometheus]
      processors: [memory_limiter, batch]
      exporters: [prometheus, logging]
  telemetry:
    logs:
      level: "info"

Langkah 2: Konfigurasi Prometheus (prometheus.yml)

Atur Prometheus untuk melakukan scraping metrik dari aplikasi backend dan OTel Collector:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: []

rule_files:
  - "alert_rules.yml"

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

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

  - job_name: 'node-backend-service'
    metrics_path: '/metrics'
    static_configs:
      - targets: ['app-backend.internal:3001']

Langkah 3: Aturan Peringatan Otomatis (alert_rules.yml)

groups:
  - name: EnterpriseWebAlerts
    rules:
      - alert: HighHttpErrorRate
        expr: sum(rate(http_requests_total{status=~"5.*\
🏷️ Tags: #Nginx #High Concurrency #Performance #Sysadmin #Web Server