Prometheus a Grafana: Moderní řešení pro monitoring metrik

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 /metrics ve formátu Prometheus (typicky textový OpenMetrics).
  • Scrape: Prometheus periodicky „natahuje“ metriky dle scrape_configs a 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/service labely).
  • 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_right pro obohacení časových řad.
  • Windowing: vektorové selektory [5m], offset pro 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 se offset s 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 /metrics z 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

  1. Inventura: definice cílů (SLO), zdrojů metrik, exporterů, síťových limitů a retencí.
  2. Minimální viable observability: Node/Blackbox, základní RED/USE metriky, alerting na burn rate a saturaci.
  3. Kubernetes a aplikace: nasazení kube-prometheus-stack, instrumentace služeb, integrace trasování a logů.
  4. Škálování: použití Thanos/Cortex/Mimir, multi-tenant, objektové úložiště, vysoká dostupnost.
  5. Governance: standardy labelů, review pravidel, provisioning jako kód, přístupová politika.

Závěr