Prometheus
Overview
Prometheus digunakan untuk metrics collection dan storage.
Configuration
Docker Compose
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./configs/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
mem_limit: 512m
cpus: "0.50"
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:9090/-/healthy"]
interval: 30s
timeout: 10s
retries: 3
prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
- job_name: 'backend'
static_configs:
- targets: ['backend:8081']
metrics_path: '/metrics'
- job_name: 'opensearch'
static_configs:
- targets: ['opensearch:9600']
metrics_path: '/_prometheus/metrics'
- job_name: 'rabbitmq'
static_configs:
- targets: ['rabbitmq:15692']
metrics_path: '/metrics'
- job_name: 'fluentd'
static_configs:
- targets: ['fluentd:24224']
metrics_path: '/metrics'
Queries
CPU Usage
# Container CPU usage
rate(container_cpu_usage_seconds_total{container!=""}[5m]) * 100
# Host CPU usage
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Memory Usage
# Container memory usage
container_memory_usage_bytes{container!=""} / 1024 / 1024
# Host memory usage
1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
HTTP Requests
# Request rate
rate(http_requests_total[5m])
# Error rate
rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) * 100
Alerting Rules
alerting-rules.yml
groups:
- name: clm-alerts
rules:
- alert: HighCPUUsage
expr: rate(container_cpu_usage_seconds_total{container!=""}[5m]) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.container }}"
- alert: HighMemoryUsage
expr: container_memory_usage_bytes{container!=""} / 1024 / 1024 > 512
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.container }}"
- alert: ServiceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Service {{ $labels.job }} is down"
Monitoring
Web UI
http://localhost:9090
API
# Query
curl http://localhost:9090/api/v1/query?query=up
# Range query
curl http://localhost:9090/api/v1/query_range?query=up&start=2026-07-01T00:00:00Z&end=2026-07-06T23:59:59Z&step=3600
Next Steps
- Grafana - Dashboards
- OTel Collector - Telemetry