Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

Strukturering av ustrukturerte data med GROK

Hvis du bruker Elastic (ELK)-stabelen og er interessert i å kartlegge tilpassede Logstash-logger til Elasticsearch, så er dette innlegget for deg.

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

ELK-stakken er et akronym for tre åpen kildekode-prosjekter: Elasticsearch, Logstash og Kibana. Sammen danner de en loggadministrasjonsplattform.

  • Elasticsearch er et søke- og analysesystem.
  • Logstash er en databehandlingspipeline på serversiden som tar inn data fra flere kilder samtidig, transformerer dem og deretter sender dem til en "stash" som Elasticsearch.
  • Kibana lar brukere visualisere data ved hjelp av diagrammer og grafer i Elasticsearch.

Beats kom senere og er en lett dataavsender. Introduksjonen av Beats forvandlet Elk Stack til Elastic Stack, men det er ikke poenget.

Denne artikkelen handler om Grok, som er en funksjon i Logstash som kan transformere loggene dine før de sendes til stash. For våre formål vil jeg kun snakke om behandling av data fra Logstash til Elasticsearch.

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

Grok er et filter inne i Logstash som brukes til å analysere ustrukturerte data til noe strukturert og søkbart. Den sitter på toppen av et regulært uttrykk (regex) og bruker tekstmønstre for å matche strenger i loggfiler.

Som vi vil se i de følgende avsnittene, gjør bruk av Grok en stor forskjell når det gjelder effektiv loggadministrasjon.

Uten Grok er loggdataene dine ustrukturerte

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

Uten Grok, når logger sendes fra Logstash til Elasticsearch og gjengis i Kibana, vises de bare i meldingsverdien.

Å spørre etter meningsfull informasjon i denne situasjonen er vanskelig fordi alle loggdata er lagret i en enkelt nøkkel. Det ville vært bedre om loggmeldingene var bedre organisert.

Ustrukturerte data fra logger

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

Hvis du ser nøye på rådataene, vil du se at de faktisk består av forskjellige deler, hver atskilt med et mellomrom.

For mer erfarne utviklere kan du sannsynligvis gjette hva hver av delene betyr og hva den loggmeldingen er fra API-kallet. Presentasjonen av hvert element er skissert nedenfor.

Strukturert syn på dataene våre

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

Som vi ser i strukturerte data er det en rekkefølge på ustrukturerte logger. Det neste trinnet er programvarebehandling av rådata. Det er her Grok skinner.

Grok maler

Innebygde Grok-maler

Logstash kommer med over 100 innebygde maler for strukturering av ustrukturerte data. Du bør definitivt dra nytte av dette når det er mulig for generelle syslogs som apache, linux, haproxy, aws og så videre.

Men hva skjer når du har tilpassede logger som i eksempelet ovenfor? Du må bygge din egen Grok-mal.

Egendefinerte Grok-maler

Du må prøve å bygge din egen Grok-mal. jeg brukte Grok Debugger и Grok mønstre.

Merk at Grok-malsyntaksen er som følger: %{SYNTAX:SEMANTIC}

Det første jeg prøvde å gjøre var å gå til fanen Utforsk i Grok debugger. Jeg trodde det ville være kult om dette verktøyet automatisk kunne generere et Grok-mønster, men det var ikke så nyttig siden det bare fant to treff.

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

Ved å bruke denne oppdagelsen begynte jeg å lage min egen mal i Grok debugger ved å bruke syntaksen som finnes på Elastic Github-siden.

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

Etter å ha lekt litt med forskjellige syntakser, klarte jeg endelig å strukturere loggdataene slik jeg ønsket.

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

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

Originaltekst:

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}

Hva skjedde på slutten

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

Med Grok-malen og kartlagte data i hånden, er det siste trinnet å legge den til Logstash.

Oppdatering av Logstash.conf-konfigurasjonsfilen

På serveren der du installerte ELK-stakken, gå til Logstash-konfigurasjonen:

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

Lim inn endringene.

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" ]
  }
}

Etter å ha lagret endringene, start Logstash på nytt og kontroller statusen for å sikre at den fortsatt fungerer.

sudo service logstash restart
sudo service logstash status

Til slutt, for å sikre at endringene har trådt i kraft, Sørg for å oppdatere din Elasticsearch-indeks for Logstash i Kibana!

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

Med Grok er loggdataene dine strukturert!

Tips og triks for å konvertere ustrukturerte data fra logger til ELK Stack ved hjelp av GROK i LogStash

Som vi kan se på bildet ovenfor, er Grok i stand til automatisk å matche loggdata med Elasticsearch. Dette gjør det enklere å administrere logger og raskt søke etter informasjon. I stedet for å grave gjennom loggfiler for å feilsøke, kan du ganske enkelt filtrere etter det du leter etter, for eksempel et miljø eller en url.

Gi Grok-uttrykk en sjanse! Hvis du har en annen måte å gjøre dette på eller har problemer med eksemplene ovenfor, er det bare å skrive en kommentar nedenfor for å gi meg beskjed.

Takk for at du leste - og følg meg her på Medium for flere interessante artikler om programvareutvikling!

Ресурсы

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 Kildelink

Telegramkanal av Elasticsearch

Kilde: www.habr.com

Legg til en kommentar