Sådan gemmer du timevis med fejlsøgning med logfiler

En god skovhugstmekanisme hjælper os i vores behovstid.

Når vi håndterer en produktionsfejl eller forsøger at forstå et uventet svar, kan logfiler være vores bedste ven eller vores værste fjende.

Deres betydning for vores evne til at håndtere fejl er enorm. Når det kommer til vores daglige arbejde, når vi designer vores nye produktionstjeneste / funktion, overser vi undertiden deres betydning. Vi forsømmer at give dem ordentlig opmærksomhed.

Da jeg begyndte at udvikle mig, begik jeg et par logfejl, der kostede mig mange søvnløse nætter. Nu ved jeg bedre, og jeg kan dele med dig nogle få praksis, jeg har lært gennem årene.

Ikke nok diskplads

Når vi udvikler på vores lokale maskine, har vi normalt ikke noget imod at bruge en filbehandler til logning. Vores lokale disk er ret stor, og mængden af ​​logposter, der skrives, er meget lille.

Det er ikke tilfældet i vores produktionsmaskiner. Deres lokale disk har normalt begrænset ledig diskplads. Med tiden kan diskpladsen ikke gemme logposter for en produktionstjeneste. Derfor vil brugen af ​​en filhåndterer med tiden resultere i at miste alle nye logposter.

Hvis du vil have dine logfiler tilgængelige på tjenestens lokale disk, skal du ikke glemme at bruge en roterende filhåndterer. Dette kan begrænse den maksimale plads, som dine logfiler forbruger. Den roterende filhåndterer håndterer tilsidesættelse af gamle logposter for at skabe plads til nye.

Een, meeny, miny, moe

Vores produktionstjeneste er normalt spredt på flere maskiner. Hvis du søger i en bestemt logpost, skal du undersøge dem alle. Når vi har travlt med at ordne vores service, er der ikke tid til at spilde med at prøve at finde ud af, hvor nøjagtigt der opstod fejlen.

I stedet for at gemme logfiler på lokal disk, skal du streame dem til et centraliseret loggesystem. Dette giver dig mulighed for at søge i dem alle på samme tid.

Hvis du bruger AWS eller GCP - kan du bruge deres loggingsagent. Agenten sørger for at streame logfilerne til deres logsøgemaskine.

At logge eller ikke logge? dette er spørgsmålet ...

Der er en tynd linje mellem for få og for mange logfiler. Efter min mening skal logposter være meningsfulde og kun tjene formålet med at undersøge spørgsmål om vores produktionsmiljø. Når du skal tilføje en ny logpost, skal du tænke over, hvordan du vil bruge den i fremtiden. Prøv at besvare dette spørgsmål: Hvilke oplysninger giver logmeddelelsen udvikleren, der vil læse det?

For mange gange ser jeg logfiler der bruges til brugeranalyse. Ja, det er meget lettere at skrive “bruger vandmelon2018 har klikket på knappen” til en logpost end at udvikle en ny hændelsesinfrastruktur. Dette er ikke det, hvad logfiler er beregnet til (og parsing af logposter er heller ikke sjovt, så at udtrække indsigt vil tage tid).

En nål i en høstak

I det følgende skærmbillede ser vi tre anmodninger, der blev behandlet af vores service.

Hvor lang tid tog det at behandle den anden anmodning? Er det 1ms, 4ms eller 6ms?

2018-10-21 22: 39: 07,051 - simple_eksempel - INFO - indtastet anmodning 2018-10-21 22: 39: 07,053 - simple_eksempel - INFO - indtastet anmodning 2018-10-21 22: 39: 07,054 - simple_eksempel - INFO - afsluttet anmodning 2018-10-21 22: 39: 07,056 - simple_eksempel - INFO - indtastet anmodning 2018-10-21 22: 39: 07,057 - simple_example - INFO - afsluttet anmodning 2018-10-21 22: 39: 07,059 - simple_example - INFO - afsluttet anmodning

Da vi ikke har yderligere oplysninger om hver logpost, kan vi ikke være sikre på, hvad der er det rigtige svar. At have anmodnings-id i hver logpost kunne have reduceret antallet af mulige svar til et. At have metadata inde i hver logpost kan desuden hjælpe os med at filtrere logfilerne og fokusere på de relevante poster.

Lad os tilføje nogle metadata til vores logpost:

2018-10-21 23: 17: 09,139 - INFO - indtastet anmodning 1 - simple_eksempel
2018-10-21 23: 17: 09,141 - INFO - indtastet anmodning 2 - simple_eksempel
2018-10-21 23: 17: 09,142 - INFO - afsluttet anmodning id 2 - simple_eksempel
2018-10-21 23: 17: 09,143 - INFO - req 1 ugyldig anmodningsstruktur - simple_eksempel
2018-10-21 23: 17: 09,144 - INFO - indtastet anmodning 3 - simple_eksempel
2018-10-21 23: 17: 09,145 - INFO - afsluttet anmodning id 1 - simple_eksempel
2018-10-21 23: 17: 09,147 - INFO - afsluttet anmodning id 3 - simple_eksempel

Metadataene placeres som en del af postens fritekstsektion. Derfor kan hver udvikler håndhæve sine egne standarder og stil. Dette vil resultere i en kompliceret søgning.

Vores metadata skal defineres som en del af postens faste struktur.

2018-10-21 22: 45: 38,325 - simple_eksempel - INFO - bruger / oprette - spørgsmål 1 - indtastet anmodning
2018-10-21 22: 45: 38,328 - simple_eksempel - INFO - bruger / login - spørgsmål 2 - indtastet anmodning
2018-10-21 22: 45: 38,329 - simple_eksempel - INFO - bruger / login - spørgsmål 2 - afsluttet anmodning
2018-10-21 22: 45: 38,331 - simple_eksempel - INFO - bruger / oprette - spørgsmål 3 - indtastet anmodning
2018-10-21 22: 45: 38,333 - simple_eksempel - INFO - bruger / oprette - spørgsmål 1 - afsluttet anmodning
2018-10-21 22: 45: 38,335 - simple_eksempel - INFO - bruger / oprette - spørgsmål 3 - afsluttet anmodning

Hver meddelelse i loggen blev skubbet til side af vores metadata. Da vi læser fra venstre mod højre, skal vi placere beskeden så tæt som muligt på starten af ​​linjen. Derudover “bryder” linjens struktur ved at placere beskeden i starten. Dette hjælper os med at identificere beskeden hurtigere.

2018-10-21 23: 10: 02,097 - INFO - indtastet anmodning [bruger / oprette] [spørgsmål: 1] - simple_eksempel
2018-10-21 23: 10: 02,099 - INFO - indtastet anmodning [bruger / login] [req: 2] - simple_example
2018-10-21 23: 10: 02,101 - INFO - afsluttet anmodning [bruger / login] [spørgsmål: 2] - simple_eksempel
2018-10-21 23: 10: 02,102 - INFO - indtastet anmodning [bruger / opret] [req: 3] - simple_eksempel
2018-10-21 23: 10: 02,104 - INFO - afsluttet anmodning [bruger / oprette [spørgsmål: 1] - simple_eksempel
2018-10-21 23: 10: 02,107 - INFO - afsluttet anmodning [bruger / opret] [req: 3] - simple_eksempel

Placering af tidsstempel og logniveau inden meddelelsen kan hjælpe os med at forstå strømmen af ​​begivenheder. Resten af ​​metadataene bruges hovedsageligt til filtrering. På dette tidspunkt er det ikke længere nødvendigt og kan placeres i slutningen af ​​linjen.

En fejl, der er logget under INFO, vil gå tabt mellem alle normale logindgange. Brug af hele spektret af logningsniveauer (FEJL, DEBUG osv.) Kan reducere søgetiden markant. Hvis du vil læse mere om logniveauer, kan du fortsætte med at læse her.

2018-10-21 23: 12: 39,497 - INFO - indtastet anmodning [bruger / opret] [req: 1] - simple_example
2018-10-21 23: 12: 39.500 - INFO - indtastet anmodning [bruger / login] [spørgsmål: 2] - simple_eksempel
2018-10-21 23: 12: 39,502 - INFO - afsluttet anmodning [bruger / login] [spørgsmål: 2] - simple_eksempel
2018-10-21 23: 12: 39,504 - FEJL - ugyldig anmodningsstruktur [bruger / login] [req: 1] - simple_example
2018-10-21 23: 12: 39,506 - INFO - indtastet anmodning [bruger / opret] [spørgsmål: 3] - simple_eksempel
2018-10-21 23: 12: 39,507 - INFO - afsluttet anmodning [bruger / oprette [spørgsmål: 1] - simple_eksempel
2018-10-21 23: 12: 39,509 - INFO - afsluttet anmodning [bruger / oprette] [spørgsmål: 3] - simple_eksempel

Logs analyse

Søgning i filer efter logposter er en lang og frustrerende proces. Det kræver normalt, at vi behandler meget store filer og nogle gange endda at bruge almindelige udtryk.

I dag kan vi drage fordel af hurtige søgemaskiner som Elastic Search og indeksere vores logfiler i det. Brug af ELK-stak giver dig også muligheden for at analysere dine logfiler og besvare spørgsmål såsom:

  1. Er fejlen lokaliseret til en maskine? eller forekommer det i hele miljøet?
  2. Hvornår startede fejlen? Hvad er fejlens forekomst

At være i stand til at udføre sammenlægninger på logposter kan give antydninger til mulige fejlårsager, som ikke vil blive bemærket bare ved at læse et par logposter.

Afslutningsvis må du ikke tage logning for givet. På hver nye funktion, du udvikler, skal du tænke på dit fremtidige selv, og hvilken logindføring der vil hjælpe dig, og som bare vil distrahere dig.

Husk: dine logfiler hjælper dig kun med at løse produktionsproblemer, hvis du lader dem.