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 časové řady metrik s výkonným dotazovacím jazykem PromQL a modelem „pull“ s service discovery, zatímco Grafana zajišť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ých úložišť (Thanos/Cortex/Mimir), renderuje panely a spravuje notifikace.
- Logy & trace (volitelné): Loki (logy) a Tempo/Jaeger (trasování) 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 počítané 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 měření latencí a countery pro chybovost.
- Node Exporter: OS metriky (CPU, paměť, I/O, filesystem, síť, hardware senzory).
- Blackbox Exporter: syntetické testy (HTTP/TCP/ICMP/TLS).
- SNMP Exporter: mapování OID na metriky pro síťové prvky a legacy systémy.
- Windows Exporter a další doménově specifické exportéry (NGINX, HAProxy, PostgreSQL, Redis, Kafka aj.).
- Pushgateway: určen 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: odstranění vysoce variabilních labelů (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í časových řad. - Windowing: vektorové selektory
[5m],offsetpro porovnání s minulostí.
Pravidla: recording rules a alerting rules
- Recording rules předpočítávají 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 jen 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 hodnot, reduce na jedno hodnocení.
- 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ěť, hloubka fronty).
- 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: stav objektů (Deployments, DaemonSets, Jobs, kvóty, limity).
- cAdvisor/CRI: metriky kontejnerového runtime (CPU, paměť, filesystem).
- Network: CNI metriky, eBPF exportéry (Cilium Hubble metrics), metriky apiserveru a scheduleru.
- kube-prometheus-stack (Helm): opinionated balík Promethea, Alertmanageru, Grafany, pravidel a dashboardů.
Š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 globální dotazování.
- Remote write/read: export do dlouhodobých systémů nebo centralizovaných platforem observability.
- Retention a compaction: promyšlené
--storage.tsdb.retention.time, využití diskových IOPS, oddělené disky pro WAL.
Výkon a náklady: kardinalita, limity a plánování zdrojů
- 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 frekvence scrape; 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 Kubernetes. - 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ě metadat 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 (nikoli plným textem). Propojení s panely (drill-down z metrik na logy).
- Tempo: ukládání a dotazy nad trasami; span metrics generují metriky z trasování pro RED.
- OpenTelemetry: jednotná instrumentace pro metriky, logy i trasování.
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 → změnit na pull nebo batch metriky s rychlou expirací.
- Dashboard sprawl: duplicitní panely → standardizace šablon, repozitář dashboardů a pravidelný 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 pull requesty.
- Testy: unit testy PromQL pravidel (např. promql-unit-testing), validace alert stromu a simulace scénářů.
Roadmapa implementace v podniku
- Inventura: definice cílů (SLO), zdrojů metrik, exporterů, síťových limitů a retencí.
- Minimální viable observability: Node/Blackbox, základní RED/USE metriky, alerting na burn rate a saturaci.
- Kubernetes a aplikace: nasazení kube-prometheus-stack, instrumentace služeb, integrace trasování a logů.
- Škálování: použití Thanos/Cortex/Mimir, multi-tenant, objektové úložiště, vysoká dostupnost.
- Governance: standardy labelů, review pravidel, provisioning jako kód, přístupová politika.