Konsten att läsa in och normalisera oformaterade loggar

Med Elastic Stack blir det enkelt.

Hur gör man när man måste underhålla ett system och behöver veta hur systemet mår varje dag men det finns ett par hundra loggar som alla har olika loggformat? Detta var ett problem som vi på Compose IT ställdes inför och hittade en lösning till.

Om man har ett egen-utvecklat system eller ett anpassat COTS så är det troligt att det finns loggar med olika format inom samma lösning. Nya loggar skapas när systemet byggs ut eller ett nytt script läggs till och då är det lätt hänt att den nya loggen får ett annat format än det redan existerande. När system anpassas och byggs ut och nya loggar skapas är det lätt hänt att man får loggar med flera olika format. Kanske är det till och med så att samma logg har olika format för olika loggrader. Eller att ett loggmeddelande är uppdelat över flera rader. Allt detta kan sedan bli ett problem när loggarna ska läsas in och analyseras vid en central punkt. Eftersom man då måste kunna läsa ut varje meddelande och normalisera loggningarna så att de kan sammanföras i en central logghanterare.

När vi ställdes inför behovet att samla in många olika typer av loggar utspridda över många servrar så valde vi att använda Elastic Stack som logghanterare. Anledningen till vårt val är att det är en helhetslösning, open source och att vi tycker att det är en väldigt bra lösning. Elastic Stack har produkter för insamling, bearbetning, datalagring och visualisering. Alla produkter är gjorda för att fungera både självständigt och tillsammans. Tack vare att lösningen är open source så finns det en stor mängd plugin-program skapta av Elastics stora community. Detta gör att det är möjligt att läsa in, bearbeta och visualisera alla sorters data.

Vilka delar ingår då i Elastic Stack och vad är det som gör den bra?

Elastic Stack består i huvudsak av fyra olika byggdelar.
Beats, små agenter som används för insamling.
Logstash, data bearbetat som omvandlar och förädlar data.
Elasticsearch, databasen och hjärtat i en Elastic Stack.
Kibana, GUI för visualisering.
Utöver dessa produkter så finns det en mängd funktioner man kan köpa till t.ex. för generering av larm, användarhantering, machine learning med mera. Vissa av dessa funktioner går även att ersätta med open source alternativ.

Förutom att alla produkter i Elastic Stack fungerar väldigt bra ihop så har varje del i sig många styrkor som gör att produkterna också används var för sig. Ett exempel på detta är Logstash som gärna används ihop med IBMs AI produkt Predictive Insight. När det kommer till logghantering så fungerar Elastic stacks produkter bäst tillsammans.

Elasticsearch, databasen i Elastic stack, är väldigt kraftfull i många olika fall. I följande två tillämpningar har vi ansett Elasticsearch vara det bästa alternativet:

  • Där man vill samla många olika typer av data, loggdata, serverövervakning, APM m.m. på samma ställe
  • Samt där det finns behov av textbaserad sökning

Elasticsearch är nämligen baserad på open source projektet Apache Lucene, ett högpresterande textbaserat sökbibliotek. Därav kan Elasticsearch på ett väldigt effektivt sätt indexera hela textsträngar och ord i text. Detta gör den optimal för analys av loggfiler då det är möjligt att snabbt kunna söka igenom stora mängder text efter en specifik mening eller ett specifikt ord. Men för att man på ett smidigt sätt ska kunna söka i textfilerna så måste de vara normaliserade till ett uniformt format.

Beats och Logstash tillsammans gör det möjligt att samla in, berika och bearbeta loggfilerna så att det blir lättare att hitta det du söker efter i Elasticsearch. Med Beats kan du samla in loggar ifrån bland annat Windows eventlogs, dina molntjänster men även direkt från textfiler. Beatsen lyssnar ständigt efter uppdateringar och så fort något sker bearbetas informationen och vidarebefordras. I Beats är det möjligt att läsa in loggmeddelanden som är uppdelade över flera rader med hjälp av reguljära uttryck. Det är möjligt också att lägga till fält, filtrera och förädla meddelandena.

Logstash tar detta ett steg längre och gör det möjligt att vidarebearbeta meddelandena. Logstash kan läsa in data från flera källor och anpassa bearbetningen efter vad som står i meddelandena. Det går att tillföra information så som geografisk information baserat på IP adresser, berika meddelanden med data som redan finns i Elasticsearch eller integrera med REST API. Det finns många funktioner för att normalisera data genom att dela upp en logg rad till flera meddelanden, anpassa fält och ta bort fält eller droppa hela meddelanden. Det finns massor av funktioner för att bearbeta data i Logstash allt för många för att berätta om här. Men i stort sätt kan man läsa in och bearbeta alla sorters loggar i Elastic Stack.

Elastic Stack med alla dess byggdelar är en konkurrenskraftig logghanterare som också är helt gratis. Vi kunde utan problem implementera den för att läsa helt oformaterade loggar från ett flertal servrar. Med Elastic Stack är det inte bara möjligt att läsa in loggar utan också många andra olika typer av data.

Compose IT använder även Elastic Stack för t.ex. serverövervakning och ihop med Kafka. Ta gärna kontakt med oss om du vill veta mer.