Observability dengan Grafana, Prometheus, Loki: Panduan Lengkap | Ilmu Komputer

Observability dengan Grafana, Prometheus, Loki: Panduan Lengkap | Ilmu Komputer

Observability adalah kemampuan untuk memahami kondisi internal sistem berdasarkan output eksternalnya. Di era microservices dan distributed systems tahun 2026, observability bukan lagi opsional — ia adalah kebutuhan fundamental untuk menjaga keandalan aplikasi.

Tiga pilar observability: Metrics (angka performa), Logs (catatan kejadian), dan Traces (jejak request antar service). Stack open-source paling populer untuk ini adalah Grafana + Prometheus + Loki.

Apa itu Grafana, Prometheus, dan Loki?

Prometheus: Sistem monitoring dan alerting yang mengumpulkan metrics dengan pull model. Menyimpan data time-series secara efisien. Cocok untuk metrics infrastruktur dan aplikasi.

Grafana: Platform dashboard dan visualisasi yang bisa menampilkan data dari Prometheus, Loki, dan berbagai sumber lain. Dashboard interaktif dengan alerting terintegrasi.

Loki: Log aggregation system yang terinspirasi Prometheus — menggunakan label yang sama untuk indexing logs. Ringan, murah, dan terintegrasi erat dengan Grafana.

Install Stack dengan Docker Compose

# docker-compose.yml
version: '3.8'
services:
  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
    volumes:
      - grafana-data:/var/lib/grafana

  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml

  promtail:
    image: grafana/promtail:latest
    volumes:
      - /var/log:/var/log
      - ./promtail-config.yaml:/etc/promtail/config.yml
    command: -config.file=/etc/promtail/config.yml

volumes:
  grafana-data:

Konfigurasi Prometheus

# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']  # node_exporter

  - job_name: 'app'
    static_configs:
      - targets: ['app:8080']        # aplikasi sendiri

Integrasi dengan Aplikasi Python

from prometheus_client import start_http_server, Counter, Histogram
import time, random

REQUEST_COUNT = Counter('app_requests_total', 'Total requests')
REQUEST_DURATION = Histogram('app_request_duration_seconds', 'Request duration')

@app.route('/api/users')
def get_users():
    with REQUEST_DURATION.time():
        REQUEST_COUNT.inc()
        time.sleep(random.uniform(0.1, 0.5))
        return {'users': ['Alice', 'Bob']}

if __name__ == '__main__':
    start_http_server(8000)  # Expose metrics di port 8000
    app.run()

Membuat Dashboard Grafana

1. Login Grafana (http://localhost:3000, admin/admin123)
2. Add data source → Prometheus (http://prometheus:9090)
3. Import dashboard ID 1860 (Node Exporter Full)
4. Buat panel kustom: Query = rate(app_requests_total[5m])
5. Tambah alert: kondisi jika error rate > 5% dalam 5 menit
6. Setup notifikasi ke Telegram/Slack

Query PromQL Penting

# CPU usage per container
rate(container_cpu_usage_seconds_total[5m]) * 100

# Memory usage
container_memory_usage_bytes

# Request rate per endpoint
rate(app_requests_total[5m])

# Error ratio
rate(app_errors_total[5m]) / rate(app_requests_total[5m]) * 100

# 95th percentile latency
histogram_quantile(0.95, rate(app_request_duration_seconds_bucket[5m]))

Baca Juga

Kesimpulan

Stack Grafana + Prometheus + Loki memberikan solusi observability end-to-end yang open-source, scalable, dan teruji di production ribuan perusahaan. Mulailah dengan docker-compose di mesin lokal, lalu scale ke production dengan Kubernetes Operator untuk Prometheus dan Loki.

Iklan

Iklan
Iklan

Iklan
Iklan

Iklan
Iklan