Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Strukturering van ongestruktureerde data met GROK

As jy die Elastic Stack (ELK) gebruik en belangstel om persoonlike Logstash-logboeke na Elasticsearch te karteer, dan is hierdie pos vir jou.

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Die ELK-stapel is 'n akroniem vir drie oopbronprojekte: Elasticsearch, Logstash en Kibana. Saam vorm hulle 'n logbestuurplatform.

  • Elasticsearch is 'n soek- en analitiese stelsel.
  • logstash is 'n bediener-kant data verwerking pyplyn wat data van verskeie bronne op dieselfde tyd aanvaar, dit transformeer, en dan stuur dit na 'n "stash" soos Elasticsearch.
  • kibana laat gebruikers toe om data te visualiseer met behulp van grafieke en grafieke in Elasticsearch.

Slae het later verskyn en is 'n maklike dataversender. Die bekendstelling van Beats het die Elk Stack in 'n Elastic Stack omskep, maar dit is nie die punt nie.

Hierdie artikel handel oor Grok, wat 'n kenmerk in Logstash is wat jou logs kan transformeer voordat dit na die stash gestuur word. Vir ons doeleindes sal ek net praat oor die verwerking van data van Logstash na Elasticsearch.

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Grok is 'n filter binne Logstash wat gebruik word om ongestruktureerde data te ontleed in iets gestruktureerd en navraagbaar. Dit sit bo-op 'n gereelde uitdrukking (regex) en gebruik tekspatrone om stringe in loglêers te pas.

Soos ons in die volgende afdelings sal sien, gaan die gebruik van Grok 'n lang pad wanneer dit kom by doeltreffende logbestuur.

Sonder Grok is u logdata ongestruktureerd

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Sonder Grok, wanneer logs vanaf Logstash na Elasticsearch gestuur word en in Kibana gelewer word, verskyn dit slegs in die boodskapwaarde.

Dit is moeilik om betekenisvolle inligting in hierdie situasie te bevraagteken omdat alle logdata in dieselfde sleutel gestoor word. Dit sal beter wees as die logboodskappe beter georganiseer is.

Ongestruktureerde data uit logs

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

As jy die rou data van nader bekyk, sal jy sien dat dit eintlik uit verskillende dele bestaan, elk geskei deur 'n spasie.

Vir meer ervare ontwikkelaars kan jy waarskynlik raai wat elk van die dele beteken en wat die logboodskap van die API-oproep is. Die aanbieding van elke item word hieronder uiteengesit.

Gestruktureerde siening van ons data

  • localhost == omgewing
  • GET == metode
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == reaksie_status
  • ​46ms == reaksie_tyd
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Soos ons in gestruktureerde data sien, is daar 'n bestelling vir ongestruktureerde logs. Die volgende stap is om die rou data programmaties te verwerk. Dis waar Grock skitter.

Grok Sjablone

Ingeboude Grok-sjablone

Logstash kom met meer as 100 ingeboude sjablone vir die strukturering van ongestruktureerde data. Jy moet beslis hieruit voordeel trek wanneer moontlik vir algemene syslogs soos apache, linux, haproxy, aws ensovoorts.

Wat gebeur egter as u gepasmaakte logs het soos in die voorbeeld hierbo? Jy moet jou eie Grok-sjabloon bou.

Grok persoonlike sjablone

Moet probeer om jou eie Grok-sjabloon te bou. ek het gebruik Grok Ontfouter и Grok patrone.

Let daarop dat die sintaksis vir Grok-sjablone soos volg is: %{SYNTAX:SEMANTIC}

Die eerste ding wat ek probeer doen het, was om na die blad te gaan Vind in die Grok-ontfouter. Ek het gedink dit sal wonderlik wees as hierdie instrument outomaties 'n Grok-patroon kan genereer, maar dit was nie baie nuttig nie, aangesien dit net twee wedstryde gevind het.

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Deur hierdie ontdekking te gebruik, het ek my eie sjabloon op die Grok-ontfouter begin bou deur die sintaksis op die Elastic Github-bladsy te gebruik.

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Nadat ek met verskillende sintaksis gespeel het, kon ek uiteindelik die logdata struktureer soos ek wou.

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Skakel na die Grok-ontfouter https://grokdebug.herokuapp.com/

Oorspronklike teks:

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

patroon:

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

Wat het op die ou end gebeur

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

Met die Grok-sjabloon en gekarteerde data in die hand, is die laaste stap om dit by Logstash te voeg.

Dateer die Logstash.conf-konfigurasielêer op

Op die bediener waar jy die ELK-stapel geïnstalleer het, gaan na die Logstash-konfigurasie:

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

Plak jou veranderinge.

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

Nadat u die veranderinge gestoor het, herbegin Logstash en kontroleer die status daarvan om seker te maak dit werk steeds.

sudo service logstash restart
sudo service logstash status

Ten slotte, om seker te maak dat die veranderinge in werking getree het, maak seker dat jy die Elasticsearch-indeks vir Logstash in Kibana opdateer!

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Met Grok is u logdata gestruktureer!

Wenke en truuks vir die omskakeling van ongestruktureerde data van logs na ELK Stack met GROK in Logstash

Soos ons in die prent hierbo kan sien, is Grok in staat om logdata outomaties na Elasticsearch te karteer. Dit maak dit makliker om logs te bestuur en inligting vinnig navraag te doen. In plaas daarvan om deur loglêers te vroetel om te ontfout, kan jy eenvoudig uitfiltreer waarna jy soek, soos 'n omgewing of 'n url.

Probeer om Grok-uitdrukkings te probeer! As jy 'n ander manier het om dit te doen, of enige probleme met die voorbeelde hierbo het, los 'n opmerking hieronder om my te laat weet.

Dankie vir die lees - en volg my asseblief hier op Medium vir meer interessante sagteware-ingenieurswese-artikels!

Ресурсы

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 Skakel na bron

Telegram kanaal deur Elasticsearch

Bron: will.com

Voeg 'n opmerking