Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Strukturera ostrukturerad data med GROK

Om du använder Elastic (ELK)-stacken och är intresserad av att mappa anpassade Logstash-loggar till Elasticsearch, då är det här inlägget för dig.

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

ELK-stacken är en akronym för tre projekt med öppen källkod: Elasticsearch, Logstash och Kibana. Tillsammans bildar de en logghanteringsplattform.

  • Elasticsearch är ett sök- och analyssystem.
  • Logstash är en databehandlingspipeline på serversidan som tar in data från flera källor samtidigt, transformerar den och sedan skickar den till en "stash" som Elasticsearch.
  • Kibana tillåter användare att visualisera data med hjälp av diagram och grafer i Elasticsearch.

Beats kom senare och är en lätt dataavsändare. Introduktionen av Beats förvandlade Elk Stack till Elastic Stack, men det är inte meningen.

Den här artikeln handlar om Grok, som är en funktion i Logstash som kan förvandla dina loggar innan de skickas till stash. För våra ändamål kommer jag bara att prata om att bearbeta data från Logstash till Elasticsearch.

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Grok är ett filter inuti Logstash som används för att analysera ostrukturerad data till något strukturerat och frågebart. Den sitter ovanpå ett reguljärt uttryck (regex) och använder textmönster för att matcha strängar i loggfiler.

Som vi kommer att se i följande avsnitt gör användningen av Grok stor skillnad när det kommer till effektiv logghantering.

Utan Grok är din loggdata ostrukturerad

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Utan Grok, när loggar skickas från Logstash till Elasticsearch och renderas i Kibana, visas de bara i meddelandevärdet.

Att söka meningsfull information i den här situationen är svårt eftersom all loggdata lagras i en enda nyckel. Det skulle vara bättre om loggmeddelandena var bättre organiserade.

Ostrukturerad data från loggar

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Om du tittar noga på rådatan ser du att den faktiskt består av olika delar, var och en åtskilda av ett mellanslag.

För mer erfarna utvecklare kan du förmodligen gissa vad var och en av delarna betyder och vad det loggmeddelandet är från API-anropet. Presentationen av varje objekt beskrivs nedan.

Strukturerad bild av vår data

  • localhost == miljö
  • GET == metod
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == response_status
  • ​ 46ms == svarstid
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Som vi ser i strukturerad data finns det en ordning för ostrukturerade loggar. Nästa steg är mjukvarubehandling av rådata. Det är här Grok lyser.

Grok mallar

Inbyggda Grok-mallar

Logstash kommer med över 100 inbyggda mallar för att strukturera ostrukturerad data. Du bör definitivt dra nytta av detta när det är möjligt för allmänna sysloggar som apache, linux, haproxy, aws och så vidare.

Men vad händer när du har anpassade loggar som i exemplet ovan? Du måste bygga din egen Grok-mall.

Anpassade Grok mallar

Du måste försöka bygga din egen Grok-mall. jag använde Grok Debugger и Grok mönster.

Observera att Grok-mallens syntax är som följer: %{SYNTAX:SEMANTIC}

Det första jag försökte göra var att gå till fliken Upptäck i Grok debugger. Jag trodde att det skulle vara coolt om det här verktyget automatiskt kunde generera ett Grok-mönster, men det var inte så användbart eftersom det bara hittade två matchningar.

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Med den här upptäckten började jag skapa min egen mall i Grok-debuggern med hjälp av syntaxen som finns på Elastic Github-sidan.

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Efter att ha lekt med olika syntaxer kunde jag äntligen strukturera loggdata som jag ville.

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Grok Debugger Link https://grokdebug.herokuapp.com/

Original text:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Mönster:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Vad hände i slutet

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Med Grok-mallen och mappad data i handen är det sista steget att lägga till den i Logstash.

Uppdaterar konfigurationsfilen Logstash.conf

På servern där du installerade ELK-stacken, gå till Logstash-konfigurationen:

sudo vi /etc/logstash/conf.d/logstash.conf

Klistra in ändringarna.

input { 
  file {
    path => "/your_logs/*.log"
  }
}
filter{
  grok {
    match => { "message" => "%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

När du har sparat dina ändringar, starta om Logstash och kontrollera dess status för att se till att den fortfarande fungerar.

sudo service logstash restart
sudo service logstash status

Slutligen, för att se till att ändringarna har trätt i kraft, Se till att uppdatera ditt Elasticsearch-index för Logstash i Kibana!

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Med Grok är din loggdata strukturerad!

Tips och tricks för att konvertera ostrukturerad data från loggar till ELK Stack med GROK i LogStash

Som vi kan se i bilden ovan kan Grok automatiskt matcha loggdata med Elasticsearch. Detta gör det lättare att hantera loggar och snabbt söka information. Istället för att gräva igenom loggfiler för att felsöka kan du helt enkelt filtrera efter det du letar efter, till exempel en miljö eller en webbadress.

Ge Grok uttryck ett försök! Om du har ett annat sätt att göra detta eller har några problem med exemplen ovan, skriv bara en kommentar nedan för att meddela mig.

Tack för att du läser – och följ mig här på Medium för fler intressanta programvarutekniska artiklar!

Ресурсы

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

PS Länk till källa

Telegramkanal av Elasticsearch

Källa: will.com

Lägg en kommentar