ELK řeší logy. Ale co metriky? CPU, paměť, response time, error rate, business metriky? Prometheus od SoundCloud (nyní CNCF projekt) je monitoring systém navržený pro dynamické, kontejnerové prostředí.
Pull model¶
Na rozdíl od Graphite (push), Prometheus aktivně scrapuje metriky z endpointů. Každá služba exposuje /metrics endpoint, Prometheus ho periodicky čte. Výhoda: vidíte okamžitě, když služba přestane odpovídat.
Metriky v aplikaci¶
# prometheus.yml
scrape_configs:
- job_name: 'user-api'
scrape_interval: 15s
static_configs:
- targets: ['user-api:8080']
# V Java aplikaci (Micrometer)
Counter requestCounter = Counter.builder("api.requests")
.tag("endpoint", "/users")
.tag("method", "GET")
.register(meterRegistry);
PromQL¶
Dotazovací jazyk pro metriky. rate(http_requests_total[5m]) — request rate
za posledních 5 minut. histogram_quantile(0.95, ...) — 95. percentil latence.
Mocný, ale křivka učení.
Grafana dashboardy¶
Grafana vizualizuje Prometheus data. Community dashboardy pro Node.js, JVM, Docker, Nginx. Alerting přes Alertmanager — Slack, email, PagerDuty.
Prometheus vs. Graphite/InfluxDB¶
Prometheus: pull model, PromQL, service discovery, navržený pro kontejnery. Graphite: push model, starší, stabilní. InfluxDB: push, SQL-like query, lepší pro IoT time series. Pro mikroslužby Prometheus jasně vede.
Metriky jsou základ SRE¶
Logy říkají co se stalo. Metriky říkají jak se systém chová. Prometheus + Grafana = standard pro monitoring cloud-native aplikací.