Skip to main content

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