Co je observabilita a proč nestačí „jen logovat“
Observabilita je schopnost systému odpovědět na otázku „co se právě děje a proč“ pouze na základě jeho výstupů. Tradiční monitoring sleduje známé metriky a prahové hodnoty, zatímco observabilita umožňuje zkoumat neznámé problémy (unknown unknowns) napříč vrstvami aplikace, sítě i infrastruktury. Opírá se o systematický sběr, kontextualizaci a korelaci signálů: logů, metrik, trasování (distribuovaných požadavků), často doplněných o události a profilační data.
Pilíře observability: logy, metriky, trasování, události
- Logy: podrobné, často textové záznamy akcí a chyb. Mají vysokou informační hodnotu, ale také svou cenu (objem, ukládání).
- Metriky: číselné časové řady s nízkou kardinalitou (QPS, latence p50/p95/p99, chybovost). Ideální pro SLO/alerting a sledování trendů.
- Trasování: graf průchodu požadavku napříč službami, rozdělený na spany s časovými razítky. Odpovídá na otázku „kde jsme ztratili čas“.
- Události: méně časté, sémanticky bohaté signály (nasazení, změny příznaků funkcí, převzetí služby při selhání, škálování), které poskytují kontext ostatním datům.
Principy kvalitního logování
- Strukturované logy: logujte ve formátu JSON (
{"timestamp": "...","level":"ERROR","service":"checkout","msg":"Payment failed","orderId":"...","trace_id":"..."}). Umožňují přesné filtrování a agregaci. - Korelace: propagujte Trace Context (W3C
traceparent/tracestate) a přidávejtetrace_id/span_iddo každého záznamu. - Deterministická schémata: sjednoťte klíče (
service,env,version,tenant,http.method,user.id…), udržujte registr schémat (schema registry). - Správné úrovně:
DEBUG(vývoj/diagnostika),INFO(běžné dění),WARN(degradace),ERROR(selhání dílčí operace),FATAL(kolaps služby). Omezte „log spam“. - Kontext vs. obsah: stručná, srozumitelná zpráva
msg+ bohatý kontext v polích. Vyhněte se vytváření parsovatelných textů vmsg. - Čas a časové pásmo: logujte v UTC ve formátu ISO 8601, synchronizujte čas (NTP/PTP).
Minimalizace šumu a nákladů
- Vzorkování: u trasování použijte vzorkování na konci (tail-based) pro zachování anomálií, u logů pravděpodobnostní vzorkování (probabilistic sampling) opakujících se záznamů.
- Deduplikace a omezení rychlosti: omezte záplavy chyb (slučování identických událostí v časovém okně, log coalescing).
- Úrovně úložiště: hot (SSD, krátká doba uchovávání), warm (objektové úložiště), cold (archiv); různé zásady uchovávání pro různé typy signálů.
- Správa kardinality: vyhněte se metrikám s vysokou kardinalitou (např.
labels=user_id), upřednostňujte exempláře (exemplars) strace_id.
OpenTelemetry a standardizace
OpenTelemetry (OTel) sjednocuje trasování, metriky a logy prostřednictvím SDK a automatické instrumentace a protokolu OTLP. Umožňuje sběr nezávislý na dodavateli a export do různých backendů (Grafana, Prometheus, Tempo, Loki, Jaeger, Elastic, Datadog…). Jednotná schémata (semantic conventions) zlepšují vyhledatelnost a korelaci napříč jazyky a službami.
Architektury pro sběr a přenos
- Agent/sidecar/daemonset: lokální kolektor (např. OTel Collector, Fluent Bit) přijímá signály, provádí filtrování a vzorkování a exportuje data.
- Brána: centralizovaný příjem s autentizací, oddělením více tenantů (multi-tenant) a řízením datových toků.
- Řízení zpětného tlaku: fronty s trvalým uložením (disková vyrovnávací paměť), opakování pokusů s exponenciálním prodlužováním prodlev (exponential backoff), ochrana proti ztrátám při výpadcích.
Observabilita v cloudu a Kubernetes
- Kontext K8s: obohacujte logy o
namespace,pod,container,node,image,deployment,revision. - Podmíněná podrobnost: dynamické přepínání úrovní logování prostřednictvím config map či feature flag bez opětovného nasazení.
- HPA a automatické škálování: metriky (CPU, paměť, aplikační QPS/latence) jako signály pro škálování; pozor na zpoždění metrik (metric lag).
- eBPF a síťová observabilita: neinvazivní sběr síťových toků, latencí a chyb TCP/HTTP na úrovni jádra.
SLI/SLO/SLA a rozpočet chyb
- SLI: Service Level Indicators – měřitelné ukazatele (dostupnost, latence, platné odpovědi).
- SLO: cíle kvality (např. 99,9% dostupnost a p99 < 300 ms).
- Rozpočet chyb: povolený prostor pro chyby; po jeho vyčerpání omezte rizikové změny a zaměřte se na stabilitu.
- Upozorňování: upozorňujte na porušení SLO (dopad na uživatele), nikoli na interní výkyvy. Používejte pravidla multi-window, multi-burn-rate.
Návrh metrik a dashboardů
- Metodiky USE a RED: Utilization, Saturation, Errors (infrastruktura) a Rate, Errors, Duration (služby) jako základ dashboardů.
- Zlaté signály: latence, chybovost, provoz (QPS), nasycení (Saturation).
- Exempláře a propojování: přechod z vrcholů v metrikách na konkrétní trasu; z trasy na související logy.
- Runbooky: ke každému panelu připojte postup řešení krok za krokem a kontakty (pohotovost, eskalace).
Chybová hlášení, která pomáhají
- Akční a bezpečná: místo „NullPointer“ logujte „Není načten
customer– chybícustomer_id“; nikdy nevypisujte tajné hodnoty (Authorization,password). - Kódy a kategorie: interní error codes (
PAYMENT_TIMEOUT,INVENTORY_CONFLICT) usnadňují analýzu a upozorňování. - Řešení problémů na základě tras: ID požadavku v odpovědi (
Trace-Id) i v komunikaci se zákaznickou podporou.
Bezpečnost, soukromí a compliance
- Minimalizace dat: logujte jen to, co potřebujete. Osobní a citlivé údaje (PII/PHI) zakrývejte (maskování, tokenizace) už v agentovi.
- RBAC/ABAC a auditní logy: oddělte provozní logy od auditních (neměnnost, požadavky na uchovávání a právní požadavky).
- Šifrování: TLS při přenosu, šifrování uložených dat („at rest“), řízená správa klíčů (KMS/HSM).
- Právo na výmaz: u osobních údajů (PII) mějte zavedený proces a indexy pro cílené mazání; oddělené prostory pro jednotlivé tenanty.
Observabilita v mikroslužbách a systémech řízených událostmi
- Propagace kontextu: přenášejte
trace_idi přes zprostředkovatele zpráv (např.headersv Kafka, AMQP). - Asynchronní latence: měřte dobu průchodu od začátku do konce (produkce → konzumace → zpracování).
- Vzor Outbox: logujte business events deterministicky a propojte je s trasou.
Testování a kvalita observability
- Kontraktní testy a testy e2e: ověřte, že instrumentace vzniká na správných místech a obsahuje povinné klíče.
- Chaos engineering: vnášejte poruchy (latence, výpadky) a ověřte, že signalizace a upozornění fungují.
- Zátěžové testy: měřte p99/p999, sledujte nasycení a kapacitu backendů observability (limity příjmu dat).
Nákladová efektivita (FinOps pro observabilitu)
- Doba uchovávání a úrovně úložiště: různé doby uchovávání pro aplikační logy, auditní záznamy, trasování a metriky.
- Selektivní příjem dat: vypínejte nepotřebné služby, filtrujte v kolektoru, zahazujte klíče s nízkým přínosem z dlouhého chvostu (drop long-tail).
- Obnova dat na vyžádání: levný archiv a dočasné načtení při incidentu.
Procesy: řízení incidentů a post-mortem
- Pohotovost a eskalace: jasné vlastnictví služeb, střídání pohotovostí, příručky a kultura bez obviňování (blameless).
- Časová osa z dat: u incidentu korelujte nasazení, konfiguraci, metriky, trasování a logy na jedné časové ose.
- Post-mortem: měřitelné „akční úkoly“, sledování přínosu (zkrácení MTTD/MTTR, pokles chybovosti).
Observabilita frontendu, mobilních zařízení a edge prostředí
- RUM (Real User Monitoring): metriky Core Web Vitals (LCP, CLS, INP), chybové události a trasování do backendu.
- Specifika mobilních zařízení: offline fronty, omezení baterie a objemu dat, soukromé údaje – důsledná anonymizace.
- Edge a CDN: měřte latenci a chybovost na okraji sítě, propojte request IDs mezi CDN a zdrojovým serverem.
Antipatterny a časté chyby
- Logování výjimek bez kontextu: „trasování zásobníku bez
trace_id“ je slepá ulička. - Ladění v produkci „navždy“: vysoké náklady a riziko úniku dat.
- Únava z upozornění: stovky pravidel bez vazby na SLO → ignorované alarmy.
- „To se nějak najde“: nestrukturované texty, chybějící schémata a standardy pojmenování.
Praktický implementační kontrolní seznam
- Zaveďte OpenTelemetry (trasování, metriky, logy) s jednotným schématem a propagací kontextu.
- Logujte strukturovaně ve formátu JSON, přidejte
trace_id,span_id,service,env,version. - Nastavte SLI/SLO, zlaté signály a upozornění s burn rate; připojte runbooky.
- Upravte vzorkování (na konci pro anomálie), nastavte dobu uchovávání a úrovně úložiště.
- Zabezpečte data (maskování osobních údajů, RBAC, šifrování, audit), oddělte tenanty.
- Automatizujte dashboardy a testy observability (validaci instrumentace v CI/CD).
- Propojte události (deploy, feature flags) s metrikami/trasováním pro rychlé určení hlavní příčiny (root cause).
Závěr
Logování a observabilita nejsou jen nástroje, ale provozní disciplína. Kombinace strukturovaných logů, smysluplných metrik, distribuovaného trasování a bohatého kontextu událostí – sbíraných standardizovaným způsobem (OTel), bezpečně spravovaných a nákladově řízených – umožňuje zkrátit MTTD/MTTR, zvyšovat spolehlivost a poskytovat lepší uživatelskou zkušenost. Silná observabilita se projeví nejen při incidentech, ale i při rychlejším vývoji, bezpečnějším nasazování a informovaném řízení kvality služeb.
