Monitorování Linuxových systémů

Proč je monitorování výkonu a logování v Linuxu klíčové

Monitorování výkonu a logování tvoří páteř provozní spolehlivosti Linuxových systémů. Umožňují včasné odhalení degradací, kapacitní plánování, analýzu incidentů i splnění regulatorních požadavků. V moderních prostředích – od bare-metal serverů přes virtualizaci až po kontejnery a Kubernetes – je cílem nejen sběr dat, ale především jejich korelace a automatizované reakce založené na měřitelných cílech (SLO).

Terminologie a cíle: SLI, SLO, SLA a „zlaté signály“

  • SLI (Service Level Indicator): metrický ukazatel kvality (například latence p95, chybovost).
  • SLO (Service Level Objective): cílová hodnota SLI (například p95 latence < 200 ms).
  • SLA (Service Level Agreement): smluvní závazek vůči zákazníkovi.
  • Zlaté signály: latence, propustnost, chybovost, saturace. Je vhodné je systematicky sledovat na aplikační i systémové úrovni.

Co a proč měřit: metriky systému a aplikací

  • CPU: vytížení na jádro, run queue, steal time ve virtualizaci, kontextové přepínání.
  • Paměť: využití, page cache, swap-in/out, memory pressure, události OOM (Out Of Memory).
  • Disk/IO: IOPS, latence čtení/zápisu, hloubka fronty, IO wait, přenosová rychlost.
  • Síť: propustnost, chybovost, drops, retransmise, latence, stav socketů.
  • Procesy: životní cyklus, nice/priority, cgroups limity a jejich využití.
  • Aplikace: doménové metriky (počet požadavků, chybové kódy, vnitřní buffery) a distribuované trasování (distributed tracing).

Základní nástroje příkazové řádky

  • top/htop/atop: průběžné sledování procesů, CPU, paměti, IO; atop uchovává historické záznamy.
  • ps, pidstat: detailní pohled na procesy a jejich spotřebu CPU/IO v čase.
  • vmstat, free: přehled paměťového subsystému, cache a swapu.
  • iostat, mpstat, nfsiostat: IO metriky disků, procesorů, NFS.
  • sar (sysstat): historické metriky CPU/IO/sítě pro trendování a zpětnou analýzu.
  • ss (náhrada netstat), ip -s, iftop, nload: síťová viditelnost, stav socketů, tokové špičky.
  • systemd-cgtop, systemd-cgls: přehled zátěže dle cgroups (užitečné u kontejnerů/Kubernetes).
  • Pressure Stall Information (PSI): indikátory tlaku na CPU, paměť a IO v /proc/pressure/* pro včasnou detekci saturace.

Pokročilé profilování: perf, ftrace a eBPF

  • perf: vzorkování na úrovni jádra i uživatelského prostoru, perf top pro online identifikaci hotspotů, perf record/report pro podrobnou analýzu.
  • ftrace/trace-cmd: nízkoúrovňové trasování funkcí jádra, měření latencí plánovače a blokového IO.
  • eBPF (bcc/bpftrace): bezpečné sondy v jádře bez psaní modulů; nástroje typu runqlat, biolatency, tcpconnect pomáhají odhalit úzká místa s minimální režijní zátěží.
  • Flamegraphy: vizualizace stack trace z perf a eBPF pro rychlou identifikaci největších spotřebičů CPU a zdrojů latence.

Observabilita jako systém: metriky, logy a trasy

  • Metriky: Prometheus (node_exporter, aplikační exportéry), Performance Co-Pilot (PCP), Telegraf → InfluxDB; vizualizace v Grafaně.
  • Logy: systemd-journald, rsyslog/syslog-ng, agregace do ELK/OpenSearch nebo Loki (s Promtail/Vector/Fluent Bit).
  • Tracing: OpenTelemetry SDK/Collector s backendy jako Jaeger nebo Tempo; korelace s metrikami a logy pomocí trace_id.

Logování v Linuxu: journald, syslog a strukturované logy

  • systemd-journald: binární úložiště s indexací, rate limiting, volitelná perzistence v /var/log/journal, podpora strukturovaných polí (například SYSLOG_IDENTIFIER, _PID).
  • journalctl: filtrování podle jednotek (-u), času (--since, --until), priority (-p), sledování výstupu (-f), export do JSON (-o json).
  • rsyslog/syslog-ng: směrování a forwarding logů přes TCP/TLS/RELP, filtry, parsování, šablony výstupu a integrace s externími úložišti.
  • Strukturované logy: preferujte JSON obsahující korrelační identifikátory (trace_id, span_id), což zjednodušuje analýzu a alerting.

Retence, rotace a řízení objemu logů

  • journald.conf: limity velikosti (například SystemMaxUse, RuntimeMaxUse) a rate limiting (RateLimitIntervalSec, RateLimitBurst).
  • logrotate: pravidelná rotace textových logů s možnostmi compress, delaycompress, copytruncate nebo create; navrhněte retenční politiku podle rizik a nákladů.
  • Filtrace a redakce: vyhýbejte se ukládání osobních identifikovatelných údajů a tajných dat; používejte maskování (hashování, tokenizaci) a kontrolu obsahu před odesláním do SIEM.

Agregace a centralizace logů

  • Forwarding: rsyslog s TLS/RELP do centrálního logserveru; zajistěte odolnost vůči výpadkům (diskové fronty, backpressure).
  • Pipeline: Fluent Bit, Vector, Logstash, Promtail s parsováním, obohacením (hostname, role, prostředí) a směrováním do více backendů.
  • Vyhledávání: OpenSearch/Elasticsearch (fulltextové vyhledávání, agregace), Loki (indexace podle štítků a časových značek), SIEM pro korelaci bezpečnostních událostí.

Bezpečnost a compliance logování

  • Integrita: podepisování logů, WORM úložiště, oddělení oprávnění pro zápis a čtení.
  • Audit: auditd pro sledování přístupu k citlivým zdrojům, mapování na regulatorní požadavky.
  • Šifrování: TLS při přenosu, šifrování na disku, bezpečné spravování kryptografických klíčů.
  • GDPR: minimalizace osobních údajů, dodržování retenčních lhůt, právo na výmaz a přehledné řízení přístupových oprávnění.

Monitoring kontejnerů a Kubernetes

  • Metriky: cgroups v2, cAdvisor, kube-state-metrics, exportéry pro runtime (containerd/CRI-O), korelace s pod/namespace/cluster štítky.
  • Logy: sidecar a daemonset agenti (Fluent Bit, Promtail) čtoucí z /var/log/containers nebo journald; obohacení o labels a pod.
  • Tracing: OpenTelemetry auto-instrumentace, korelace požadavků napříč mikroslužbami.

Praxe analýzy výkonu: od symptomu ke kořenové příčině

  1. Definujte symptom: například rostoucí latence služeb, zvýšená chybovost nebo snížená propustnost.
  2. Rozlište oblast problému: CPU vs. paměť vs. IO vs. síť; ověřte PSI a zlaté signály.
  3. Proveďte lokální testy: použijte iostat pro disk, ss -s pro síť, pidstat pro procesy, perf top pro identifikaci hotspotů.
  4. Korelujte s logy a trasami: identifikujte chybové kódy, timeouty a trace_id napříč vrstvami.
  5. Zúžte problém: izolujte pod/VM/hostitel; zvažte vliv cgroups limitů, NUMA topologii a pinning vláken.
  6. Ověřte hypotézu: proveďte krátkodobé změny QoS, throttling rebuildů, navýšení front nebo cache a sledujte dopad.

Alerting a uzavřené regulační smyčky

  • Pravidla: kombinujte prahové hodnoty s detekcí anomálií; používejte hodnoty p95/p99 místo průměrů.
  • Hlučnost: deduplikace, grouping, potlačení upozornění během údržby; definujte runbooky a auto-remediation.
  • Reakce: automatické škálování, restart degradovaných služeb, přesměrování provozu, úprava QoS.

Kapacitní plánování a predikce

Historické metriky z sar a Promethea spolu s statistickými a strojově učenými modely umožňují předvídat růst zatížení, plánovat upgrade CPU, RAM a disků či optimalizovat náklady. Sledujte sezónnost, vliv releasů a rebuild windows (například po výpadku disku).

Timekeeping, synchronizace a přesnost dat

Správné časové značky jsou zásadní. Preferujte chrony pro přesný NTP s disciplinovaným driftem. Nesoulad času zkomplikuje korelaci logů i tras, proto kontrolujte časové odchylky a monitorujte kvalitu NTP zdrojů.

Governance observability: standardy, tagování a katalog

  • Konvence pojmenování: jednotné labels (prostředí, region, role, služba, tým).
  • Katalog metrik a logů: popis významu, jednotek, odpovědností týmů a retenčních lhůt.
  • Testy pozorovatelnosti: syntetické sondy a chaos experimenty pro ověření detekce problémů a alertingu.

Optimalizace výkonu: běžné vzorce a nápravy

  • CPU saturace: omezte run queue pinningem kritických vláken, snižte závody o zámky (lock contention), zvažte použití HugePages pro databáze.
  • Paměťový tlak: sledujte workingset, upravte swappiness, minimalizujte nechtěný ballooning; analyzujte OOM logy.
  • Diskové latence: zkontrolujte IO scheduler, hloubku fronty, oddělte log/redo a data, přidejte NVMe cache.
  • Síťové ztráty: nastavte ring buffery, GRO/LRO, ověřte MTU a TSO, sledujte retransmise a policery.

Automatizace provozu: IaC pro observabilitu

Konfigurujte agenty a exportéry jako kód (Ansible, Terraform, Helm), validujte pravidla alertingu v CI, verzujte dashboardy. Zajistíte tak reprodukovatelnost, auditovatelnost a rychlý rollback v případě chyby.

Doporučené osvědčené postupy

  1. Definujte SLO vycházející z byznysových cílů a sledujte odpovídající SLI.
  2. Logujte strukturovaně a přidávejte korrelační identifikátory.
  3. Monitorujte PSI a p99 latence pro včasné zachycení saturace.
  4. Centralizujte data a korelujte metriky, logy a trasy na jednom místě.
  5. Automatizujte reakce pomocí předem schválených runbooků a guard-railů.
  6. Pravidelně testujte alerting, záložní scénáře a obnovu po incidentech.

Závěr: Od sběru dat k akci

Skutečná hodnota monitorování výkonu a logování v Linuxu spočívá v přeměně dat na rozhodnutí a akce. Kombinace kvalitních metrik, strukturovaných logů, tras a automatizace umožňuje předcházet incidentům, zkracovat MTTR a řídit kapacitu s jistotou. Organizace, které budují observabilitu jako produkt – se standardy, vlastníky a zpětnou vazbou – dosahují vyšší spolehlivosti i efektivity provozu.