Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

Štruktúrovanie neštruktúrovaných údajov pomocou GROK

Ak používate zásobník Elastic (ELK) a máte záujem o mapovanie vlastných protokolov Logstash do Elasticsearch, tento príspevok je pre vás.

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

ELK stack je skratka pre tri open source projekty: Elasticsearch, Logstash a Kibana. Spolu tvoria platformu na správu protokolov.

  • ElasticSearch je vyhľadávací a analytický systém.
  • Logstash je kanál na spracovanie údajov na strane servera, ktorý súčasne prijíma údaje z viacerých zdrojov, transformuje ich a potom ich odosiela do „skrýše“, ako je napríklad Elasticsearch.
  • Kibana umožňuje používateľom vizualizovať dáta pomocou tabuliek a grafov v Elasticsearch.

beats prišiel neskôr a je ľahkým odosielateľom údajov. Uvedenie Beats premenilo Elk Stack na Elastic Stack, ale o to nejde.

Tento článok je o Groku, čo je funkcia v Logstash, ktorá dokáže transformovať vaše protokoly pred ich odoslaním do skrýše. Pre naše účely budem hovoriť len o spracovaní údajov z Logstashe do Elasticsearch.

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

Grok je filter vo vnútri Logstash, ktorý sa používa na analýzu neštruktúrovaných údajov do niečoho štruktúrovaného a dotazovateľného. Nachádza sa nad regulárnym výrazom (regex) a používa textové vzory na porovnávanie reťazcov v protokolových súboroch.

Ako uvidíme v nasledujúcich častiach, používanie Groku predstavuje veľký rozdiel, pokiaľ ide o efektívnu správu protokolov.

Bez Groka sú vaše údaje denníka neštruktúrované

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

Bez Groka, keď sa protokoly odosielajú z Logstashe do Elasticsearch a vykresľujú sa v Kibane, zobrazia sa iba v hodnote správy.

Dopytovanie na zmysluplné informácie v tejto situácii je ťažké, pretože všetky údaje protokolu sú uložené v jedinom kľúči. Bolo by lepšie, keby boli správy denníka lepšie usporiadané.

Neštruktúrované údaje z denníkov

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

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

Pre skúsenejších vývojárov môžete pravdepodobne uhádnuť, čo každá z častí znamená a čo je táto správa protokolu z volania API. Prezentácia každej položky je uvedená nižšie.

Štruktúrovaný pohľad na naše údaje

  • localhost == prostredie
  • GET == metóda
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == stav_odpovede
  • ​ 46 ms == čas odozvy
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Ako vidíme v štruktúrovaných údajoch, existuje poradie pre neštruktúrované protokoly. Ďalším krokom je softvérové ​​spracovanie nespracovaných údajov. Tu žiari Grok.

Grok šablóny

Vstavané šablóny Grok

Logstash prichádza s viac ako 100 vstavanými šablónami na štruktúrovanie neštruktúrovaných údajov. Určite by ste to mali využiť vždy, keď je to možné, pre všeobecné syslogy, ako sú apache, linux, haproxy, aws atď.

Čo sa však stane, keď máte vlastné protokoly ako v príklade vyššie? Musíte si vytvoriť svoju vlastnú šablónu Grok.

Vlastné šablóny Grok

Musíte sa pokúsiť vytvoriť vlastnú šablónu Grok. použil som Grok Debugger и Grokove vzory.

Všimnite si, že syntax šablóny Grok je nasledovná: %{SYNTAX:SEMANTIC}

Prvá vec, ktorú som sa pokúsil urobiť, bolo prejsť na kartu Discover v ladiacom nástroji Grok. Myslel som si, že by bolo skvelé, keby tento nástroj dokázal automaticky vygenerovať Grokov vzor, ​​ale nebolo to príliš užitočné, pretože našiel iba dve zhody.

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

Pomocou tohto objavu som začal vytvárať svoju vlastnú šablónu v ladiacom nástroji Grok pomocou syntaxe, ktorú nájdete na stránke Elastic Github.

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

Po hraní sa s rôznymi syntaxami som bol konečne schopný štruktúrovať údaje denníka tak, ako som chcel.

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

Odkaz na Grok Debugger https://grokdebug.herokuapp.com/

Pôvodný text:

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

vzor:

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

Čo sa stalo na konci

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

So šablónou Grok a mapovanými údajmi v ruke je posledným krokom ich pridanie do Logstashe.

Aktualizuje sa konfiguračný súbor Logstash.conf

Na serveri, kde ste nainštalovali zásobník ELK, prejdite na konfiguráciu Logstash:

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

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

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ť svoj index Elasticsearch pre Logstash v Kibane!

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

S Grokom sú vaše údaje denníka štruktúrované!

Tipy a triky na konverziu neštruktúrovaných údajov z protokolov do ELK Stack pomocou GROK v LogStash

Ako môžeme vidieť na obrázku vyššie, Grok je schopný automaticky porovnávať údaje denníka s Elasticsearch. To uľahčuje správu protokolov a rýchle vyhľadávanie informácií. Namiesto prehrabávania sa v protokolových súboroch na ladenie môžete jednoducho filtrovať podľa toho, čo hľadáte, ako je napríklad prostredie alebo adresa URL.

Vyskúšajte Grokove výrazy! Ak máte iný spôsob, ako to urobiť alebo máte nejaké problémy s vyššie uvedenými príkladmi, napíšte komentár nižšie a dajte mi vedieť.

Ďakujem za prečítanie – a sledujte ma tu na médiu, kde nájdete ď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/

PS Odkaz na zdroj

Telegramový kanál od ElasticSearch

Zdroj: hab.com

Pridať komentár