Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

Strukturování nestrukturovaných dat pomocí GROK

Pokud používáte zásobník Elastic (ELK) a máte zájem o mapování vlastních protokolů Logstash na Elasticsearch, pak je tento příspěvek pro vás.

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

ELK stack je zkratka pro tři open source projekty: Elasticsearch, Logstash a Kibana. Společně tvoří platformu pro správu protokolů.

  • Elastickýsearch je vyhledávací a analytický systém.
  • Logstash je kanál pro zpracování dat na straně serveru, který přijímá data z více zdrojů současně, transformuje je a poté je posílá do „skrýše“, jako je Elasticsearch.
  • Kibana umožňuje uživatelům vizualizovat data pomocí tabulek a grafů v Elasticsearch.

Beats přišel později a je lehkým odesílatelem dat. Zavedení Beats proměnilo Elk Stack na Elastic Stack, ale o to nejde.

Tento článek je o Groku, což je funkce v Logstash, která dokáže transformovat vaše protokoly předtím, než jsou odeslány do skrýše. Pro naše účely budu mluvit pouze o zpracování dat z Logstashe do Elasticsearch.

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

Grok je filtr uvnitř Logstashe, který se používá k analýze nestrukturovaných dat do něčeho strukturovaného a dotazovatelného. Je umístěn nad regulárním výrazem (regulární výraz) a používá textové vzory k přiřazování řetězců v souborech protokolu.

Jak uvidíme v následujících částech, používání Groku znamená velký rozdíl, pokud jde o efektivní správu protokolů.

Bez Groka jsou vaše logová data nestrukturovaná

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

Bez Groka se při odesílání protokolů z Logstashe do Elasticsearch a vykreslování v Kibaně zobrazují pouze v hodnotě zprávy.

Dotazování na smysluplné informace v této situaci je obtížné, protože všechna data protokolu jsou uložena v jediném klíči. Bylo by lepší, kdyby zprávy protokolu byly lépe organizovány.

Nestrukturovaná data z protokolů

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

Pokud se pozorně podíváte na nezpracovaná data, uvidíte, že se ve skutečnosti skládají z různých částí, z nichž každá je oddělena mezerou.

Pro zkušenější vývojáře pravděpodobně uhodnete, co která z částí znamená a co je ta zpráva protokolu z volání API. Prezentace každé položky je popsána níže.

Strukturovaný pohled na naše data

  • localhost == prostředí
  • GET == metoda
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == stav_odpovědi
  • ​ 46 ms == doba odezvy
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Jak vidíme u strukturovaných dat, existuje objednávka pro nestrukturované protokoly. Dalším krokem je softwarové zpracování nezpracovaných dat. Tady Grok září.

Šablony Grok

Vestavěné šablony Grok

Logstash přichází s více než 100 vestavěnými šablonami pro strukturování nestrukturovaných dat. Určitě byste toho měli využít, kdykoli je to možné, pro obecné syslogy, jako je apache, linux, haproxy, aws a tak dále.

Co se však stane, když máte vlastní protokoly jako ve výše uvedeném příkladu? Musíte si vytvořit svou vlastní šablonu Grok.

Vlastní šablony Grok

Musíte se pokusit vytvořit vlastní šablonu Grok. Použil jsem Debugger Grok и Grokovy vzory.

Všimněte si, že syntaxe šablony Grok je následující: %{SYNTAX:SEMANTIC}

První věc, o kterou jsem se pokusil, bylo přejít na kartu Discover v ladicím programu Grok. Myslel jsem, že by bylo skvělé, kdyby tento nástroj uměl automaticky generovat Grokův vzor, ​​ale nebylo to příliš užitečné, protože našel pouze dvě shody.

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

Pomocí tohoto objevu jsem začal vytvářet vlastní šablonu v ladicím programu Grok pomocí syntaxe nalezené na stránce Elastic Github.

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

Po hraní si s různými syntaxemi jsem byl konečně schopen strukturovat data protokolu tak, jak jsem chtěl.

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí 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}

Co se stalo na konci

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

Se šablonou Grok a namapovanými daty v ruce je posledním krokem přidání do Logstashe.

Aktualizace konfiguračního souboru Logstash.conf

Na serveru, kde jste nainstalovali zásobník ELK, přejděte do konfigurace Logstash:

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

Vložte změny.

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í změn restartujte Logstash a zkontrolujte jeho stav, abyste se ujistili, že stále funguje.

sudo service logstash restart
sudo service logstash status

Abyste se ujistili, že se změny projevily, Nezapomeňte aktualizovat svůj index Elasticsearch pro Logstash v Kibaně!

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

S Grokem jsou vaše logová data strukturována!

Tipy a triky pro převod nestrukturovaných dat z protokolů do ELK Stack pomocí GROK v LogStash

Jak můžeme vidět na obrázku výše, Grok je schopen automaticky porovnávat data protokolu s Elasticsearch. To usnadňuje správu protokolů a rychlé dotazy na informace. Namísto prohledávání souborů protokolu za účelem ladění můžete jednoduše filtrovat podle toho, co hledáte, například podle prostředí nebo adresy URL.

Vyzkoušejte Grokovy výrazy! Pokud máte jiný způsob, jak to udělat nebo máte nějaké problémy s výše uvedenými příklady, napište mi komentář níže a dejte mi vědět.

Děkuji za přečtení – a prosím, sledujte mě zde na médiu pro další zajímavé články o softwarovém inženýrství!

Ресурсы

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 Elastickýsearch

Zdroj: www.habr.com

Přidat komentář