Proč systematicky sbírat a analyzovat logy
Logy jsou nejdostupnějším zdrojem informací o chování aplikací a infrastruktury. Slouží k odhalování incidentů, problémů s výkonem, bezpečnostních událostí i k produktové analytice. Kvalitní logování vyžaduje promyšlené schéma, pipeline sběru, úložiště, dotazovací jazyk a governance (retenci, ochranu dat, náklady). Cílem je pozorovatelnost (observabilita): schopnost porozumět interním stavům systému na základě externích výstupů bez invazivního zásahu do jeho běhu.
Typy logů a jejich použití
- Aplikační logy – události, chyby, obchodní doména (objednávka, platba), metriky v textové podobě.
- Přístupové logy – HTTP reverzní proxy, API gateway, WAF; klíčové pro latence, stavové kódy a identitu volajícího.
- Systémové a infrastrukturní logy – kernel, init/správci služeb, kontejnery, orchestrátory.
- Bezpečnostní logy – autentizace, autorizace, auditní stopy, anomálie.
- Databázové logy – pomalé dotazy, deadlocky, plánovače; vodítko pro optimalizaci.
Principy dobrého logování
- Strukturované logy – JSON/NDJSON s jasným schématem namísto volného textu.
- Stabilní schéma – evoluce prostřednictvím verzování; pole nemažte, raději je označte jako
deprecated. - Kontext – trace_id, span_id, correlation_id, identita uživatele/tenanta, verze sestavení a prostředí.
- Čitelnost vs. strojová zpracovatelnost – lidsky čitelná zpráva message + strukturovaná data pro dotazy.
- Mezinárodní prostředí – časy ve formátu ISO 8601 v UTC; čitelné klíče v angličtině.
Úrovně závažnosti a kategorizace
- TRACE – podrobná diagnostika (v produkci ji lze vypnout, případně vzorkovat).
- DEBUG – informace pro vývojáře; lze ji vypnout podle služby.
- INFO – běžné události („objednávka vytvořena“).
- WARN – neblokující problémy, anomálie.
- ERROR – selhání požadavku/operace.
- FATAL – fatální chybový stav vyžadující restart/eskalaci.
Schéma strukturovaných logů
Doporučená minimální pole:
timestamp(UTC ISO 8601 s milisekundami),level,message,logger/service,env,version.trace_id,span_id,correlation_idpro propojení s distribuovaným tracingem.http.method,http.path,http.status_code,latency_ms,client.ip.user.id/tenant.id/session.ids ohledem na GDPR/PII.
Využívejte standardizované konvence (např. pole pojmenovaná tečkovou notací), aby bylo možné logy snadno mapovat na indexy a pole pro dotazy.
Standardy a interoperabilita
- OpenTelemetry (OTel) Logs – jednotná sémantika pro logy, metriky a trace včetně přenosu přes OTLP.
- ECS (Elastic Common Schema) – standardizovaná pole (
event.*,http.*,user.*,cloud.*), usnadňují sdílené dotazy a vizualizace.
Vytváření logů: knihovny, formát a výkon
- Preferujte strukturovaný logger (Monolog s JSON procesorem, Serilog/Pino/Bunyan apod.) s asynchronním výstupem.
- V kontejnerech zapisujte na stdout/stderr; vyhněte se rotaci logů uvnitř aplikace.
- Minimalizujte alokace a serializaci; používejte šablony zpráv (parametrizované zprávy) a pole vyhodnocovaná až při použití.
Pipeline logování: sběr, přenos, zpracování
Typická topologie:
- Vytváření – aplikace zapisuje strukturovaný JSON na stdout.
- Agent/sidecar – Fluent Bit, Vector, Filebeat snímají logy (tail), přidávají metadata (host, pod, namespace) a odesílají je dál.
- Přenosová vrstva – přímé HTTP/gRPC do úložiště nebo přes buffer (např. Kafka/NATS) pro vyšší odolnost a škálovatelnost.
- Zpracování – obohacení (geoIP, uživatel, release), maskování PII, deduplikace, normalizace schématu.
- Úložiště a indexace – sloupcové úložiště časových řad, fulltextový index, objektové úložiště pro „teplá/studená“ data.
Ochrana dat: PII, maskování a redakce
- Nikdy nezapisujte do logů tajné údaje (tokeny, hesla, API klíče). Zaveďte čištění požadavků/odpovědí pro citlivé hlavičky a těla zpráv.
- PII (e-mail, telefon, adresa, IP) maskujte nebo hashujte (HMAC s rotovaným klíčem) podle účelu.
- Udržujte klasifikaci dat a minimalizaci dat – zapisujte do logů jen to, co má diagnostickou hodnotu.
Vzorkování (sampling) a řízení objemu
- Vzorkování na začátku (head-based sampling) – rozhodnutí v místě vytváření logu (levné, ale bez znalosti dopadu).
- Vzorkování na konci (tail-based sampling) – rozhodnutí po vyhodnocení (např. upřednostnění chyb a odlehlých hodnot).
- Dynamické vzorkování – adaptivně podle SLA, latence, místa incidentu či tenanta (spravedlivé rozdělení prostředků).
Odolnost pipeline a ztrátovost
- Agenti s diskovou vyrovnávací pamětí (filesystem) pro případ výpadku sítě.
- Backpressure – regulace rychlosti při zahlcení úložiště; u nekritických logů upřednostňujte režim „fail-open“ a u auditních stop „fail-closed“.
- Idempotentní příjem dat a deduplikace pomocí
event.ida časového okna pro opakované pokusy.
Úložiště a indexace: možnosti a kompromisy
- Fulltext + invertovaný index – flexibilní dotazy, vyšší náklady na zápis a RAM (příklad: ELK, OpenSearch).
- Časové řady – optimalizované pro časové rozsahy a agregace (např. Loki s indexem štítků + objektové úložiště pro obsah).
- Datové jezero – dlouhodobá retence v objektovém úložišti (Parquet), nad ním SQL/Trino/BigQuery pro ad hoc analýzy.
Dotazovací jazyky a analytika
- Lucene/KQL – fulltext, filtry, agregace (terms, date histogram), procesory pipeline.
- LogQL – výběr podle štítků + regex/filtr řádků, funkce rate a count_over_time.
- SQL nad logy – federované dotazy (externí tabulky, Parquet), spojení s metadaty (tenanti, release).
Propojení s tracingem a metrikami
Logy by měly obsahovat identifikátory trace/span pro přecházení mezi vrstvami observability. Umožní to přechod od chybného požadavku (trace) k podrobnému kontextu (log) a zpět. Z logů lze odvozovat „odvozené metriky“ (počet chyb za minutu, P95 latence) pro tvorbu upozornění.
Upozornění a detekce anomálií
- Pravidla nad logy (počet
ERRORv časovém okně, výskyt konkrétního kódu/hlášení) a prahové hodnoty podle zón (pro každou službu/tenant). - Seznamy sledovaných položek/IOC (bezpečnost) – detekce podezřelých IP, user-agentů, signatur útoků.
- Statistické a ML metody – robustní základní hodnoty, zjišťování odchylek (nárůsty, změny vzorců hlášení).
Dashboardy a provozní pohledy
- „Zlaté signály“ – chybovost, latence, propustnost, saturace; podrobnější pohled na službu, endpoint, tenanta.
- Rozložení chyb podle příčiny (kód, výjimka, navazující služba).
- Mapy toků požadavků (service map) s přechodem k logům při anomálii.
Auditní a forenzní logy
- Neměnnost – úložiště WORM, podpisy, časová razítka.
- Podrobná granularita: kdo, kdy, co, odkud a s jakým výsledkem.
- Oddělená retence a přístupová práva od běžných provozních logů.
Retence, vrstvení a náklady
- Krátkodobá retence v hot úložišti (dny) v indexu pro provozní účely; delší retence v warm/cold úložišti s nižšími náklady.
- Automatické zásady životního cyklu (rollover, shrink, delete) a úlohy ILM.
- Řízení kardinality – rozumný počet štítků/klíčů, omezení unikátních kombinací (např.
user.idukládat do pole, nikoli do štítku).
Zabezpečení přístupu a compliance
- RBAC/ABAC – přístup podle role, týmu, tenanta; zabezpečení na úrovni řádků/polí pro citlivá pole.
- Šifrování uložených dat i dat při přenosu; správa klíčů v KMS, jejich rotace.
- Záznamy o přístupech a dotazech nad logy pro audit; jasná pravidla pro sdílení dat.
Testování kvality logů
- Testy kontraktu schématu logů (existence povinných polí, typy, rozsahy).
- End-to-end testy pipeline (syntetické události → agent → úložiště → dotaz → upozornění).
- Ověřování maskování PII a nepřítomnosti tajných údajů (skener využívající regulární výrazy/entropii).
Procesy a governance
- „Pokyny k logování“ v repozitáři; kontrola úrovní a obsahu zpráv při code review.
- „Provozní příručky“ – jak reagovat na typické vzorce chyb a jak provést korelaci.
- Vlastnictví dashboardů a upozornění (pohotovostní služba), pravidelná ladicí setkání zaměřená na snižování šumu.
Anti-patterny v logování
- „Zasypávání logy“ – nadměrné množství DEBUG/TRACE v produkci bez vzorkování.
- Prokládání víceřádkových výpisů zásobníku bez víceřádkového parseru (řešte je jako strukturovaná pole).
- Zapisování PII/tajných údajů, přístupových tokenů a kompletních datových záznamů bez filtrování.
- Chybějící korelační identifikátory a kontext; nemožnost propojit požadavky.
Praktický plán implementace
- Standard logů: JSON, UTC, povinná pole (čas, level, service, env, trace_id, message), mapování na ECS/OTel.
- Vytváření: knihovna loggeru s middlewarem, který přenáší
trace_idz HTTP hlaviček (např.traceparent). - Agent: DaemonSet (K8s) s Fluent Bit/Vector, parsování JSON, obohacení o metadata
kubernetes.*, maskování PII. - Přenos: OTLP/HTTP → zprostředkovatel zpráv (Kafka) s retencí 24–72 h; témata podle služby a úrovně.
- Zpracování: procesor streamů (Flink/KStreams) – obohacení, deduplikace, validace schématu, směrování do úložišť.
- Úložiště: hot index (7 dní) + cold objektové úložiště (90 dní) + dlouhodobé datové jezero (12 měsíců).
- Observabilita: dashboardy, upozornění na odvozené metriky, propojení s tracingem (zpětné odkazy).
- Governance: ILM, RBAC, audity, přehledy nákladů, pravidelné čištění a revize pravidel.
Ukázka strukturované události logu
Minimalistický příklad (NDJSON):
{ "timestamp":"2025-10-26T21:15:42.137Z", "level":"ERROR", "service":"checkout-api", "env":"prod", "version":"1.42.0", "trace_id":"f9f9a3f2e1a64ea2", "span_id":"9c1b7d0a3c1f4f8e", "correlation_id":"ord-8b2a4", "http":{"method":"POST","path":"/v1/orders","status_code":502,"latency_ms":842}, "user":{"id_hash":"caa1f8..."}, "error":{"type":"UpstreamError","message":"payments timeout","stack":"..."}, "message":"Order submission failed due to upstream timeout" }
Migrace z nestrukturovaných logů
- Zaveďte duální zápis (původní i strukturované logy) a testujte dotazy nad oběma formáty.
- Postupně přepisujte volání loggeru na šablony zpráv + pole; omezte parsování pomocí regulárních výrazů ve fázi příjmu dat.
- Vytvořte kompatibilní schéma a mapování (aliasy) pro staré klíče.
Měření efektivity logování
- Poměr signálu k šumu – poměr relevantních upozornění k jejich celkovému počtu.
- MTTD/MTTR – doba od vzniku chyby do její detekce/obnovení provozu, před zavedením standardu a po něm.
- Náklady na GB a na užitečný incident – řízení rozpočtu a dopad optimalizací (vzorkování, vrstvení).
Závěr: logy jako páteř observability
Systematické logování přináší prediktivní provoz, rychlou diagnostiku incidentů a lepší produktová rozhodnutí. Klíčové je strukturovat události, obohacovat je o korelační kontext, bezpečně a efektivně je přenášet a ukládat a vybudovat nad nimi analytiku, upozorňování a governance. Logy se tak stávají spolehlivou vrstvou, která propojuje metriky, tracing i bezpečnostní dohled do jednotného, auditovatelného a nákladově udržitelného ekosystému.
