Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

Strukturering af ustrukturerede data med GROK

Hvis du bruger Elastic (ELK)-stakken og er interesseret i at kortlægge brugerdefinerede Logstash-logfiler til Elasticsearch, så er dette indlæg noget for dig.

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

ELK-stakken er et akronym for tre open source-projekter: Elasticsearch, Logstash og Kibana. Sammen danner de en logstyringsplatform.

  • Elasticsearch er et søge- og analysesystem.
  • Logstash er en databehandlingspipeline på serversiden, der indtager data fra flere kilder samtidigt, transformerer dem og derefter sender dem til en "stash" såsom Elasticsearch.
  • Kibana giver brugerne mulighed for at visualisere data ved hjælp af diagrammer og grafer i Elasticsearch.

Beats kom senere og er en let dataafsender. Introduktionen af ​​Beats forvandlede Elk Stack til Elastic Stack, men det er ikke meningen.

Denne artikel handler om Grok, som er en funktion i Logstash, der kan transformere dine logfiler, før de sendes til gemmerne. Til vores formål vil jeg kun tale om behandling af data fra Logstash til Elasticsearch.

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

Grok er et filter inde i Logstash, der bruges til at parse ustrukturerede data til noget struktureret og kan forespørges på. Det sidder oven på et regulært udtryk (regex) og bruger tekstmønstre til at matche strenge i logfiler.

Som vi vil se i de følgende afsnit, gør brugen af ​​Grok en stor forskel, når det kommer til effektiv logstyring.

Uden Grok er dine logdata ustrukturerede

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

Uden Grok, når logs sendes fra Logstash til Elasticsearch og gengives i Kibana, vises de kun i meddelelsesværdien.

Det er svært at forespørge efter meningsfuld information i denne situation, fordi alle logdata er gemt i en enkelt nøgle. Det ville være bedre, hvis logmeddelelserne var bedre organiseret.

Ustrukturerede data fra logfiler

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

Hvis du ser nærmere på de rå data, vil du se, at de faktisk består af forskellige dele, hver adskilt af et mellemrum.

For mere erfarne udviklere kan du sikkert gætte, hvad hver af delene betyder, og hvad den logmeddelelse er fra API-kaldet. Præsentationen af ​​hvert punkt er skitseret nedenfor.

Struktureret syn på vores data

  • localhost == miljø
  • GET == metode
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == respons_status
  • ​46ms == respons_tid
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Som vi ser i strukturerede data, er der en ordre på ustrukturerede logfiler. Næste trin er softwarebehandling af rådata. Det er her Grok skinner.

Grok skabeloner

Indbyggede Grok skabeloner

Logstash kommer med over 100 indbyggede skabeloner til strukturering af ustrukturerede data. Du bør helt sikkert drage fordel af dette, når det er muligt for generelle syslogs som apache, linux, haproxy, aws og så videre.

Men hvad sker der, når du har brugerdefinerede logfiler som i eksemplet ovenfor? Du skal bygge din egen Grok-skabelon.

Brugerdefinerede Grok skabeloner

Du skal prøve at bygge din egen Grok skabelon. jeg brugte Grok Debugger и Grok mønstre.

Bemærk, at Grok-skabelonens syntaks er som følger: %{SYNTAX:SEMANTIC}

Det første, jeg prøvede at gøre, var at gå til fanen Opdag i Grok debugger. Jeg troede, det ville være fedt, hvis dette værktøj automatisk kunne generere et Grok-mønster, men det var ikke så nyttigt, da det kun fandt to matcher.

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

Ved at bruge denne opdagelse begyndte jeg at skabe min egen skabelon i Grok-debuggeren ved hjælp af syntaksen, der findes på Elastic Github-siden.

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

Efter at have leget med forskellige syntakser, var jeg endelig i stand til at strukturere logdataene, som jeg ville.

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

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

Original tekst:

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}

Hvad skete der til sidst

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

Med Grok-skabelonen og kortlagte data i hånden er det sidste trin at tilføje det til Logstash.

Opdatering af Logstash.conf-konfigurationsfilen

På serveren, hvor du installerede ELK-stakken, skal du gå til Logstash-konfigurationen:

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

Indsæt ændringerne.

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 gemt dine ændringer, skal du genstarte Logstash og kontrollere dens status for at sikre, at den stadig fungerer.

sudo service logstash restart
sudo service logstash status

Endelig, for at sikre, at ændringerne er trådt i kraft, Sørg for at opdatere dit Elasticsearch-indeks for Logstash i Kibana!

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

Med Grok er dine logdata struktureret!

Tips og tricks til at konvertere ustrukturerede data fra logfiler til ELK Stack ved hjælp af GROK i LogStash

Som vi kan se på billedet ovenfor, er Grok i stand til automatisk at matche logdata med Elasticsearch. Dette gør det nemmere at administrere logfiler og hurtigt forespørge oplysninger. I stedet for at grave gennem logfiler for at fejlfinde, kan du blot filtrere efter det, du leder efter, såsom et miljø eller en url.

Prøv Grok udtryk! Hvis du har en anden måde at gøre dette på eller har problemer med eksemplerne ovenfor, skal du bare skrive en kommentar nedenfor for at fortælle mig det.

Tak fordi du læste - og følg mig venligst her på Medium for flere interessante artikler om softwareudvikling!

ressourcer

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 Kilde link

Telegram kanal af Elasticsearch

Kilde: www.habr.com

Tilføj en kommentar