Proč Prometheus a Grafana tvoří moderní monitorovací stack
Prometheus a Grafana se staly de facto standardem pro monitorování cloud-native a hybridních prostředí. Prometheus poskytuje časovou řadu metrik s výkonným dotazovacím jazykem PromQL a model „pull“ se service discovery, zatímco Grafana doručuje univerzální vizualizace, alerting a observabilitu napříč metrikami, logy a trasováním. Kombinace otevřených standardů (OpenMetrics), bohatého ekosystému exporterů a horizontální škálovatelnosti (Cortex/Thanos/Mimir) umožňuje pokrýt vše od IoT zařízení přes Kubernetes clustery až po podnikové datové sály.
Architektura stacku a datové toky
- Expozice metrik: aplikace a služby publikují endpoint
/metricsve formátu Prometheus (typicky textový OpenMetrics). - Scrape: Prometheus periodicky „natahuje“ metriky dle
scrape_configsa ukládá je do lokální TSDB. - Alerting: pravidla v Prometheu generují alerty, které jsou směrovány do Alertmanageru, jenž řeší deduplikaci, tlumení a směrování.
- Vizualizace: Grafana čte data přímo z Promethea nebo dlouhodobého úložiště (Thanos/Cortex/Mimir), renderuje panely a spravuje notifikace.
- Logy & trace (volitelné): Loki (logy) a Tempo/Jaeger (traces) propojují metriky s kontextem událostí a trasování.
Datový model Promethea: metriky, štítky a časové řady
- Časová řada = metric name + sada labelů (klíč–hodnota) → unikátní identita řady.
- Typy metrik: counter (monotónně rostoucí), gauge (libovolné změny), histogram (bucketované rozdělení), summary (percentily/kvantily na klientovi).
- Labels definují dimenze (např.
job,instance,pod,path), umožňují agregace bez nutnosti komplikovaných názvů metrik. - Kardinalita: počet unikátních kombinací labelů; klíčový faktor nároků na paměť a výkon.
Expozice a exportéry
- Client knihovny: instrumentace aplikací (Go, Java, Python, Ruby, .NET). Preferujte histogramy pro latence a countery pro chybovost.
- Node Exporter: OS metriky (CPU, paměť, I/O, FS, síť, hw senzory).
- Blackbox Exporter: syntetické testy (HTTP/TCP/ICMP/TLS).
- SNMP Exporter: mapování OID → metriky pro síťové prvky a legacy systémy.
- Windows Exporter a další doménově specifické exportéry (NGINX, HAProxy, PostgreSQL, Redis, Kafka…).
- Pushgateway: pro krátce žijící batch úlohy (používat střídmě; není náhradou za pull model).
Service Discovery a relabeling
Prometheus integruje dynamické service discovery (Kubernetes, Consul, EC2, Azure, GCE, statické seznamy). Relabeling transformuje a filtruje cíle ještě před scrape:
- Selektivní zahrnutí/odstranění targetů dle labelů (např.
kubernetes_namespace,app). - Normalizace a odvození labelů (
__meta_kubernetes_pod_annotation_*→pod/servicelabely). - Ochrana kardinality: odstraňte vysoce variabilní labely (např. dynamické
path,query).
PromQL: dotazovací jazyk a analytické idiomy
- Rychlosti a derivace:
rate(http_requests_total[5m]),irate()pro krátkodobé špičky. - Agregace:
sum by (status) (...),avg_over_time(),quantile_over_time(). - Latence z histogramů:
histogram_quantile(0.95, sum by (le)(rate(http_request_duration_seconds_bucket[5m]))). - Joiny a operátory:
on(),group_left/group_rightpro obohacení řad. - Windowing: vektorové selektory
[5m],offsetpro porovnání s minulostí.
Pravidla: recording rules a alerting rules
- Recording rules předpočítají náročné dotazy do nových metrik → šetří CPU a stabilizují panely.
- Alerting s podmínkami, for trváním a štítky (
severity,team). Semantika: je-li to důležité pro člověka, generujte alert; jinak panel. - Organizace pravidel do skupin (
groups) a konzervativní evaluation_interval pro predikovatelné chování.
Alertmanager: směrování, deduplikace a tlumení
- Routing tree: pravidla podle labelů (např.
severity=critical→ on-call;env=dev→ pouze chatops). - Inhibition: potlačení méně důležitých alertů, když je aktivní nadřazený (např. host down inhibuje service down).
- Silencing: dočasné umlčení s komentářem a expirační dobou.
- Integrace s e-mailem, Slack/Teams, PagerDuty/Opsgenie, webhooks (SOAR).
Grafana: model panelů, proměnné a šablony
- Proměnné (templating): dynamické filtry nad labely (
$cluster,$namespace) pro znovupoužití dashboardů. - Transformace: merge řad, výpočty odvozených sloupců, reduce na single-value.
- Annotations: release eventy, incidenty; vizuální korelace metrik s událostmi.
- Grafana Alerting: jednotný alerting přes datové zdroje; contact points, notification policies, silences.
Observabilitní metriky: USE, RED a SLO/Chybový rozpočet
- USE (Utilization, Saturation, Errors) pro infrastrukturu (CPU, I/O, paměť, queue depth).
- RED (Rate, Errors, Duration) pro služby/API.
- SLO: cíle dostupnosti a latence; burn rate alerty (např. 2h a 6h okna) navázané na error budget.
Kubernetes monitoring: kube-state-metrics, cAdvisor a networking
- kube-state-metrics: objektový stav (Deployments, DaemonSets, Jobs, quotas, limity).
- cAdvisor/CRI: container runtime metriky (CPU, paměť, FS).
- Network: CNI metriky, eBPF exportéry (Cilium Hubble metrics), apiserver a scheduler metriky.
- kube-prometheus-stack (Helm): opinionated balík Prometheus, Alertmanager, Grafana, pravidla a dashboardy.
Škálování, dlouhodobá úschova a vysoká dostupnost
- Replikace Promethea: nezávislé instance pro HA (sdílené scrape cíle) + deduplikace v Thanos/Cortex/Mimir.
- Thanos/Cortex/Mimir: horizontální sharding, object storage (S3/GCS), downsampling a global query.
- Remote write/read: export do dlouhodobých systémů nebo centralizovaných platforem observability.
- Retention a compaction: promyšlené
--storage.tsdb.retention.time, disk IOPS, oddělené disky pro WAL.
Výkon a náklady: kardinalita, limits a resource plán
- Kontrola kardinality: vyvarujte se labelů s vysokou entropií (request ID, user ID, URL query).
- Sampling: u vysokofrekvenčních metrik zvažte nižší scrape intervaly nebo předagregace (recording rules).
- Dotazy v Grafaně: používejte
$__rate_interval, vyhýbejte seoffsets velkými okny bez potřeby. - Velikost clusteru: dimenzujte CPU/RAM podle počtu řad a scrape frekvence; sledujte Prometheus TSDB head a query time.
Bezpečnost: izolace, TLS a multi-tenant
- Autentizace: reverzní proxy s OIDC (Grafana nativně), mTLS pro interní přístupy, authorization přes role v Grafaně.
- Síťová segmentace: privátní scrape, zákaz přístupu k
/metricsz internetu, network policies v K8s. - Multi-tenant: Thanos/Cortex/Mimir s tenancy, per-tenant limity kardinality a dotazů.
Standardy a formáty: OpenMetrics a exempláře
- OpenMetrics: standardizovaný formát včetně metadata typů a exemplars.
- Exemplars: vazba metrik na konkrétní trace ID → rychlá navigace z panelu do trasování (Tempo/Jaeger).
Integrace logů a trasování: Loki a Tempo
- Loki: logy indexované labely (nikoliv plným textem). Propojení s panely (drill-down z metrik na logy).
- Tempo: ukládání a dotazy nad trace; span metrics generují metriky z trasování pro RED.
- OpenTelemetry: jednotná instrumentace pro metriky, logy i traces.
Migrace ze Zabbixu a hybridní koexistence
- Koexistence: Zabbix pro SNMP/tradiční servery, Prometheus pro cloud-native; sjednocení v Grafaně pomocí více datových zdrojů.
- Postupná migrace: nejprve infrastruktura (Node/Blackbox), poté aplikace; paralelní alerting s postupným vypínáním starých pravidel.
- Mapování: převod klíčových SLA metrik na RED/USE a SLO alerty.
Best practices pro návrh dashboardů
- Hierarchie: přehled (SLO/SLA) → doména (API, DB, fronty) → detail (instance).
- Konzistence: stejné osy a názvy, barvy podle významu (chybovost, latence, throughput).
- Čitelnost: p95/p99 latence, rate chyb, saturace; minimalizace „grafického šumu“.
Nejčastější antipatterny a jejich náprava
- Explodující kardinalita (label
user_id,session) → odstranit/normalizovat; agregovat dříve. - Alert fatigue: příliš detailní alerty → zavést inhibition, severity a SLO-driven schéma.
- Pushgateway misuse: dlouhodobé držení metrik → proměnit na pull nebo batch metriky rychle expirovat.
- Dashboard sprawl: duplicitní panely → standardizace šablon, repozitář dashboardů a review.
Provisioning, GitOps a testování pravidel
- Provisioning: definujte datasources, složky a dashboardy jako kód (JSON/YAML) a spravujte v Git.
- GitOps: ArgoCD/Flux pro nasazení Promethea, Alertmanageru a Grafany; změny přes PR.
- Testy: unit testy PromQL pravidel (např. promql-unit-testing), validace alert stromu a simulace scénářů.
Roadmapa implementace v podniku
- Inventura: cíle (SLO), zdroje metrik, exportéry, síťové limity, retence.
- Minimální viable observability: Node/Blackbox, základní RED/USE, alerting na burn rate a saturaci.
- Kubernetes a aplikace: kube-prometheus-stack, instrumentace služeb, tracing/Logs integrace.
- Škálování: Thanos/Cortex/Mimir, multi-tenant, objektové storage, HA.
- Governance: standardy labelů, review pravidel, provisioning jako kód, přístupová politika.
Závěr: Sjednocená observabilita jako konkurenční výhoda
Prometheus a Grafana poskytují solidní, otevřený a škálovatelný základ pro monitorování moderních systémů. Správně navržený model metrik, disciplinovaná práce s kardinalitou, SLO-orientovaný alerting a automatizovaný provisioning vytváří observabilitu, která zkracuje MTTR, snižuje provozní riziko a umožňuje týmům dodávat rychleji s vyšší kvalitou. Rozšíření o logy a trasování pak doplňuje kompletní obraz systému v reálném čase.