Gå til indholdet

Loganalyse-udvidelsesmodulet

Gør editoren til et fuldgyldigt værksted for logfiler: fortolk strukturerede logfiler gennem profiler, du kan redigere, navigér efter fortolkede felter og tidsstempler, flet flere kilder sammen på én tidslinje, følg en enkelt forespørgsel på tværs af kilder, og analysér hastigheder, percentiler og de hyppigste værdier — alt sammen uden at indlæse den rå tekst i et almindeligt editorfaneblad.

Hvor du finder det

Udvidelsesmodulet tilføjer tre poster under menuen Loganalyse:

  • Loganalyse ▸ Åbn som log… — åbn en enkelt logfil i et særligt logvisningsvindue.
  • Loganalyse ▸ Åbn flettede logfiler… — vælg to eller flere filer, giv hver sin profil, og se dem flettet sammen på én tidslinje.
  • Loganalyse ▸ Åbn systemlog… (kun Windows) — forespørg Windows' hændelseslog gennem den samme visning, hvor filtrene sendes ned i PowerShells Get-WinEvent.

En side under Indstillinger ▸ Udvidelsesmoduler ▸ Loganalyse lader dig sætte standardniveauerne, reserveprofilen for filer, der ikke matcher et globmønster, grænsen for »advar, inden filer over N MB fortolkes«, standardfiltertilstanden og intervallet for at følge halen — én knap for både filhaletimeren og systemlogstrømmen (hver forespørgsel i Windows' hændelseslog starter en PowerShell-proces, så tunge kilder vil måske have det langsommere).

Store filer fortolkes i en baggrundstråd med en levende posttæller, og de dyre sammenlægninger (beskedskabeloner, afvigelser) beregnes også i baggrunden — statuslinjen viser »Analyserer statistik i baggrunden…«, og panelerne fyldes ud, når de er klar, så vinduet bliver ved med at svare hele vejen igennem. Ved meget store indlæsninger lægger statistikken de nyeste 150.000 poster sammen, og tidslinjen tager stikprøver over hele spændet.

Logvisning af en enkelt fil

Når du åbner en log, kommer det særlige logvisningsvindue frem. Det afspejler ergonomien i editorens egne tabelbaserede vinduer (som sammenligningsvinduet) og holder sig ude af editorens fanebladsrække.

Opbygning

  • Værktøjslinje — niveauknapper (TRACE…FATAL), filtertilstand og filterlinje, Næste / Forrige fejl (F8 / Shift+F8), Gå til tidspunkt (Ctrl+G).
  • Tidslinjestrimlen øverst — hændelsesmængden fordelt i tidsintervaller, farvet efter niveau. Træk hen over et område for at filtrere efter tid; klik på en søjle for at føre tabellen til den første post ved eller efter det interval.
  • Tabellen i midten — Tid / Niveau / Kilde / Besked, virtualiseret, så den ruller jævnt selv med hundredtusindvis af poster.
  • Detaljeruden under tabellen — viser hele den rå post over flere linjer for den valgte række.
  • Statistikpanelet dokket til højre — antal pr. niveau, hændelseshastighed, en percentilvælger (p50/p95/p99 over ethvert talfelt, som standard bytes), fordelingen af HTTP-statusklasser (1xx…5xx, skjult når der ikke findes et status-felt) og en tabel over de hyppigste værdier for ethvert felt (som standard url, med loft på 25 rækker).

Posttabellen og detaljeruden bruger editorskrifttypen fra Indstillinger ▸ Generelt — samme skriftsnit og størrelse som et almindeligt editorfaneblad, så tidsstempler og niveauer står pænt i kolonner. En ændring af den indstilling slår igennem i logvisninger, der allerede er åbne, uden at de skal åbnes igen. Det samme gælder den flettede visning, dens ruder side om side og sekvensdiagrammet. Værktøjslinjen, filterlinjen og statistikpanelet beholder brugerfladens skrifttype: de er ramme og ikke logindhold.

Filtertilstande

Filterlinjen på værktøjslinjen tager imod fem forskellige udtryk; vælg tilstanden i kombinationsfeltet til venstre for den:

Tilstand Hvad den matcher
Almindelig En delstreng uden forskel på store og små bogstaver mod den rå linje.
Ord Enheder adskilt af blanktegn; hver enhed skal optræde et sted i linjen, i vilkårlig rækkefølge. phpinfo GET matcher en linje, der indeholder både phpinfo og GET.
Jokertegn * og ? som globmønster mod den rå linje, uden forskel på store og små bogstaver.
Regex Et almindeligt QRegularExpression-mønster, uden forskel på store og små bogstaver som standard.
Forespørgsel En struktureret grammatik med prædikater for felt, niveau og tid plus AND/OR/NOT og parenteser.

Eksempler i tilstanden Forespørgsel:

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)

Filterlinjen venter 200 ms efter din indtastning, så tabellen ikke filtreres om ved hvert tastetryk; et tryk på Enter eller et tab af fokus anvender den med det samme, og hvis du rydder linjen, anvendes det også med det samme. Kan et udtryk med jokertegn, regex eller forespørgsel ikke kompileres, bliver linjen rød, og værktøjstippet viser fejlen — mellemleddet bliver ved med at vise det forrige gyldige filter, så tabellen ikke bliver tom, mens du skriver.

  • F8 / Shift+F8 — næste / forrige fejl- eller fatal-post.
  • Ctrl+G — gå til et bestemt tidspunkt (UTC, med en kalender).
  • Klik på en tidslinjesøjle for at springe til den første post i det interval.

De tre tastekombinationer kan brugeren selv ændre i Tildel genvejstaster (kategorien Loganalyse); åbne logvisninger anvender en ændring med det samme, og værktøjslinjens værktøjstip viser den nuværende kombination.

Levende fortolkning og afbrydelse

Store filer begynder at vise poster inden for få titusindedele af et sekund; fortolkningen fortsætter i baggrunden, og tabellen vokser, efterhånden som posterne kommer ind. Filtrering, rulning og F8 virker, mens fortolkningen stadig kører. Lukker du vinduet, standser arbejderen omgående.

Flettet logvisning

Loganalyse ▸ Åbn flettede logfiler… lader dig undersøge et problem, der strækker sig over flere kilder — en klientlog plus en serverlog, en programlog plus en systemjournal, en webadgangslog plus en fejllog og så videre.

Profilvælgeren pr. fil

Når du har valgt to eller flere filer, ser du et lille vindue med en række pr. fil og et profilkombinationsfelt pr. række. Kombinationsfeltet er forvalgt ved at matche filnavnet mod hver profils globmønstre for filnavne (uden forskel på store og små bogstaver). I en typisk nginx-opsætning vælger access.log automatisk nginx — access log (default combined), og error.log vælger automatisk nginx — error log. Ret enhver række manuelt, inden du klikker på OK.

Opbygning

  • Værktøjslinje — niveauknapper, filterlinje med tilstandskombinationsfelt, sporingselementer (kombinationsfelt plus Følg / Ryd), knappen for sekvensdiagram og knappen for side om side.
  • Tidslinjestrimlen øverst — et stablet histogram pr. kilde med én bane pr. kilde, så du visuelt kan se sammenhængende udbrud.
  • Sporbanneret over tabellen — en ravgul strimmel, der kun vises, når et sporfilter er aktivt: Følger <field> = <value> — N rækker på tværs af alle kilder.
  • Det stablede hovedområde — tre sider, du kan skifte mellem fra værktøjslinjen:
    • Tabel (standard): én række pr. flettet post med kolonnerne Tid / Kilde / Niveau / Logger / Besked; forgrunden i kolonnen Kilde har kildens banefarve, så du kan aflæse kildens identitet med ét blik.
    • Sekvensdiagram — se Følg spor.
    • Ruder side om side — se Side om side.
  • Detaljeruden under tabellen.

Filtre, der bygger oven på hinanden

I den flettede visning kører filterkæden i denne rækkefølge, og alle led bygger oven på hinanden:

  1. Kildernes synlighed — et afkrydsningsfelt i tidslinjens venstre margen, ét pr. bane, ved siden af kildens navn og farve. En bane uden flueben beholder sin række, nedtonet: det er den nødt til, for det afkrydsningsfelt er den eneste vej tilbage. Højreklik på margenen for Vis kun denne kilde / Vis alle kilder.
  2. Niveauknapper — TRACE…FATAL.
  3. Følg spor — se nedenfor.
  4. Tekstfilter — Almindelig / Ord / Jokertegn / Regex / Forespørgsel (samme tilstande og adfærd som i visningen af en enkelt fil, anvendt på den flettede strøm).

Det betyder, at du for eksempel kan skrive level>=ERROR AND status:500 på tværs af både nginx' adgangslog og fejllog i ét udtryk og følge en enkelt klient gennem begge — sporfilteret indsnævrer sættet yderligere uden at bryde filtrene for niveau, kilde og tekst.

Følg spor

  1. Vælg en korrelationsnøgle i værktøjslinjens kombinationsfelt Spor:. Det er fyldt op med det sædvanlige sæt (trace_id / request_id / session_id / correlation_id / span_id / xRequestId) og med ethvert særskilt feltnavn, der faktisk findes i de indlæste poster. Skriv et andet navn, hvis du har brug for det.
  2. Markér en række i tabellen.
  3. Klik på Følg spor — eller højreklik på rækken og vælg Følg spor: \<field>=\<value> for enhver af de sædvanlige nøgler, posten bærer (en vej i ét trin, der ikke kræver kombinationsfeltet).

Tabellen filtreres med det samme ned til netop de poster, der deler den nøgles værdi på tværs af alle kilder. Klik på Ryd spor for at fjerne filteret.

Sekvensdiagram

Når et sporfilter er aktivt, og der er præcis 2–4 synlige kilder, bliver værktøjslinjens knap Sekvensdiagram tilgængelig. Den skifter hovedområdet over til et diagram med faste baner:

  • Hver synlig kilde er en lodret bane med en farveprøve og en mærkat øverst.
  • Én række pr. post med tiden løbende oppefra og ned. Det faktiske tidsstempel står til venstre, så du ikke mister præcision; rækkerne er ordnet efter rang (fast højde) i stedet for efter tid, fordi et virkeligt spor har udbrud og lange pauser, og en tidsproportional akse ville spilde det meste af skærmen på pauserne.
  • En farvet prik på den bane, posten tilhører, plus en diskret grå pil mellem efterfølgende poster på forskellige baner — så du bogstavelig talt kan se sporet hoppe mellem systemerne.
  • Niveauknap og beskedtekst til højre.

Klik på en vilkårlig række i diagrammet for at rulle den underliggende tabel hen til den post. Slå handlingen fra igen for at komme tilbage til tabellen.

Ved mere end 4 kilder er diagrammet slået fra, og tabelvisningen bliver stående.

Ruder side om side

Når der er præcis to synlige kilder, bliver værktøjslinjens knap Side om side tilgængelig. Den deler hovedområdet i to tabelruder — én kilde i hver — med rullepositionerne knyttet sammen efter tidsstempel: rul i den ene rude, og den anden følger med til den nærmeste post ved eller efter det tidspunkt. Afdrift mellem serverure viser sig helt af sig selv ved, at ruderne trækker fra hinanden.

Knapperne for sekvensdiagram og side om side udelukker hinanden (slår du den ene til, slår den anden fra); begge vender tilbage til tabelvisningen, når antallet af aktive kilder falder uden for det, de understøtter.

Et rotationssæt er én bane

At vælge tre filer ud af ét roteret sæt er at vælge én log, så de indlæses som én bane. Vælgeren viser en række pr. bane med dens segmenter opregnet nedenunder, ældst først, og banen navngives efter sin nyeste fil med et antal af de ældre — MxAPILog.txt (+2).

Højreklik på en bane i tidslinjen for Vis hver roteret fil for sig og, når den er opdelt, Flet roterede filer til én bane. Opdelingen er en ny opdeling af det, der allerede er i hukommelsen, så intet læses igen — men den ændrer, hvad en række betyder, så tabellen opgiver sin markering.

Kilder skal angive sammenlignelige tider

En fletning placerer poster fra flere kilder på én akse, og det betyder kun noget, hvis de alle kan angive lige meget dato. En syslog uden år kan ikke placeres i forhold til en dateret log uden at opfinde året, og en byggelog helt uden tidsstempler kan slet ikke placeres. At blande dem afvises på forhånd med en besked, der siger, hvilke kilder der hører til hvilken gruppe. Flet kilder af samme slags, eller åbn dem hver for sig.

Gendannelse

En flettet visning kommer tilbage med sessionen. Det, der gemmes, er den profil, der er valgt til hver bane, og de filer, den bane endte med; posterne læses igen i baggrunden, så fanebladet kommer frem med det samme og fyldes ud. Filer, der er forsvundet, og profiler, der er slettet, springes over og noteres i loggen i stedet for at blive til et spørgsmål ved opstart.

Systemets egne logfiler (Windows)

Loganalyse ▸ Åbn systemlog… forespørger Windows' hændelseslog uden at der skal være en fil på disken. Vinduet spørger om en kanal (Application / System / Security / et selvvalgt navn), et valgfrit mindste niveau og et loft over antallet af poster. Udvidelsesmodulet kalder PowerShells Get-WinEvent | ConvertTo-Json -Compress med filteret sendt ned og fortolker derefter NDJSON-outputtet gennem den medleverede profil windows-event-log.

Handlingen registreres kun, når værten faktisk har en fungerende kilde til Windows' hændelseslog — den er reelt fraværende på Linux og macOS i stedet for nedtonet.

Kilder til macOS' forenede log og Linux' journald er planlagt og falder på plads bag den samme interne grænseflade uden ændringer i brugerfladen, når de kommer.

Profiler

Motoren har ingen indbyggede særtilfælde blandt fortolkerne. Hvert understøttet format — Apache, nginx, syslog, JSON Lines, logfmt, CSV, Windows' hændelseslog — er en JSON-fil med en LogProfile, der leveres i programmets log-profiles/-mappe. Brugerprofiler ligger i mappen log-profiles/ i brugerens konfigurationsmappe og tilsidesætter de medleverede efter id.

Hver profil beskriver:

  • linjemodel — regex, json, logfmt, csv eller delimited.
  • tidsstempel — hvilket felt, hvilke strftime-lignende formater der tages imod, kildens tidszone og enhederne for epoketid.
  • niveau — hvilket felt plus en oversættelse af rå enheder til den kanoniske enumeration Trace / Debug / Info / Warn / Error / Fatal.
  • fortsættelse — hvordan følgende linjer limes sammen med den aktuelle post (Java-kaldstakspor bliver til én post og ikke 30).
  • afledte felter — ekstra felter, der beregnes af et undermønster over et eksisterende felt. De medleverede apache- og nginx-profiler bruger dette til at blotlægge et ensartet client_ip-felt, så den flettede visnings Følg spor kan sammenkæde webadgangs- og fejlhændelser for den samme klient på tværs af begge kilder.
  • rotation — hvilke filer der udgør én logisk log, og i hvilken rækkefølge. Se Rotation: at beskrive et sæt filer.

Du behøver ikke at skrive disse filer i hånden: editoren til dem — med en feltgriber, grok-lignende aliasser og en levende tidsstempelprøve — er beskrevet under At redigere profiler.

Tider vises med den præcision, loggen angiver

Ikke enhver log angiver en fuld dato. RFC 3164-syslog giver en måned, en dag og et klokkeslæt, men intet år; nogle indlejrede og hjemmelavede logfiler giver kun et klokkeslæt; byggeoutput giver slet ingenting.

Tidskolonnen viser præcis det, linjen sagde — 13:36:55, Oct 10 14:32:52 eller et fuldt tidsstempel med UTC — og fylder aldrig et hul ud med et gæt. Det samme gælder TSV-eksporten og profileditorens forhåndsvisning, så et opfundet år ikke kan forlade programmet og længere nede ad vejen blive forvekslet med et rigtigt.

Rækkefølgen, tidslinjen og statistikken bliver ved med at virke inde i en sådan fil: de manglende dele forankres internt, så posterne bliver ved med at kunne sammenlignes med hinanden. De kommer bare aldrig til syne.

At redigere profiler

Loganalyse ▸ Redigér profil… opregner hver profil med et mærke for Indbygget eller Brugerdefineret. Vælger du en, indlæses den.

Indbyggede profiler er skrivebeskyttede, ligesom indbyggede temaer er det: formularen vises, men er slået fra, og Klon er vejen til at ændre en. En klon får et ledigt id, så en kopi aldrig i stilhed kan overskygge den profil, den kom fra. Ny begynder forfra, Slet fjerner en af dine egne, og forlader du arbejde, du ikke har gemt, bliver du spurgt først.

Importeres en profil, hvis id passer til en indbygget, gemmes den under et ledigt id i stedet for at erstatte den — og editoren siger hvilket.

Rotation: at beskrive et sæt filer

En roteret log er én logisk strøm, der er skåret op i flere filer. En profil siger, hvilke filer der hører sammen, med to navne — der skal ikke mere til, og fordi der kun er én beskrivelse, er der ikke noget, der kan modsige sig selv.

Felt Betydning
liveName Den fil, der skrives til lige nu.
rotatedName Den form, de ældre filer har.
indexOrder Hvilken ende af nummereringen der er nyest.
orderBy Hvor rækkefølgen kommer fra. Næsten altid name.

Pladsholdere

Begge navne tager imod disse. Uden for dem er hvert tegn bogstaveligt — . er et punktum og ikke »et vilkårligt tegn«, og * er en stjerne og ikke et jokertegn.

Pladsholder Betyder
%LIVE% Den fil, brugeren åbnede. Brug den, når profilen ikke kan kende navnet på forhånd.
%N Rotationsnummeret. Læses som et tal, så _10 sorteres efter _9 og ikke mellem _1 og _2.
%Y %y År, fire eller to cifre. Toårscifre bruger det sædvanlige omslagspunkt: 69–99 betyder 19xx, 00–68 betyder 20xx.
%m %b %B Måned som tal, som forkortelse (Jul) eller fuldt ud (July).
%d %j Dag i måneden eller dag i året.
%H %M %S Time, minut, sekund — til ordninger, der roterer mere end én gang om dagen.
%% Et bogstaveligt procenttegn.

Det er de samme strftime-felter, som profilens tidsstempelformater bruger, så der er ikke et sæt mere at lære.

En komprimeringsendelse (.gz, .zip, .bz2, .xz) håndteres automatisk og må ikke stå i nogen af navnene: hver ordning føjer den til sidst, efter det, mønsteret beskriver.

De tre tilstande for liveName

Værdi Brug den, når
%LIVE% Det er en alment anvendelig profil, der ikke kan kende navnet — sættet forankres til den fil, der blev åbnet.
Et bogstaveligt navn, f.eks. access.log Profilen er skrevet til ét program, hvis aktive fil altid har det navn.
Tomt Der er ingen unummereret aktiv fil: hver fil er nummereret eller dateret. IIS og java.util.logging virker sådan.

Gennemarbejdede eksempler

Ordning 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 hver time %LIVE% app-%Y-%m-%d-%H.log
java.util.logging (tomt) java%N.log

Hvordan rækkefølgen afgøres

Med orderBy: name — standarden — afgør datoen i navnet først, nummeret bryder uafgjorte inden for en dato, og en fil uden nummer er den aktive og derfor den nyeste. indexOrder siger, hvilken vej numrene løber: higher-is-older for logrotate og spdlog, higher-is-newer for Serilog, Boost.Log og alt andet, der tæller opad undervejs. Navnet alene kan ikke skelne de to, og derfor må profilen gøre det.

De andre værdier for orderBy findes til sæt, hvis numre ikke kan stoles på. Cyklisk rotation genbruger de samme få numre for evigt, så nummeret er en plads og ikke en alder; first-record-time læser i stedet hver fils første tidsstempel, og mtime falder tilbage på filsystemet.

Vælges name, og viser navnene sig hverken at bære en dato eller et nummer, falder rækkefølgen igennem til den første post, derefter til mtime og derefter til det rene navn — og statuslinjen siger hvilken, for mtime skrives om, når man kopierer, pakker ud, gendanner en sikkerhedskopi eller tjekker en gren ud.

En dato i et filnavn bliver aldrig til en posts tidsstempel

Datoer, der læses ud af filnavne, bruges kun til én ting: at sætte segmenterne i rækkefølge. Poster tager altid deres tidsstempler fra den linje, de blev fortolket fra. En fil, der hedder access.log-20260730, indeholder stadig poster fra de tidspunkter, dens egne linjer angiver.

Mønstre, der afvises

Et mønster med to %N, eller med %N direkte op ad et datofelt, afvises, når profilen indlæses, og rotationen slås fra for den med begrundelsen i diagnostikken. app_%N%Y%m%d.log mod app_1220260730.log kan læses på flere måder, og at vælge en af dem i stilhed ville bringe sættet i forkert rækkefølge, uden at noget på skærmen forklarede det. Sæt et bogstaveligt tegn mellem dem — enhver virkelig ordning gør det allerede.

Profileditoren efterprøver begge navne, mens du skriver, så et afvist mønster viser sig der i stedet for, når loggen åbnes.

At opdele efter programkørsel

En kørsel er ét liv for programmet fra start til stop, og det er ikke det samme som en fil: rotation efter størrelse skærer en kørsel over i flere filer, og en log, der kun roterer efter størrelse, kan rumme flere kørsler i én fil.

Skriver loggen en linje, når den starter — Volluto logging system started…, Begin file log, et bannerudsagn fra en ramme — så sæt et regulært udtryk, der matcher den, i profilens runStartMarker. Et højreklik på en bane i tidslinjen tilbyder så Opdel efter programkørsel, og hver kørsel bliver til sin egen bane. Posten kommer kun frem, når posterne virkelig indeholder mere end én kørsel.

Uden en markør kan grænserne kun gættes ud fra huller i tiden, og det gæt er slået fra som standard med vilje. En kørsel er et begreb, der hører til programlogfiler; nginx, apache, syslog og containerlogfiler er vedvarende tjenester helt uden kørsler, og en stille nat ville ellers blive læst som hundredvis af genstarter. Hvor gættet bruges, tilpasser det sig loggens egen rytme og kasseres helt, hvis det frembringer kørsler, der er for korte til at være virkelige.

Tid, der løber baglæns inde i en kilde, behandles altid som en grænse og meldes altid — det betyder enten en genstart eller segmenter i forkert rækkefølge, og begge dele er værd at vide.

Temaer

Farverne pr. niveau kommer fra temaet — udvidelsesmodulet registrerer en paletkategori pr. kanonisk niveau, Temaeditoren viser dem frem, og ethvert tema kan tilsidesætte dem. Skifter du tema, opdateres niveaukolonnen, tidslinjestrimlen, statistikpanelet og sekvensdiagrammet i takt.

Se også

  • Sammenlign / Diff — sammenligningsvinduet, som Loganalysens vinduer er bygget efter.
  • Logning og diagnostik — editorens egen logfil (adskilt fra Loganalysens visning af vilkårlige logformater).