Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Štruktúrovanie nestruktúrovaných údajov pomocou GROK

Ak používate Elastic stack (ELK) a máte záujem o mapovanie používateľských denníkov Logstash na Elasticsearch, tento príspevok je pre vás.

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Zostava ELK je skratka pre tri projekty s otvoreným zdrojom: Elasticsearch, Logstash a Kibana. Spoločne tvoria platformu na správu denníkov.

  • Elasticsearch – je vyhľadávací a analytický systém.
  • Logstash – je serverový spracovateľský pipeline, ktorý súčasne prijíma údaje z viacerých zdrojov, transformuje ich a potom ich odosiela do "skladu", napríklad Elasticsearch.
  • Kibana umožňuje používateľom vizualizovať údaje prostredníctvom grafov a diagramov v Elasticsearch.

Beats sa objavil neskôr a je to ľahký agent na prenos údajov. Zavedenie Beats transformovalo ELK stack na Elastic stack, ale to nie je hlavné.

Tento článok je venovaný Grok, funkcii v Logstash, ktorá dokáže transformovať vaše denníky pred ich odoslaním do skladu. Pre naše účely sa budem zaoberať len spracovaním údajov z Logstash do Elasticsearch.

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Grok je filter v Logstash, ktorý sa používa na rozobranie nestruktúrovaných údajov na niečo štruktúrované a dotazovateľné. Je založený na regulárnych výrazoch (regex) a používa textové šablóny na porovnávanie riadkov v denníkoch.

Ako uvidíme v nasledujúcich častiach, používanie Grok má veľký význam, pokiaľ ide o efektívne spravovanie denníkov.

Bez Grok sú vaše údaje denníka nestruktúrované.

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Bez Grok, keď sa denníky odosielajú z Logstash do Elasticsearch a vizualizujú v Kibana, zobrazujú sa iba ako hodnoty správ.

Získanie relevantných informácií v tejto situácii je obtiažne, pretože všetky údaje denníka sú uložené v jednom kľúči. Bolo by lepšie, keby boli denníkové správy lepšie organizované.

Nestruktúrované údaje z logov

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

Ak sa pozriete na surové údaje, uvidíte, že sa v skutočnosti skladajú z rôznych častí, z ktorých každá je oddelená medzerou.

Pre skúsenejších vývojárov pravdepodobne dokážete uhádnuť, čo znamená každá z týchto častí a že toto je denník správy z API. Zobrazenie každej položky je uvedené nižšie.

Štruktúrovaný pohľad našich údajov

  • localhost == prostredie
  • GET == metóda
  • /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == stav_odpovede
  • 46ms == čas_odpovede
  • 5bc6e716b5d6cb35fc9687c0 == užívateľské_id

Ako vidíme v štruktúrovaných dátach, existuje poradie pre neštruktúrované záznamy. Ďalším krokom je programové spracovanie surových dát. Tu sa Grok ukazuje v najlepšom svetle.

Šablóny Grok

Logstash prichádza s viac ako 100 vstavanými šablónami na štruktúrovanie neštruktúrovaných dát. Určite by ste mali využiť túto výhodu, keď je to možné pre bežné systémové záznamy, ako sú apache, linux, haproxy, aws a tak ďalej.

Avšak, čo sa stane, keď máte používateľské záznamy, ako v uvedenom príklade? Musíte si vytvoriť vlastnú šablónu Grok.

Vlastné šablóny Grok

Musíte sa pokúsiť vytvoriť vlastnú šablónu Grok. Použil som

Grok Debugger Grok Patterns a Všimnite si, že syntax šablón Grok vyzerá takto:.

%{SYNTAX:SEMANTIC} Prvá vec, ktorú som sa pokúsil urobiť, bolo prejsť na kartu

Discover v debuggere Grok. Myslel som si, že by bolo skvelé, ak by tento nástroj mohol automaticky generovať šablónu Grok, ale nebolo to príliš užitočné, pretože našiel iba dve zhody. Využívajúc tento objav, začal som vytvárať svoju vlastnú šablónu v debuggere Grok, pomocou syntaxu nájdeného na stránke Github Elastic.

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Hraním s rôznymi syntaktickými tvarmi som sa nakoniec podarilo štruktúrovať dáta záznamu tak, ako som chcel.

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Odkaz na debugger Grok

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Zdrovy text: https://grokdebug.herokuapp.com/

Pattern:

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

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

To, čo sa na konci podarilo

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

Majúc v rukách šablónu Grok a zmapované dáta, posledný krok je pridať ju do Logstash.

Aktualizácia konfiguračného súboru Logstash.conf

Na serveri, na ktorom ste nainštalovali stack ELK, prejdite ku konfigurácii Logstash:

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

Vložte zmeny.

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

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

Po uložení zmien reštartujte Logstash a skontrolujte jeho stav, aby ste sa uistili, že stále funguje.

sudo service logstash restart
sudo service logstash status

Nakoniec, aby ste sa uistili, že zmeny nadobudli účinnosť, nezabudnite aktualizovať index Elasticsearch pre Logstash v Kibane!

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

S Grok sú vaše dáta z logov štruktúrované!

Tipy a odporúčania na transformáciu štruktúrovaných údajov z logov do ELK Stack pomocou GROK v LogStash

Ako vidíme na obrázku vyššie, Grok dokáže automaticky mapovať dáta protokolu na Elasticsearch. To uľahčuje správu protokolov a rýchle vyhľadávanie informácií. Namiesto toho, aby ste prehľadávali súbory protokolov kvôli ladení, môžete jednoducho filtrovať to, čo hľadáte, ako napríklad prostredie alebo url adresu.

Skúste dať Grok expressions šancu! Ak máte iný spôsob, ako to urobiť, alebo máte nejaké problémy s vyššie uvedenými príkladmi, jednoducho napíšte komentár nižšie, aby ste ma o tom informovali.

Ďakujem za čítanie — a, prosím, sledujte ma tu na Medium pre ďalšie zaujímavé články o softvérovom inžinierstve!

Zdroje

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/

P.S Odkaz na zdroj

Telegramový kanál o Elasticsearch

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster