Logganalyse-programtillegget¶
Gjør redigereren til en fullverdig arbeidsbenk for logger: tolk strukturerte loggfiler gjennom profiler du kan endre, naviger etter tolkede felter og tidsstempler, slå sammen flere kilder på én tidslinje, følg én enkelt forespørsel på tvers av kilder, og analyser frekvenser, persentiler og de hyppigste verdiene — alt sammen uten å laste den rå teksten inn i en vanlig redigeringsfane.
Hvor du finner det¶
Programtillegget legger til tre poster under menyen Logganalyse:
- Logganalyse ▸ Åpne som logg… — åpne én enkelt loggfil i et eget loggvisningsvindu.
- Logganalyse ▸ Åpne sammenslåtte logger… — velg to eller flere filer, gi hver sin profil, og se dem flettet på én tidslinje.
- Logganalyse ▸ Åpne systemloggen… (bare Windows) — spør Windows' hendelseslogg gjennom
den samme visningen, med filtrene sendt ned i PowerShells
Get-WinEvent.
En side under Innstillinger ▸ Programtillegg ▸ Logganalyse lar deg sette standardnivåene, reserveprofilen for filer som ikke matcher et globmønster, grensen for «advar før filer over N MB tolkes», standard filtermodus og intervallet for å følge halen — én knapp for både filhaletimeren og systemloggstrømmen (hver spørring i Windows' hendelseslogg starter en PowerShell-prosess, så tunge kilder vil kanskje ha det tregere).
Store filer tolkes i en bakgrunnstråd med en løpende postteller, og de dyre sammenslåingene (meldingsmaler, avvik) beregnes også i bakgrunnen — statuslinjen viser «Analyserer statistikk i bakgrunnen…», og panelene fylles ut når de er klare, så vinduet blir værende lettvint hele veien. Ved svært store innlastinger legger statistikken sammen de nyeste 150 000 postene, og tidslinjen tar stikkprøver over hele spennet.
Loggvisning av én enkelt fil¶
Når du åpner en logg, kommer det egne loggvisningsvinduet fram. Det speiler ergonomien i redigererens egne tabellbaserte vinduer (som sammenligningsvinduet) og holder seg utenfor redigererens fanerad.
Oppbygning¶
- Verktøylinje — nivåknapper (TRACE…FATAL), filtermodus og filterlinje, Neste /
Forrige feil (
F8/Shift+F8), Gå til tidspunkt (Ctrl+G). - Tidslinjestripen øverst — hendelsesmengden fordelt i tidsbøtter, farget etter nivå. Dra over et område for å filtrere etter tid; klikk på en søyle for å føre tabellen til den første posten ved eller etter den bøtten.
- Tabellen i midten — Tid / Nivå / Kilde / Melding, virtualisert, så den ruller jevnt selv med hundretusenvis av poster.
- Detaljruten under tabellen — viser hele den rå posten over flere linjer for den merkede raden.
- Statistikkpanelet dokket til høyre — antall per nivå, hendelsesfrekvens, en
persentilvelger (p50/p95/p99 over et hvilket som helst tallfelt,
bytessom standard), fordelingen av HTTP-statusklasser (1xx…5xx, skjult når det ikke finnes etstatus-felt), og en tabell over de hyppigste verdiene for et hvilket som helst felt (urlsom standard, med et tak på 25 rader).
Posttabellen og detaljruten bruker redigererens skrift fra Innstillinger ▸ Generelt — samme skriftsnitt og størrelse som en vanlig redigeringsfane, så tidsstempler og nivåer står pent i kolonner. En endring av den innstillingen slår gjennom i loggvisninger som alt er åpne, uten at de må åpnes på nytt. Det samme gjelder den sammenslåtte visningen, rutene dens side ved side og sekvensdiagrammet. Verktøylinjen, filterlinjen og statistikkpanelet beholder grensesnittets skrift: de er ramme og ikke logginnhold.
Filtermodi¶
Filterlinjen på verktøylinjen tar imot fem ulike uttrykk; velg modusen i kombinasjonsboksen til venstre for den:
| Modus | Hva den matcher |
|---|---|
| Enkel | En delstreng uten forskjell på store og små bokstaver mot den rå linjen. |
| Ord | Enheter adskilt av blanktegn; hver enhet må komme fram et sted i linjen, i vilkårlig rekkefølge. phpinfo GET matcher en linje som inneholder både phpinfo og GET. |
| Jokertegn | * og ? som globmønster mot den rå linjen, uten forskjell på store og små bokstaver. |
| Regulært uttrykk | Et alminnelig QRegularExpression-mønster, uten forskjell på store og små bokstaver som standard. |
| Spørring | En strukturert grammatikk med predikater for felt, nivå og tid, pluss AND/OR/NOT og parenteser. |
Eksempler i modusen Spørring:
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 etter det du skriver, så tabellen ikke filtreres om ved hvert tastetrykk; et trykk på Enter eller et tap av fokus tar den i bruk med det samme, og tømmer du linjen, tas det også i bruk med det samme. Kan et uttrykk med jokertegn, regulært uttrykk eller spørring ikke kompileres, blir linjen rød, og hjelpetipset viser feilen — mellomleddet fortsetter å vise det forrige gyldige filteret, så tabellen ikke blir tom mens du skriver.
Navigasjon¶
- F8 / Shift+F8 — neste / forrige post av typen feil eller fatal.
- Ctrl+G — gå til et bestemt tidspunkt (UTC, med en kalender).
- Klikk på en tidslinjesøyle for å hoppe til den første posten i den bøtten.
Disse tre tastekombinasjonene kan brukeren tildele på nytt under Tildel hurtigtaster (kategorien Logganalyse); åpne loggvisninger tar en ny tildeling i bruk med det samme, og verktøylinjens hjelpetips viser den gjeldende kombinasjonen.
Løpende tolking og avbrytelse¶
Store filer begynner å vise poster innen noen titalls millisekunder; tolkingen fortsetter
i bakgrunnen, og tabellen vokser etter hvert som postene kommer inn. Filtrering, rulling
og F8 virker mens tolkingen fortsatt pågår. Lukker du vinduet, stopper arbeideren
raskt.
Sammenslått loggvisning¶
Logganalyse ▸ Åpne sammenslåtte logger… lar deg undersøke et problem som strekker seg over flere kilder — en klientlogg pluss en tjenerlogg, en programlogg pluss en systemjournal, en nettilgangslogg pluss en feillogg og så videre.
Profilvelgeren per fil¶
Når du har valgt to eller flere filer, ser du et lite vindu med én rad per fil og en
profilkombinasjonsboks per rad. Kombinasjonsboksen er forhåndsvalgt ved å matche filnavnet
mot hver profils globmønstre for filnavn (uten forskjell på store og små bokstaver). I et
typisk nginx-oppsett velger access.log av seg selv
nginx — access log (default combined), og error.log velger av seg selv
nginx — error log. Overstyr hvilken som helst rad for hånd før du klikker på OK.
Oppbygning¶
- Verktøylinje — nivåknapper, filterlinje med moduskombinasjonsboks, sporingselementer (kombinasjonsboks pluss Følg / Tøm), knappen for sekvensdiagram og knappen for side ved side.
- Tidslinjestripen øverst — et stablet histogram per kilde med ett spor per kilde, så du kan se sammenhengende utbrudd visuelt.
- Sporingsbanneret over tabellen — en ravgul stripe som bare vises når et
sporingsfilter er aktivt:
Følger <field> = <value> — N rader på tvers av alle kilder. - Det stablede hovedområdet — tre sider du kan bytte mellom fra verktøylinjen:
- Tabell (standard): én rad per sammenslått post med kolonnene Tid / Kilde / Nivå
/ Logger / Melding; forgrunnen i kolonnen
Kildehar kildens sporfarge, så du kan lese av kildens identitet med et blikk. - Sekvensdiagram — se Følg sporingen.
- Ruter side ved side — se Side ved side.
- Tabell (standard): én rad per sammenslått post med kolonnene Tid / Kilde / Nivå
/ Logger / Melding; forgrunnen i kolonnen
- Detaljruten under tabellen.
Filtre som bygger på hverandre¶
I den sammenslåtte visningen kjører filterkjeden i denne rekkefølgen, og alle leddene bygger på hverandre:
- Kildenes synlighet — en avkrysningsboks i tidslinjens venstre marg, én per spor, ved siden av kildens navn og farge. Et spor uten avkrysning beholder raden sin, nedtonet: det må det, for den avkrysningsboksen er den eneste veien tilbake. Høyreklikk i margen for Vis bare denne kilden / Vis alle kilder.
- Nivåknapper — TRACE…FATAL.
- Følg sporingen — se nedenfor.
- Tekstfilter — Enkel / Ord / Jokertegn / Regulært uttrykk / Spørring (samme modi og oppførsel som i visningen av én enkelt fil, brukt på den sammenslåtte strømmen).
Det betyr at du for eksempel kan skrive level>=ERROR AND status:500 på tvers av både
nginx' tilgangslogg og feillogg i ett uttrykk og følge én enkelt klient gjennom begge —
sporingsfilteret snevrer inn settet videre uten å bryte filtrene for nivå, kilde og tekst.
Følg sporingen¶
- Velg en korrelasjonsnøkkel i verktøylinjens kombinasjonsboks Sporing:. Den er
fylt med det vanlige settet (
trace_id/request_id/session_id/correlation_id/span_id/xRequestId) og med ethvert særskilt feltnavn som faktisk finnes i de innlastede postene. Skriv et annet navn om du trenger det. - Merk en rad i tabellen.
- Klikk på Følg sporingen — eller høyreklikk på raden, og velg Følg sporingen: \<field>=\<value> for hvilken som helst av de vanlige nøklene posten bærer (en vei i ett steg som ikke krever kombinasjonsboksen).
Tabellen filtreres med det samme ned til nettopp de postene som deler den nøkkelens verdi på tvers av alle kilder. Klikk på Tøm sporingen for å fjerne filteret.
Sekvensdiagram¶
Når et sporingsfilter er aktivt og det er nøyaktig 2–4 synlige kilder, blir verktøylinjens knapp Sekvensdiagram tilgjengelig. Den bytter hovedområdet over til et diagram med faste spor:
- Hver synlig kilde er et loddrett spor med en fargeprøve og en merkelapp øverst.
- Én rad per post, med tiden som løper ovenfra og ned. Det faktiske tidsstempelet står til venstre, så du ikke mister presisjon; radene er ordnet etter rang (fast høyde) og ikke etter tid, fordi en virkelig sporing har utbrudd og lange pauser, og en tidsproporsjonal akse ville sløst bort det meste av skjermen på pausene.
- En farget prikk på det sporet posten hører til, pluss en diskret grå pil mellom etterfølgende poster på ulike spor — så du bokstavelig talt kan se sporingen sprette mellom systemene.
- Nivåknapp og meldingstekst til høyre.
Klikk på en hvilken som helst rad i diagrammet for å rulle den underliggende tabellen til den posten. Slå handlingen av igjen for å komme tilbake til tabellen.
Ved mer enn 4 kilder er diagrammet av, og tabellvisningen blir stående.
Ruter side ved side¶
Når det er nøyaktig to synlige kilder, blir verktøylinjens knapp Side ved side tilgjengelig. Den deler hovedområdet i to tabellruter — én kilde i hver — med rulleposisjonene knyttet sammen etter tidsstempel: rull i den ene ruten, så følger den andre etter til den nærmeste posten ved eller etter det tidspunktet. Avdrift mellom tjenerklokker viser seg helt av seg selv ved at rutene trekker fra hverandre.
Knappene for sekvensdiagram og side ved side utelukker hverandre (slår du den ene på, slår den andre seg av); begge vender tilbake til tabellvisningen når antallet aktive kilder faller utenfor det de støtter.
Et rotasjonssett er ett spor¶
Å velge tre filer ut av ett rotert sett er å velge én logg, så de lastes inn som ett
spor. Velgeren viser én rad per spor med segmentene sine listet under, eldst først, og
sporet får navn etter den nyeste filen sin med et antall av de eldre —
MxAPILog.txt (+2).
Høyreklikk på et spor i tidslinjen for Vis hver roterte fil for seg og, når det er delt, Slå roterte filer sammen til ett spor. Delingen er en ny oppdeling av det som alt er i minnet, så ingenting leses på nytt — men den endrer hva en rad betyr, så tabellen gir opp merkingen sin.
Kilder må oppgi sammenlignbare tider¶
En sammenslåing plasserer poster fra flere kilder på én akse, og det betyr bare noe hvis de alle kan oppgi like mye dato. En syslog uten år kan ikke plasseres i forhold til en datert logg uten å finne på året, og en byggelogg helt uten tidsstempler kan ikke plasseres i det hele tatt. Å blande dem avvises på forhånd, med en melding som sier hvilke kilder som hører til hvilken gruppe. Slå sammen kilder av samme slag, eller åpne dem hver for seg.
Gjenoppretting¶
En sammenslått visning kommer tilbake med økten. Det som lagres, er den profilen som er valgt for hvert spor, og de filene sporet endte opp med; postene leses på nytt i bakgrunnen, så fanen kommer fram med det samme og fylles ut. Filer som er forsvunnet, og profiler som er slettet, hoppes over og noteres i loggen i stedet for å bli til et spørsmål ved oppstart.
Systemets egne logger (Windows)¶
Logganalyse ▸ Åpne systemloggen… spør Windows' hendelseslogg uten at det trengs en fil på
disken. Vinduet spør om en kanal (Application / System / Security / et selvvalgt navn),
et valgfritt laveste nivå og et tak på antallet poster. Programtillegget kaller
PowerShells Get-WinEvent | ConvertTo-Json -Compress med filteret sendt ned, og tolker så
NDJSON-utdataene gjennom den medfølgende profilen windows-event-log.
Handlingen registreres bare når verten faktisk har en fungerende kilde til Windows' hendelseslogg — den er reelt fraværende på Linux og macOS i stedet for nedtonet.
Kilder for macOS' samlede logg og Linux' journald er planlagt og faller på plass bak det samme interne grensesnittet, uten endringer i grensesnittet når de kommer.
Profiler¶
Motoren har ingen innebygde særtilfeller blant tolkerne. Hvert format som støttes —
Apache, nginx, syslog, JSON Lines, logfmt, CSV, Windows' hendelseslogg — er en JSON-fil
med en LogProfile som leveres i programmets log-profiles/-mappe. Brukerprofiler ligger
i mappen log-profiles/ i brukerens oppsettmappe og overstyrer de medfølgende etter id.
Hver profil beskriver:
- linjemodell —
regex,json,logfmt,csvellerdelimited. - tidsstempel — hvilket felt, hvilke
strftime-lignende formater det tas imot, kildens tidssone og enhetene for epoketid. - nivå — hvilket felt pluss en oversettelse av rå enheter til den kanoniske
enumerasjonen
Trace / Debug / Info / Warn / Error / Fatal. - fortsettelse — hvordan følgende linjer limes sammen med den gjeldende posten (Java-kallstakspor blir til én post og ikke 30).
- avledede felter — ekstra felter som beregnes av et undermønster over et felt som alt
finnes. De medfølgende apache- og nginx-profilene bruker dette til å blottlegge et
ensartet
client_ip-felt, så den sammenslåtte visningens Følg sporingen kan knytte sammen nettilgangs- og feilhendelser for den samme klienten på tvers av begge kilder. - rotasjon — hvilke filer som utgjør én logisk logg, og i hvilken rekkefølge. Se Rotasjon: å beskrive et sett filer.
Du behøver ikke å skrive disse filene for hånd: redigereren for dem — med en feltgriper, grok-lignende alias og en løpende tidsstempelprøve — er beskrevet under Å redigere profiler.
Tider vises med den presisjonen loggen oppgir¶
Ikke hver logg oppgir en fullstendig dato. RFC 3164-syslog gir en måned, en dag og et klokkeslett, men intet år; noen innebygde og hjemmelagde logger gir bare et klokkeslett; byggeutdata gir ingenting i det hele tatt.
Tidskolonnen viser nøyaktig det linjen sa — 13:36:55, Oct 10 14:32:52 eller et
fullstendig tidsstempel med UTC — og fyller aldri et hull med en gjetning. Det samme
gjelder TSV-eksporten og profilredigererens forhåndsvisning, så et oppdiktet år ikke kan
forlate programmet og lenger nede bli forvekslet med et virkelig.
Rekkefølgen, tidslinjen og statistikken fortsetter å virke inne i en slik fil: de manglende delene forankres internt, så postene fortsetter å kunne sammenlignes med hverandre. De kommer bare aldri til syne.
Å redigere profiler¶
Logganalyse ▸ Rediger profil… viser hver profil med et merke for Innebygd eller Egendefinert. Velger du en, lastes den inn.
Innebygde profiler er skrivebeskyttet, slik innebygde temaer er det: skjemaet vises, men er slått av, og Klon er veien til å endre en. En klon får en ledig id, så en kopi aldri i stillhet kan overskygge den profilen den kom fra. Ny begynner forfra, Slett fjerner en av dine egne, og forlater du arbeid du ikke har lagret, blir du spurt først.
Importeres en profil der id-en passer til en innebygd, lagres den under en ledig id i stedet for å erstatte den — og redigereren sier hvilken.
Rotasjon: å beskrive et sett filer¶
En rotert logg er én logisk strøm skåret opp i flere filer. En profil sier hvilke filer som hører sammen, med to navn — det skal ikke mer til, og fordi det bare er én beskrivelse, er det ingenting som kan motsi seg selv.
| Felt | Betydning |
|---|---|
liveName |
Den filen det skrives til akkurat nå. |
rotatedName |
Den formen de eldre filene har. |
indexOrder |
Hvilken ende av nummereringen som er nyest. |
orderBy |
Hvor rekkefølgen kommer fra. Nesten alltid name. |
Plassholdere¶
Begge navnene tar imot disse. Utenfor dem er hvert tegn bokstavelig — . er et punktum og
ikke «et hvilket som helst tegn», og * er en stjerne og ikke et jokertegn.
| Plassholder | Betyr |
|---|---|
%LIVE% |
Den filen brukeren åpnet. Bruk den når profilen ikke kan kjenne navnet på forhånd. |
%N |
Rotasjonsnummeret. Leses som et tall, så _10 sorteres etter _9 og ikke mellom _1 og _2. |
%Y %y |
År, fire eller to sifre. Toårssifre bruker det vanlige vendepunktet: 69–99 betyr 19xx, 00–68 betyr 20xx. |
%m %b %B |
Måned som tall, som forkortelse (Jul) eller fullt ut (July). |
%d %j |
Dag i måneden, eller dag i året. |
%H %M %S |
Time, minutt, sekund — for ordninger som roterer mer enn én gang om dagen. |
%% |
Et bokstavelig prosenttegn. |
Det er de samme strftime-feltene som profilens tidsstempelformater bruker, så det er
ikke et sett til å lære.
En komprimeringsendelse (.gz, .zip, .bz2, .xz) håndteres av seg selv og må
ikke stå i noen av navnene: hver ordning legger den til sist, etter det mønsteret
beskriver.
De tre tilstandene til liveName¶
| Verdi | Bruk den når |
|---|---|
%LIVE% |
Det er en profil til allmenn bruk som ikke kan kjenne navnet — settet forankres til den filen som ble åpnet. |
Et bokstavelig navn, for eksempel access.log |
Profilen er skrevet for ett program der den aktive filen alltid har det navnet. |
| Tomt | Det finnes ingen unummerert aktiv fil: hver fil er nummerert eller datert. IIS og java.util.logging virker slik. |
Gjennomarbeidede 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, standardrotasjon | %LIVE% |
app-%Y-%m-%d-%N.log |
| Rotasjon hver time | %LIVE% |
app-%Y-%m-%d-%H.log |
java.util.logging |
(tomt) | java%N.log |
Hvordan rekkefølgen avgjøres¶
Med orderBy: name — standarden — avgjør datoen i navnet først, nummeret bryter
uavgjorte innenfor en dato, og en fil uten nummer er den aktive og derfor den nyeste.
indexOrder sier hvilken vei numrene løper: higher-is-older for logrotate og spdlog,
higher-is-newer for Serilog, Boost.Log og alt annet som teller oppover underveis. Navnet
alene kan ikke skille de to, og derfor må profilen gjøre det.
De andre verdiene for orderBy finnes for sett der numrene ikke kan stoles på. Syklisk
rotasjon gjenbruker de samme få numrene i det uendelige, så nummeret er en plass og ikke
en alder; first-record-time leser i stedet hver fils første tidsstempel, og mtime
faller tilbake på filsystemet.
Velges name, og viser navnene seg verken å bære en dato eller et nummer, faller
rekkefølgen gjennom til den første posten, deretter til mtime og deretter til det rene
navnet — og statuslinjen sier hvilken, for mtime skrives om når man kopierer, pakker ut,
gjenoppretter en sikkerhetskopi eller sjekker ut en gren.
En dato i et filnavn blir aldri en posts tidsstempel
Datoer som leses ut av filnavn, brukes bare til én ting: å sette segmentene i
rekkefølge. Poster tar alltid tidsstemplene sine fra den linjen de ble tolket fra. En
fil som heter access.log-20260730, inneholder fortsatt poster fra de tidspunktene
linjene dens selv oppgir.
Mønstre som avvises¶
Et mønster med to %N, eller med %N rett inntil et datofelt, avvises når profilen
lastes inn, og rotasjonen slås av for den, med begrunnelsen i diagnostikken.
app_%N%Y%m%d.log mot app_1220260730.log kan leses på flere måter, og å velge en av dem
i stillhet ville satt settet i gal rekkefølge uten at noe på skjermen forklarte det. Sett
et bokstavelig tegn mellom dem — enhver virkelig ordning gjør det alt.
Profilredigereren kontrollerer begge navnene mens du skriver, så et avvist mønster viser seg der i stedet for når loggen åpnes.
Å dele opp etter programkjøring¶
En kjøring er ett liv for programmet fra start til stopp, og det er ikke det samme som en fil: rotasjon etter størrelse skjærer en kjøring over i flere filer, og en logg som bare roterer etter størrelse, kan romme flere kjøringer i én fil.
Skriver loggen en linje når den starter — Volluto logging system started…, Begin file
log, et bannerutsagn fra et rammeverk — så sett et regulært uttrykk som matcher den, i
profilens runStartMarker. Et høyreklikk på et spor i tidslinjen tilbyr da Del opp
etter programkjøring, og hver kjøring blir til sitt eget spor. Posten kommer bare fram
når postene virkelig inneholder mer enn én kjøring.
Uten en markør kan grensene bare gjettes ut fra hull i tiden, og den gjetningen er av som standard med vilje. En kjøring er et begrep som hører til programlogger; nginx, apache, syslog og containerlogger er vedvarende tjenester helt uten kjøringer, og en stille natt ville ellers blitt lest som hundrevis av omstarter. Der gjetningen brukes, retter den seg etter loggens egen rytme og forkastes helt hvis den gir kjøringer som er for korte til å være virkelige.
Tid som løper bakover inne i en kilde, behandles alltid som en grense og meldes alltid — det betyr enten en omstart eller segmenter i gal rekkefølge, og begge deler er verdt å vite om.
Temaer¶
Fargene per nivå kommer fra temaet — programtillegget registrerer en palettkategori per kanonisk nivå, Temaredigereren viser dem fram, og ethvert tema kan overstyre dem. Bytter du tema, oppdateres nivåkolonnen, tidslinjestripen, statistikkpanelet og sekvensdiagrammet i takt.
Se også¶
- Sammenlign / Diff — sammenligningsvinduet som Logganalysens vinduer er bygget etter.
- Logging og diagnostikk — redigererens egen loggfil (atskilt fra Logganalysens visning av vilkårlige loggformater).