Gå till innehållet

Insticksmodulen Logganalys

Gör redigeraren till en kapabel arbetsbänk för loggar: tolka strukturerade loggfiler genom redigerbara profiler, navigera efter tolkade fält och tidsstämplar, slå ihop flera källor på en enda tidslinje, följ en enskild begäran genom flera källor, och analysera frekvenser, percentiler och de vanligaste värdena — allt utan att läsa in den råa texten i en vanlig redigerarflik.

Var du hittar den

Insticksmodulen lägger till tre poster i menyn Logganalys:

  • Logganalys ▸ Öppna som logg… — öppnar en enskild loggfil i ett särskilt fönster Loggvy.
  • Logganalys ▸ Öppna sammanslagna loggar… — välj två eller fler filer, ge var och en sin egen profil, och se dem invävda på en enda tidslinje.
  • Logganalys ▸ Öppna systemloggen… (endast Windows) — frågar Windows händelselogg genom samma vy, med filtren nedskjutna till PowerShells Get-WinEvent.

På en sida Inställningar ▸ Insticksmoduler ▸ Logganalys ställer du in de förvalda nivåmarkörerna, reservprofilen för filer som inte matchar något globmönster, tröskeln «varna innan filer över N MB tolkas», det förvalda filterläget, och avfrågningsintervallet för att följa slutet — ett reglage för både filslutstimern och strömmen från systemloggen (varje avfrågning av Windows händelselogg startar en PowerShell-process, så tunga källor kan vilja ha det långsammare).

Stora filer tolkas på en bakgrundstråd med en löpande posträknare, och de dyra aggregeringarna (meddelandemallar, avvikelser) beräknas också i bakgrunden — statusraden visar «Analyserar statistik i bakgrunden…» och panelerna fylls i när de är klara, så att fönstret förblir responsivt hela tiden. Vid mycket stora inläsningar aggregerar statistiken över de nyaste 150 000 posterna och tidslinjen samplar hela spannet.

Loggvy för en enskild fil

Att öppna en logg visar det särskilda fönstret Loggvy. Det speglar ergonomin i redigerarens egna tabellbaserade fönster (som jämförelsefönstret) och håller sig utanför redigerarens flikrad.

Layout

  • Verktygsfält — nivåmarkörer (TRACE…FATAL), filterläge + filterrad, Nästa / Föregående fel (F8 / Shift+F8), Gå till tidpunkt (Ctrl+G).
  • Tidslinjeremsa högst upp — händelsevolym grupperad över tid, färgad efter nivå. Dra ett intervall för att filtrera efter tid; klicka på en stapel för att föra tabellen till den första posten vid eller efter det intervallet.
  • Tabell i mitten — Tid / Nivå / Källa / Meddelande, virtualiserad så att den rullar mjukt även vid hundratusentals poster.
  • Detaljruta under tabellen — visar hela den råa posten över flera rader för den markerade raden.
  • Statistikpanel dockad till höger — antal per nivå, händelsefrekvens, percentilväljare (p50/p95/p99 över valfritt numeriskt fält, som standard bytes), fördelning av HTTP-statusklasser (1xx…5xx, dold när inget fält status finns), och en tabell över de vanligaste värdena i valfritt fält (som standard url, begränsad till 25 rader).

Posttabellen och detaljrutan använder redigerarens typsnitt från Inställningar ▸ Allmänt — samma snitt och storlek som en vanlig redigerarflik, så att tidsstämplar och nivåer ligger i linje kolumn för kolumn. Att ändra den inställningen gäller loggvyer som redan är öppna, utan att de behöver öppnas om. Detsamma gäller den sammanslagna vyn, dess rutor sida vid sida och sekvensdiagrammet. Verktygsfältet, filterraden och statistikpanelen behåller gränssnittets typsnitt: de är ram, inte logginnehåll.

Filterlägen

Filterraden i verktygsfältet godtar fem olika uttryck; välj läget från kombinationsrutan till vänster om den:

Läge Vad det matchar
Enkel Delsträng oberoende av skiftläge mot den råa raden.
Ord Symboler delade vid blanksteg; varje symbol måste förekomma någonstans i raden, i valfri ordning. phpinfo GET matchar en rad som innehåller både phpinfo och GET.
Jokertecken Globmönster med * och ? mot den råa raden, oberoende av skiftläge.
Reguljärt uttryck Vanligt QRegularExpression-mönster, som standard oberoende av skiftläge.
Fråga Strukturerad grammatik med predikat för fält, nivå och tid plus AND/OR/NOT och parenteser.

Exempel för läget Fråga:

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)

Filterraden dämpar skrivandet med 200 ms så att tabellen inte filtrerar om vid varje tangenttryckning; att trycka på Enter eller tappa fokus tillämpar omedelbart, och att tömma raden tillämpar också omedelbart. När ett uttryck med jokertecken, ett reguljärt uttryck eller en fråga inte kompilerar blir raden röd och verktygstipset visar diagnostiken — proxyn håller kvar det föregående giltiga filtret på skärmen så att tabellen inte tömms medan du skriver.

  • F8 / Shift+F8 — nästa / föregående post med fel eller ödesdigert fel.
  • Ctrl+G — gå till en viss tidpunkt (UTC, kalenderfönster).
  • Klicka på en stapel i tidslinjen för att hoppa till den första posten i det intervallet.

De här tre kombinationerna kan tilldelas om av användaren i Tilldela kortkommandon (kategorin Logganalys); öppna loggvyer tillämpar en omtilldelning direkt och verktygsfältets verktygstips visar den aktuella kombinationen.

Löpande tolkning + avbrott

Stora filer börjar visa poster inom tiotals millisekunder; tolkningen fortsätter i bakgrunden och tabellen växer i takt med att posterna kommer. Filtrering, rullning och F8 fungerar medan tolkningen fortfarande pågår. Att stänga fönstret stoppar arbetaren omgående.

Sammanslagen loggvy

Logganalys ▸ Öppna sammanslagna loggar… låter dig undersöka ett problem som sträcker sig över flera källor — en klientlogg plus en serverlogg, en programlogg plus en systemjournal, webbåtkomst plus fel, och så vidare.

Profilväljaren per fil

När du valt två eller fler filer visas en liten dialogruta med en rad per fil och en profilkombinationsruta per rad. Rutan är förvald genom att filnamnet matchas mot varje profils filnamnsglobmönster (oberoende av skiftläge). För en typisk nginx-installation väljer access.log automatiskt nginx — access log (default combined) och error.log automatiskt nginx — error log. Åsidosätt valfri rad manuellt innan du klickar på OK.

Layout

  • Verktygsfält — nivåmarkörer, filterrad med lägeskombinationsruta, spårningskontroller (kombinationsruta + Följ / Rensa), växeln för sekvensdiagram, växeln Sida vid sida.
  • Tidslinjeremsa högst upp — staplat histogram per källa med en bana per källa, så att du visuellt kan se samvarierande skurar.
  • Spårningsbanner ovanför tabellen — en bärnstensfärgad remsa som bara visas när ett spårningsfilter är aktivt: Följer <field> = <value> — N rader i alla källor.
  • Staplat huvudområde — tre sidor som kan växlas från verktygsfältet:
    • Tabell (standard): en rad per sammanslagen post med kolumnerna Tid / Käl / Nivå / Loggare / Meddelande; förgrunden i kolumnen Käl är källans banfärg, så att du kan avläsa källans identitet i ett ögonkast.
    • Sekvensdiagram — se Följ spår.
    • Rutor sida vid sida — se Sida vid sida.
  • Detaljruta under tabellen.

Filter som samverkar

I den sammanslagna vyn körs filterkedjan i den här ordningen, och alla bygger på varandra:

  1. Källans synlighet — en kryssruta i tidslinjens vänstermarginal, en per bana, bredvid källans namn och färg. En bana utan kryss behåller sin rad, dämpad: det måste den, eftersom den kryssrutan är enda vägen tillbaka. Högerklicka på marginalen för Visa endast den här källan / Visa alla källor.
  2. Nivåmarkörer — TRACE…FATAL.
  3. Följ spårningen — se nedan.
  4. Textfilter — Enkelt / Ord / Jokertecken / Reguljärt uttryck / Fråga (samma lägen och samma beteende som i vyn för en enskild fil, tillämpade på den sammanslagna strömmen).

Det betyder att du kan göra till exempel level>=ERROR AND status:500 över både nginx åtkomst- och felloggar i ett enda uttryck, och följa en enskild klient genom båda — spårningsfiltret smalnar av mängden ytterligare utan att bryta filtren för nivå, källa eller text.

Följ spår

  1. Välj en korrelationsnyckel i verktygsfältets kombinationsruta Spårning:. Den är förladdad med den konventionella uppsättningen (trace_id / request_id / session_id / correlation_id / span_id / xRequestId) och med varje distinkt fältnamn som faktiskt finns i de inlästa posterna. Skriv ett eget namn om det behövs.
  2. Markera en rad i tabellen.
  3. Klicka på Följ spårningen — eller högerklicka på raden och välj Följ spår: \<field>=\<value> för valfri konventionell nyckel posten bär (en väg i ett steg som inte kräver kombinationsrutan).

Tabellen filtreras omedelbart till bara de poster som delar den nyckelns värde över alla källor. Klicka på Rensa spårningen för att ta bort filtret.

Sekvensdiagram

När ett spårningsfilter är aktivt och exakt 2–4 källor är synliga blir verktygsfältets växel Sekvensdiagram tillgänglig. Den växlar huvudområdet till ett diagram med fasta banor:

  • Varje synlig källa är en lodrät bana märkt högst upp med en färgruta.
  • En rad per post, med tiden som flödar uppifrån och ned. Den faktiska tidsstämpeln står till vänster så att du inte förlorar precision; raderna är rangbaserade (fast höjd) snarare än tidsproportionella, eftersom ett spår från verkligheten har skurar plus långa pauser och en tidsproportionell axel skulle slösa större delen av skärmen på pauserna.
  • En färgad punkt på den ägande källans bana, plus en diskret grå pil mellan följande poster på olika banor — så att du bokstavligen ser spåret studsa mellan system.
  • Nivåmarkör och meddelandetext till höger.

Klicka på valfri rad i diagrammet för att rulla den underliggande tabellen till den posten. Slå av åtgärden för att återgå till tabellen.

Vid fler än 4 källor är diagrammet avstängt och tabellvyn består.

Rutor sida vid sida

När exakt två källor är synliga blir verktygsfältets växel Sida vid sida tillgänglig. Den delar huvudområdet i två tabellrutor — en källa var — med rullningspositionerna länkade av tidsstämpeln: rulla endera rutan så följer den andra till den närmaste posten vid eller efter den tiden. Avdrift mellan serverklockor framträder naturligt genom att rutorna drar isär.

Växlarna Sekvensdiagram och Sida vid sida utesluter varandra (att slå på den ena slår av den andra); båda återgår till tabellvyn när antalet aktiva källor hamnar utanför deras stödda intervall.

Rotationsuppsättningar är en bana

Att välja tre filer ur en roterad uppsättning är att välja en logg, så de läses in som en bana. Väljaren visar en rad per bana med dess segment listade under, äldst först, och banan märks efter sin nyaste fil med ett antal äldre — MxAPILog.txt (+2).

Högerklicka på en bana i tidslinjen för Visa varje roterad fil för sig och, när den delats, Slå ihop roterade filer till ett spår. Delningen är en omfördelning av det som redan finns i minnet, så inget läses om — men den ändrar vad en rad betyder, så tabellen släpper sin markering.

Källor måste ange jämförbara tider

En sammanslagning placerar poster från flera källor på en axel, vilket bara betyder något om de alla kan ange lika mycket datum. En syslog utan år kan inte placeras mot en daterad logg utan att året uppfinns, och en byggogg utan tidsstämplar kan inte placeras alls. Att blanda dem avvisas på förhand, med ett meddelande som namnger vilka källor som hamnar i vilken grupp. Slå ihop källor av samma slag, eller öppna dem separat.

Återställning

En sammanslagen vy kommer tillbaka med sessionen. Det som sparas är den profil som valts för varje bana och de filer den banan löstes till; posterna läses om i bakgrunden, så att fliken visas genast och fylls i efterhand. Filer som försvunnit och profiler som tagits bort hoppas över och noteras i loggen i stället för att bli en fråga vid start.

Inhemska systemloggar (Windows)

Logganalys ▸ Öppna systemloggen… frågar Windows händelselogg utan att behöva en fil på disken. Dialogrutan ber om en kanal (Application / System / Security / ett eget namn), en valfri lägsta nivå, och ett posttak. Insticksmodulen anlitar PowerShells Get-WinEvent | ConvertTo-Json -Compress med filtret nedskjutet, och tolkar sedan NDJSON-utdatan genom den medföljande profilen windows-event-log.

Åtgärden registreras bara när värden faktiskt har en fungerande källa för Windows händelselogg — på Linux och macOS är den genuint frånvarande snarare än gråtonad.

Källor för macOS förenade logg och journald på Linux är planerade och passar in bakom samma interna gränssnitt, utan några gränssnittsändringar när de kommer.

Profiler

Motorn har inga inbyggda specialfallstolkar. Varje format som stöds — Apache, nginx, syslog, JSON Lines, logfmt, CSV, Windows händelselogg — är en JSON-fil LogProfile som levereras i programmets mapp log-profiles/. Användarprofiler bor i mappen log-profiles/ i användarkonfigurationsmappen och åsidosätter de medföljande efter id.

Varje profil beskriver:

  • radmodell — regex, json, logfmt, csv eller delimited.
  • tidsstämpel — vilket fält, godtagna strftime-liknande format, källans tidszon, epokens enheter.
  • nivå — vilket fält plus en koppling av råa symboler till den kanoniska uppräkningen Trace / Debug / Info / Warn / Error / Fatal.
  • fortsättning — hur följande rader klistras till den aktuella posten (en Java-stackspårning blir en post, inte 30).
  • härledda fält — extra fält som beräknas av ett delmönster över ett befintligt fält. De medföljande profilerna för apache och nginx använder detta för att exponera ett enhetligt fält client_ip så att den sammanslagna vyns Följ spårningen kan korrelera händelser för webbåtkomst och fel för samma klient över båda källorna.
  • rotation — vilka filer som bildar en logisk logg, och i vilken ordning. Se Rotation: beskriva en uppsättning filer.

Du behöver inte skriva de här filerna för hand: redigeraren för dem — med en fältgripare, alias i grok-stil och en löpande tidsstämpelprovare — beskrivs under Redigera profiler.

Tider visas med den precision loggen anger

Varje logg anger inte ett fullständigt datum. En syslog enligt RFC 3164 ger en månad, en dag och en tid men inget år; vissa inbyggda och interna loggar ger bara en tid på dygnet; byggutdata ger ingen alls.

Kolumnen Tid visar exakt vad raden sade — 13:36:55, Oct 10 14:32:52, eller en fullständig tidsstämpel med UTC — och fyller aldrig en lucka med en gissning. Detsamma gäller TSV-exporten och profilredigerarens förhandsgranskning, så att ett uppfunnet år inte kan lämna programmet och längre fram misstas för ett riktigt.

Ordning, tidslinje och statistik fortsätter fungera inuti en sådan fil: de saknade delarna förankras internt så att posterna förblir jämförbara med varandra. De når bara aldrig ytan.

Redigera profiler

Logganalys ▸ Redigera profil… listar varje profil med märket Inbyggd eller Egen. Att välja en läser in den.

Inbyggda profiler är skrivskyddade, på samma sätt som inbyggda teman: formuläret visas men är avstängt, och Duplicera är sättet att ändra en. En dubblett tar ett ledigt id, så att en kopia aldrig kan skugga den profil den kom från. Ny börjar från grunden, Ta bort tar bort en av dina egna, och att lämna osparat arbete frågar först.

När en profil importeras vars id stämmer med en inbyggd lagras den under ett ledigt id i stället för att ersätta den — och redigeraren säger vilket.

Rotation: beskriva en uppsättning filer

En roterad logg är en logisk ström klippt i flera filer. En profil säger vilka filer som hör ihop med två namn — inget mer behövs, och eftersom det bara finns en beskrivning finns det inget som kan motsäga sig självt.

Fält Betydelse
liveName Den fil som skrivs till just nu.
rotatedName Den form de äldre filerna tar.
indexOrder Vilken ände av numreringen som är nyast.
orderBy Var ordningen kommer ifrån. Nästan alltid name.

Platshållare

Båda namnen godtar dessa. Utanför dem är varje tecken bokstavligt — . är en punkt, inte «vilket tecken som helst», och * är en asterisk, inte ett jokertecken.

Platshållare Betyder
%LIVE% Den fil användaren öppnade. Använd den när profilen inte kan känna namnet i förväg.
%N Rotationsnumret. Läses som ett tal, så _10 sorteras efter _9 snarare än mellan _1 och _2.
%Y %y År, fyra eller två siffror. Tvåsiffriga år använder den vanliga vändpunkten: 69–99 betyder 19xx, 00–68 betyder 20xx.
%m %b %B Månad som tal, som förkortning (Jul) eller fullt ut (July).
%d %j Dag i månaden, eller dag på året.
%H %M %S Timme, minut, sekund — för scheman som roterar mer än en gång om dagen.
%% Ett bokstavligt procenttecken.

Det är samma strftime-fält som profilens tidsstämpelformat använder, så det finns ingen andra uppsättning att lära sig.

Ett komprimeringstillägg (.gz, .zip, .bz2, .xz) hanteras automatiskt och får inte förekomma i något av namnen: varje schema lägger till det sist, efter vad mönstret än beskriver.

De tre tillstånden hos liveName

Värde Använd när
%LIVE% En allmän profil som inte kan känna namnet — uppsättningen förankras vid den fil som öppnades.
Ett bokstavligt namn, t.ex. access.log Profilen är skriven för ett program vars aktiva fil alltid har det namnet.
Tomt Det finns ingen onumrerad aktiv fil: varje fil är numrerad eller daterad. IIS och java.util.logging fungerar så.

Utarbetade exempel

Schema liveName rotatedName
logrotate %LIVE% %LIVE%.%N
logrotate med dateext %LIVE% %LIVE%-%Y%m%d
Apache / nginx access.log access.log.%N
IIS (tomt) u_ex%y%m%d.log
log4j2 / logback, standardrotation %LIVE% app-%Y-%m-%d-%N.log
Rotation varje timme %LIVE% app-%Y-%m-%d-%H.log
java.util.logging (tomt) java%N.log

Hur ordningen avgörs

Med orderBy: name — standardvärdet — avgör datumet i namnet först, numret bryter lika inom ett datum, och en fil utan nummer är den aktiva och därför nyast. indexOrder säger åt vilket håll numren löper: higher-is-older för logrotate och spdlog, higher-is-newer för Serilog, Boost.Log och allt som räknar uppåt efter hand. Namnet ensamt kan inte skilja de två åt, och därför måste profilen göra det.

De andra värdena för orderBy finns för uppsättningar vars nummer inte går att lita på. Cyklisk rotation återanvänder samma handfull nummer för evigt, så numret är en plats, inte en ålder; first-record-time läser i stället varje fils första tidsstämpel, och mtime faller tillbaka på filsystemet.

Om name väljs och namnen visar sig bära varken datum eller nummer faller ordningen igenom till den första posten, sedan till mtime, sedan till det nakna namnet — och statusraden säger vilken, eftersom mtime skrivs om av kopiering, uppackning, återställning av en säkerhetskopia eller utcheckning av en gren.

Ett datum i ett filnamn blir aldrig en posts tidsstämpel

Datum som läses ur filnamn används till en enda sak: att ordna segmenten. Poster tar alltid sina tidsstämplar från den rad de tolkats ur. En fil som heter access.log-20260730 innehåller ändå poster från de tider dess egna rader anger.

Mönster som avvisas

Ett mönster med två %N, eller med %N direkt intill ett datumfält, avvisas när profilen läses in och rotationen stängs av för den, med skälet i diagnostiken. app_%N%Y%m%d.log mot app_1220260730.log kan läsas på flera sätt, och att tyst välja ett skulle ordna uppsättningen fel utan något på skärmen som förklarar det. Sätt vilket bokstavligt tecken som helst mellan dem — varje verkligt schema gör redan det.

Profilredigeraren validerar båda namnen medan du skriver, så att ett avvisat mönster dyker upp där i stället för vid öppnandet.

Dela upp efter programkörning

En körning är ett programs liv från start till stopp, och det är inte samma sak som en fil: rotation efter storlek klipper en körning över flera filer, och en logg som bara roterar på storlek kan rymma flera körningar i en fil.

Skriver loggen ut en rad när den startar — Volluto logging system started…, Begin file log, en ramverksbanner — lägg då ett reguljärt uttryck som matchar den i profilens runStartMarker. Att högerklicka på en bana i tidslinjen erbjuder då Dela upp per programkörning, och varje körning blir en egen bana. Posten visas bara när posterna verkligen innehåller mer än en körning.

Utan en markör kan gränserna bara gissas ur luckor i tiden, och den gissningen är avstängd som standard med avsikt. En körning är ett begrepp i programloggar; nginx, apache, syslog och containerloggar är kontinuerliga tjänster helt utan körningar, och en stilla natt skulle annars läsas som hundratals omstarter. Där gissningen används anpassar den sig till loggens egen rytm och förkastas helt om den ger körningar som är för korta för att vara verkliga.

Tid som går baklänges inuti en källa behandlas alltid som en gräns och rapporteras alltid — det betyder antingen en omstart eller segment i fel ordning, och båda är värda att veta om.

Teman

Färgerna per nivå kommer från temat — insticksmodulen registrerar en palettkategori per kanonisk nivå, Temaredigeraren lyfter fram dem, och vilket tema som helst kan åsidosätta dem. Att byta tema uppdaterar nivåkolumnen, tidslinjeremsan, statistikpanelen och sekvensdiagrammet i takt.

Se även

  • Jämför / diff — det jämförelsefönster som Logganalysens fönster är modellerade efter.
  • Loggning och diagnostik — redigerarens egen loggfil (skild från Logganalysens vy över godtyckliga loggformat).