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.






