Přeskočit obsah

Zásuvný modul Analyzátor protokolů

Proměňte editor ve schopnou dílnu na protokoly: zpracovávejte strukturované soubory protokolů přes upravitelné profily, přecházejte podle zpracovaných polí a časových razítek, slučujte několik zdrojů na jednu časovou osu, sledujte jediný požadavek napříč zdroji a analyzujte frekvence, percentily či nejčastější hodnoty — a to vše bez načtení surového textu do běžné karty editoru.

Kde to najdete

Modul přidává tři položky do nabídky Analyzátor protokolů:

  • Analyzátor protokolů ▸ Otevřít jako protokol… — otevře jediný soubor protokolu ve vyhrazeném okně Zobrazení protokolu.
  • Analyzátor protokolů ▸ Otevřít sloučené protokoly… — vyberte dva a více souborů, dejte každému vlastní profil a uvidíte je proložené na jedné časové ose.
  • Analyzátor protokolů ▸ Otevřít systémový protokol… (pouze Windows) — dotazuje se do protokolu událostí Windows týmž zobrazením, s filtry přenesenými do PowerShellového Get-WinEvent.

Stránka Předvolby ▸ Zásuvné moduly ▸ Analyzátor protokolů umožňuje nastavit výchozí štítky úrovní, záložní profil pro soubory, které žádnému globu neodpovídají, práh »upozornit před zpracováním souborů nad N MB«, výchozí režim filtru a interval dotazování při sledování konce — jediný knoflík pro časovač sledování souboru i pro proud systémového protokolu (každý dotaz do protokolu událostí Windows spouští proces PowerShellu, takže náročné zdroje jej mohou chtít pomalejší).

Velké soubory se zpracovávají ve vlákně na pozadí s živým počitadlem záznamů a náročná souhrnná zpracování (šablony zpráv, anomálie) se také počítají na pozadí — stavový řádek ukazuje »Statistiky se analyzují na pozadí…« a panely se naplní, až budou připravené, takže okno zůstává po celou dobu svižné. U velmi rozsáhlých načtení se statistiky souhrnně počítají nad nejnovějšími 150 000 záznamy a časová osa vzorkuje celý rozsah.

Zobrazení protokolu jednoho souboru

Otevření protokolu zobrazí vyhrazené okno Zobrazení protokolu. Zrcadlí ergonomii vlastních tabulkových oken editoru (jako je okno Porovnání souborů) a zůstává mimo lištu karet editoru.

Rozvržení

  • Lišta — štítky úrovní (TRACE…FATAL), režim filtru a řádek filtru, Další / Předchozí chyba (F8 / Shift+F8), Přejít na čas (Ctrl+G).
  • Pruh časové osy nahoře — objem událostí rozdělený do časových přihrádek, obarvený podle úrovně. Tažením rozsahu filtrujete podle času; kliknutím na sloupec skočíte tabulkou na první záznam v dané přihrádce nebo po ní.
  • Tabulka uprostřed — Čas / Úroveň / Zdroj / Zpráva, virtualizovaná, takže se posouvá plynule i u statisíců záznamů.
  • Panel s podrobnostmi pod tabulkou — ukazuje úplnou surovou, případně víceřádkovou položku pro vybraný řádek.
  • Panel statistik ukotvený vpravo — počty podle úrovní, frekvence událostí, výběr percentilů (p50/p95/p99 nad libovolným číselným polem, výchozí bytes), rozložení tříd stavů HTTP (1xx…5xx, skryté, není-li přítomné pole status) a tabulka nejčastějších hodnot nad libovolným polem (výchozí url, omezená na 25 řádků).

Tabulka záznamů a panel s podrobnostmi používají písmo editoru z Předvolby ▸ Obecné — tentýž řez a velikost jako běžná karta editoru, takže se časová razítka a úrovně srovnají sloupec po sloupci. Změna tohoto nastavení se uplatní i na již otevřená zobrazení protokolů, bez nutnosti znovu je otevírat. Totéž platí pro sloučené zobrazení, jeho panely vedle sebe i pro sekvenční diagram. Lišta, řádek filtru a panel statistik si ponechávají písmo rozhraní: jsou to ovládací prvky, nikoli obsah protokolu.

Režimy filtru

Řádek filtru na liště přijímá pět různých výrazů; režim zvolte v rozbalovacím poli nalevo od něj:

Režim Čemu odpovídá
Prostý Podřetězec bez ohledu na velikost písmen proti surovému řádku.
Slova Tokeny oddělené bílými znaky; každý token se musí někde v řádku objevit, v libovolném pořadí. phpinfo GET odpovídá řádku obsahujícímu phpinfo i GET.
Zástupné znaky Glob s * a ? proti surovému řádku, bez ohledu na velikost písmen.
Regulární výraz Prostý vzor QRegularExpression, ve výchozím stavu bez ohledu na velikost písmen.
Dotaz Strukturovaná gramatika s predikáty na pole, úroveň a čas plus AND/OR/NOT a závorky.

Příklady pro režim Dotaz:

level>=WARN
status:500 AND method:POST
message~/timeout|refused/ AND @time in [09:00..09:05]
NOT (source:nginx OR source:apache)
level>=ERROR OR (status:5\d\d AND method:POST)

Řádek filtru psaní zpožďuje o 200 ms, aby tabulka nefiltrovala znovu při každém stisku klávesy; stisk Enteru nebo ztráta zaměření jej uplatní ihned a vymazání řádku se rovněž uplatní ihned. Když se výraz se zástupnými znaky, regulární výraz či dotaz nepodaří přeložit, řádek zčervená a nápověda ukáže diagnostiku — proxy ponechá na obrazovce předchozí platný filtr, aby tabulka během psaní nezbělala.

  • F8 / Shift+F8 — další / předchozí záznam s chybou nebo fatální chybou.
  • Ctrl+G — přejít na konkrétní čas (UTC, s kalendářem).
  • Kliknutím na sloupec časové osy skočíte na první záznam v dané přihrádce.

Tyto tři kombinace může uživatel přemapovat v Mapování klávesových zkratek (kategorie Analyzátor protokolů); otevřená zobrazení protokolů přemapování uplatní ihned a nápovědy lišty ukazují aktuální kombinaci.

Živé zpracování a jeho zrušení

Velké soubory začnou zobrazovat záznamy během desítek milisekund; zpracování pokračuje na pozadí a tabulka roste, jak záznamy přicházejí. Filtrování, posouvání i F8 fungují, zatímco zpracování ještě běží. Zavření okna proces na pozadí bez otálení zastaví.

Sloučené zobrazení protokolů

Analyzátor protokolů ▸ Otevřít sloučené protokoly… umožňuje zkoumat problém, který se táhne přes několik zdrojů — protokol klienta plus protokol serveru, protokol aplikace plus systémový žurnál, webový přístupový plus chybový a tak dál.

Výběr profilu pro každý soubor

Po zvolení dvou a více souborů uvidíte malé okno s jedním řádkem na soubor a rozbalovacím polem profilu na řádek. Pole je předvolené podle porovnání názvu souboru s globy názvů u každého profilu (bez ohledu na velikost písmen). U typického nasazení nginxu si access.log sám zvolí nginx — access log (default combined) a error.log si zvolí nginx — error log. Kterýkoli řádek můžete před kliknutím na OK ručně přebít.

Rozvržení

  • Lišta — štítky úrovní, řádek filtru s rozbalovacím polem režimu, ovládání trasování (pole + Sledovat / Vymazat), přepínač Sekvenčního diagramu, přepínač Vedle sebe.
  • Pruh časové osy nahoře — skládaný histogram po zdrojích s jedním pruhem na zdroj, takže vidíte korelované nárazy vizuálně.
  • Banner trasování nad tabulkou — jantarový pruh zobrazený jen tehdy, je-li aktivní filtr trasování: Sleduje se <field> = <value> — N řádků napříč všemi zdroji.
  • Skládaná hlavní plocha — tři stránky přepínatelné z lišty:
    • Tabulka (výchozí): jeden řádek na sloučený záznam se sloupci Čas / Zdroj / Úroveň / Logger / Zpráva; popředí sloupce Zdroj má barvu pruhu daného zdroje, takže identitu zdroje přečtete jedním pohledem.
    • Sekvenční diagram — viz Sledovat trasování.
    • Panely vedle sebe — viz Vedle sebe.
  • Panel s podrobnostmi pod tabulkou.

Filtry, které se skládají

Ve sloučeném zobrazení běží roura filtrů v tomto pořadí a všechny se na sebe skládají:

  1. Viditelnost zdroje — zaškrtávací pole na levém okraji časové osy, jedno na pruh, vedle názvu a barvy zdroje. Nezaškrtnutý pruh si svůj řádek ponechá, ztlumený: musí, protože ono zaškrtávací pole je jedinou cestou zpět. Kliknutím pravým tlačítkem na okraj získáte Zobrazit pouze tento zdroj / Zobrazit všechny zdroje.
  2. Štítky úrovní — TRACE…FATAL.
  3. Sledovat trasování — viz níže.
  4. Textový filtr — Prostý / Slova / Zástupné znaky / Regulární výraz / Dotaz (tytéž režimy a chování jako v zobrazení jednoho souboru, uplatněné na sloučený proud).

To znamená, že můžete například udělat level>=ERROR AND status:500 napříč přístupovým i chybovým protokolem nginxu jediným výrazem a zároveň sledovat jediného klienta oběma — filtr trasování množinu zúží dál, aniž by rozbil filtry na úroveň, zdroj či text.

Sledovat trasování

  1. Zvolte korelační klíč v poli Trasování: na liště. Je předvyplněné obvyklou sadou (trace_id / request_id / session_id / correlation_id / span_id / xRequestId) a každým odlišným názvem pole skutečně přítomným v načtených záznamech. V případě potřeby napište vlastní název.
  2. Vyberte řádek v tabulce.
  3. Klikněte na Sledovat trasování — nebo klikněte na řádek pravým tlačítkem a zvolte Sledovat trasování: \<field>=\<value> pro kterýkoli obvyklý klíč, který záznam nese (jednorázová cesta, která krok s rozbalovacím polem nepotřebuje).

Tabulka se okamžitě zúží jen na záznamy sdílející hodnotu onoho klíče napříč všemi zdroji. Kliknutím na Vymazat trasování filtr odeberete.

Sekvenční diagram

Jakmile je aktivní filtr trasování a viditelné jsou právě 2–4 zdroje, zpřístupní se na liště přepínač Sekvenční diagram. Ten přepne hlavní plochu na diagram s pevnými pruhy:

  • Každý viditelný zdroj je svislým pruhem s popiskem nahoře a barevným vzorkem.
  • Jeden řádek na záznam, čas plyne shora dolů. Skutečné časové razítko je nalevo, abyste nepřišli o přesnost; řádky jsou dané pořadím (pevná výška), nikoli úměrné času, protože skutečné trasování má nárazy i dlouhé pauzy a časově úměrná osa by většinu obrazovky promarnila na pauzách.
  • Barevná tečka na pruhu vlastnícího zdroje plus nenápadná šedá šipka mezi po sobě jdoucími záznamy v různých pruzích — takže doslova vidíte, jak trasování poskakuje mezi systémy.
  • Štítek úrovně a text zprávy napravo.

Kliknutím na kterýkoli řádek diagramu posunete podkladovou tabulku na daný záznam. Vypnutím akce se vrátíte k tabulce.

U více než 4 zdrojů je diagram vypnutý a zůstává zobrazení tabulky.

Panely vedle sebe

Jsou-li viditelné právě dva zdroje, zpřístupní se na liště přepínač Vedle sebe. Ten rozdělí hlavní plochu na dva tabulkové panely — jeden na zdroj — s pozicemi posunu svázanými podle časového razítka: posuňte kterýkoli panel a druhý dojede k nejbližšímu záznamu v daném čase nebo po něm. Rozcházení hodin mezi servery se tak přirozeně projeví tím, že se panely od sebe vzdalují.

Přepínače Sekvenční diagram a Vedle sebe se vzájemně vylučují (zapnutím jednoho druhý zaklapne); oba se vrátí k zobrazení tabulky, jakmile se počet aktivních zdrojů dostane mimo jimi podporovaný rozsah.

Rotační sada je jeden pruh

Vybrat tři soubory z jedné rotované sady znamená vybrat jeden protokol, takže se načtou jako jeden pruh. Výběr ukazuje řádek na pruh se segmenty vypsanými pod ním, od nejstaršího, a pruh je pojmenován po svém nejnovějším souboru s počtem těch starších — MxAPILog.txt (+2).

Klikněte pravým tlačítkem na pruh v časové ose a získáte Zobrazit každý rotovaný soubor zvlášť a po rozdělení Sloučit rotované soubory do jednoho pruhu. Rozdělení je pouze novým rozčleněním toho, co už je v paměti, takže se nic nečte znovu — ale mění to, co znamená řádek, takže tabulka zahodí svůj výběr.

Zdroje musí uvádět srovnatelné časy

Sloučení umísťuje záznamy z několika zdrojů na jednu osu, což má smysl jen tehdy, mohou-li všechny uvést stejné množství údajů o datu. Syslog bez roku nelze proti datovanému protokolu umístit, aniž by se rok vymyslel, a protokol sestavení bez časových razítek nelze umístit vůbec. Jejich míchání se rovnou odmítne se zprávou uvádějící, které zdroje spadají do které skupiny. Slučte zdroje téhož druhu, nebo je otevřete zvlášť.

Obnovení

Sloučené zobrazení se vrací s relací. Ukládá se profil zvolený pro každý pruh a soubory, na které se pruh vyhodnotil; záznamy se znovu načítají na pozadí, takže se karta objeví ihned a naplní se postupně. Soubory, které zmizely, a smazané profily se přeskočí a zaznamenají do protokolu, místo aby se z nich při spuštění stala otázka.

Nativní systémové protokoly (Windows)

Analyzátor protokolů ▸ Otevřít systémový protokol… se dotazuje do protokolu událostí Windows, aniž by potřeboval soubor na disku. Okno se ptá na kanál (Aplikace / Systém / Zabezpečení / vlastní název), volitelnou minimální úroveň a strop počtu záznamů. Modul se obrátí na PowerShellové Get-WinEvent | ConvertTo-Json -Compress s přeneseným filtrem a pak zpracuje výstup NDJSON dodávaným profilem windows-event-log.

Akce se registruje, jen když hostitel skutečně má funkční zdroj protokolu událostí Windows — v Linuxu a na macOS opravdu chybí, místo aby byla zašedlá.

Zdroje sjednoceného protokolu macOS a linuxového journald jsou plánované a zapadnou za totéž vnitřní rozhraní, takže jejich příchod nepřinese žádné změny rozhraní.

Profily

Engine nemá žádné vestavěné, zvlášť ošetřené parsery. Každý podporovaný formát — Apache, nginx, syslog, JSON Lines, logfmt, CSV, protokol událostí Windows — je soubor JSON LogProfile dodávaný v adresáři log-profiles/ aplikace. Uživatelské profily bydlí ve složce log-profiles/ uživatelského adresáře s konfigurací a přebíjejí dodávané podle id.

Každý profil popisuje:

  • model řádku — regex, json, logfmt, csv nebo delimited.
  • časové razítko — které pole, přijímané formáty ve stylu strftime, časové pásmo zdroje, jednotky epochy.
  • úroveň — které pole plus mapování surových tokenů na kanonický výčet Trace / Debug / Info / Warn / Error / Fatal.
  • pokračování — jak se následující řádky lepí k aktuálnímu záznamu (z výpisu zásobníku v Javě se stane jedna položka, nikoli 30).
  • odvozená pole — další pole počítaná dílčím vzorem nad stávajícím polem. Dodávané profily apache a nginx to používají k tomu, aby zpřístupnily jednotné pole client_ip, takže Sledovat trasování ve sloučeném zobrazení může korelovat webové přístupové a chybové události téhož klienta napříč oběma zdroji.
  • rotaci — které soubory tvoří jeden logický protokol a v jakém pořadí. Viz Rotace: popis sady souborů.

Tyto soubory nemusíte psát ručně: jejich editor — se sběračem polí, aliasy ve stylu groku a živým testerem časových razítek — je popsán v části Úprava profilů.

Časy se zobrazují s přesností, jakou protokol uvádí

Ne každý protokol uvádí úplné datum. Syslog podle RFC 3164 dává měsíc, den a čas, ale žádný rok; některé vestavěné a interní protokoly dávají jen denní čas; výstup sestavení nedává vůbec nic.

Sloupec Čas ukazuje přesně to, co řádek uvedl — 13:36:55, Oct 10 14:32:52, nebo úplné časové razítko s UTC — a mezeru nikdy nezaplní odhadem. Totéž platí pro export do TSV i pro náhled v editoru profilů, takže vymyšlený rok nemůže aplikaci opustit a být dál mylně považován za skutečný.

Řazení, časová osa i statistiky uvnitř takového souboru fungují dál: chybějící části se vnitřně ukotví, aby záznamy zůstaly navzájem srovnatelné. Jen se nikdy nedostanou na povrch.

Úprava profilů

Analyzátor protokolů ▸ Upravit profil… vypíše každý profil s odznakem Vestavěný nebo Vlastní. Vybráním se profil načte.

Vestavěné profily jsou jen ke čtení, stejně jako vestavěné motivy: formulář se zobrazí, ale je vypnutý, a cestou ke změně je Klonovat. Klon dostane volné id, takže kopie nemůže nikdy tiše zastínit profil, ze kterého vzešla. Nový začíná od nuly, Odstranit odebere některý z vašich a přepnutí pryč od neuložené práce se nejprve zeptá.

Když se importuje profil, jehož id odpovídá některému vestavěnému, uloží se pod volným id, místo aby jej nahradil — a editor řekne pod kterým.

Rotace: popis sady souborů

Rotovaný protokol je jeden logický proud rozříznutý do několika souborů. Profil říká, které soubory patří k sobě, pomocí dvou názvů — nic dalšího není potřeba, a protože je popis jen jeden, není si co odporovat.

Pole Význam
liveName Soubor, do kterého se právě zapisuje.
rotatedName Podoba, jakou mají starší soubory.
indexOrder Který konec číslování je nejnovější.
orderBy Odkud pořadí pochází. Téměř vždy name.

Zástupné symboly

Oba názvy je přijímají. Mimo ně je každý znak doslovný — . je tečka, nikoli »libovolný znak«, a * je hvězdička, nikoli zástupný znak.

Zástupný symbol Znamená
%LIVE% Soubor, který uživatel otevřel. Použijte jej, když profil nemůže název znát předem.
%N Číslo rotace. Čte se jako číslo, takže _10 se řadí až za _9, nikoli mezi _1 a _2.
%Y %y Rok, čtyřmístný nebo dvoumístný. Dvoumístné roky používají obvyklý zlom: 69–99 znamená 19xx, 00–68 znamená 20xx.
%m %b %B Měsíc jako číslo, zkratka (Jul) nebo celý (July).
%d %j Den v měsíci, nebo den v roce.
%H %M %S Hodina, minuta, vteřina — pro schémata rotující víc než jednou denně.
%% Doslovný znak procenta.

Jsou to tytéž pole strftime, jaké používají formáty časových razítek profilu, takže není třeba se učit druhou sadu.

Přípona komprese (.gz, .zip, .bz2, .xz) se ošetří automaticky a nesmí se v žádném z názvů objevit: každé schéma ji připojuje jako poslední, až za tím, co vzor popisuje.

Tři stavy liveName

Hodnota Použijte, když
%LIVE% Univerzální profil, který název znát nemůže — sada se ukotví k tomu souboru, který byl otevřen.
Doslovný název, například access.log Profil je psán pro jednu aplikaci, jejíž živý soubor má vždy tento název.
Prázdné Žádný nečíslovaný živý soubor neexistuje: každý soubor je číslovaný nebo datovaný. Takto pracují IIS a java.util.logging.

Rozpracované příklady

Schéma liveName rotatedName
logrotate %LIVE% %LIVE%.%N
logrotate s dateext %LIVE% %LIVE%-%Y%m%d
Apache / nginx access.log access.log.%N
IIS (prázdné) u_ex%y%m%d.log
log4j2 / logback, výchozí rotace %LIVE% app-%Y-%m-%d-%N.log
Hodinová rotace %LIVE% app-%Y-%m-%d-%H.log
java.util.logging (prázdné) java%N.log

Jak se rozhoduje o pořadí

S orderBy: name — což je výchozí — rozhoduje nejprve datum v názvu, číslo rozhoduje shodu v rámci jednoho data a soubor bez čísla je ten živý, a tedy nejnovější. indexOrder říká, kterým směrem čísla běží: higher-is-older pro logrotate a spdlog, higher-is-newer pro Serilog, Boost.Log a cokoli, co počítá vzhůru, jak jde čas. Samotný název ty dva od sebe rozeznat nedokáže, proto to musí říct profil.

Ostatní hodnoty orderBy existují pro sady, jejichž číslům se nedá věřit. Cyklická rotace navždy opakovaně používá tutéž hrstku čísel, takže číslo je přihrádka, nikoli stáří; first-record-time místo toho čte první časové razítko každého souboru a mtime se vrací k souborovému systému.

Je-li zvoleno name a názvy nakonec nenesou ani datum, ani číslo, propadne se pořadí na první záznam, pak na mtime a pak na prostý název — a stavový řádek řekne na které, protože mtime přepíše kopírování, rozbalení, obnovení zálohy nebo přepnutí větve.

Z data v názvu souboru se nikdy nestane časové razítko záznamu

Data vyčtená z názvů souborů se používají k jedinému účelu: k seřazení segmentů. Záznamy berou svá časová razítka vždy z řádku, ze kterého byly zpracovány. Soubor s názvem access.log-20260730 pořád obsahuje záznamy z těch časů, které uvádějí jeho vlastní řádky.

Vzory, které se odmítají

Vzor se dvěma %N, nebo s %N přímo u datového pole, se při načtení profilu odmítne a rotace se pro něj vypne, s důvodem v diagnostice. app_%N%Y%m%d.log proti app_1220260730.log lze číst několika způsoby a tiché vybrání jednoho z nich by sadu seřadilo špatně, aniž by to na obrazovce cokoli vysvětlovalo. Vložte mezi ně jakýkoli doslovný znak — každé schéma ze skutečného světa to už dělá.

Editor profilů oba názvy ověřuje během psaní, takže se odmítnutý vzor objeví tam, nikoli až při otevírání.

Rozdělení podle běhu aplikace

Běh je jeden život aplikace od startu do konce a není totéž co soubor: rotace podle velikosti rozřízne běh do několika souborů a protokol, který rotuje jen podle velikosti, může obsahovat několik běhů v jednom souboru.

Pokud protokol při startu vypíše řádek — Volluto logging system started…, Begin file log, hlavičku frameworku — vložte regulární výraz, který mu odpovídá, do runStartMarker profilu. Kliknutí pravým tlačítkem na pruh v časové ose pak nabídne Rozdělit podle běhu aplikace a každý běh se stane vlastním pruhem. Položka se objeví, jen když záznamy skutečně obsahují víc než jeden běh.

Bez značky lze hranice pouze odhadnout z mezer v čase, a tento odhad je záměrně ve výchozím stavu vypnutý. Běh je pojmem aplikačních protokolů; nginx, apache, syslog a protokoly kontejnerů jsou nepřetržité služby, které běhy nemají vůbec, a tichá noc by se jinak četla jako stovky restartů. Tam, kde se odhad používá, přizpůsobuje se vlastnímu rytmu protokolu a zahodí se úplně, pokud vytvoří běhy příliš krátké na to, aby byly skutečné.

Čas běžící uvnitř zdroje pozpátku se vždy považuje za hranici a vždy se ohlásí — znamená to buď restart, nebo segmenty poskládané ve špatném pořadí, a obojí stojí za to vědět.

Motivy

Barvy podle úrovní pocházejí z motivu — modul registruje kategorii palety na každou kanonickou úroveň, Editor motivů je zpřístupňuje a kterýkoli motiv je může přebít. Přepnutí motivu aktualizuje sloupec úrovně, pruh časové osy, panel statistik i sekvenční diagram naráz.

Viz také

  • Porovnat / diff — okno Porovnání souborů, podle kterého jsou okna Analyzátoru protokolů modelována.
  • Protokolování a diagnostika — vlastní soubor protokolu editoru (odlišný od pohledu Analyzátoru protokolů na libovolné formáty protokolů).