Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

Strukturování nestrukturovaných dat pomocí GROK

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

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

ELK Stack je zkratka pro tři projekty s otevřeným zdrojovým kódem: Elasticsearch, Logstash a Kibana. Tyto tři dohromady tvoří platformu pro správu protokolů.

  • Elasticsearch – je vyhledávací a analytický systém.
  • Logstash – to je serverový konvektor pro zpracování dat, který přijímá data z více zdrojů současně, transformuje je a poté je odesílá do „úložiště“, například Elasticsearch.
  • Kibana umožňuje uživatelům vizualizovat data pomocí diagramů a grafů v Elasticsearch.

Beats se objevil později a je lehkým odesílatelem dat. Zavedení Beats transformovalo Elk Stack na Elastic Stack, ale to není hlavní.

Tento článek se věnuje Groku, což je funkce v Logstash, která může transformovat vaše protokoly, než budou odeslány do úložiště. Pro naše účely budu mluvit pouze o zpracování dat z Logstash do Elasticsearch.

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

Grok je filtr uvnitř Logstash, který se používá k rozboru nestrukturovaných dat na něco strukturovaného a vyhledatelného. Leží nad regulárními výrazy (regex) a používá textové vzory k párování řetězců v protokolech.

Jak uvidíme v následujících sekcích, používání Groku je velmi důležité pro efektivní správu protokolů.

Bez Groku jsou vaše protokoly nestrukturované

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

Bez Groku, když jsou protokoly odesílány z Logstash do Elasticsearch a vizualizovány v Kibana, se objevují pouze ve zprávě.

Žádost o smysluplné informace je v této situaci obtížná, protože všechna protokolar jsou uchovávána pod jedním klíčem. Bylo by lepší, kdyby byly zprávy z protokolů lépe organizovány.

Nestrukturovaná data z protokolů

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

Pokud se pozorně podíváte na neupravená 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 si pravděpodobně dokážete odvodit, co která část znamená, a že se jedná o zprávu z API. Každá položka je níže uvedena.

Strukturovaný pohled na naše data

  • localhost == prostředí
  • GET == metoda
  • /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == stav_odpovědi
  • 46ms == čas_odpovědi
  • 5bc6e716b5d6cb35fc9687c0 == uživatelské_id

Jak vidíme ve strukturovaných datech, existuje pořadí pro nestrukturované protokoly. Dalším krokem je programové zpracování surových dat. Zde se Grok vyznačuje.

Grok šablony

Integrované šablony Grok

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

Ale co se stane, když máte vlastní protokoly, jako v příkladu výše? Musíte si vytvořit vlastní šablonu Grok.

Vlastní šablony Grok

Je potřeba experimentovat, abyste vytvořili vlastní šablonu Grok. Používal jsem Grok Debugger a Grok vzory.

Všimněte si, že syntaxe šablon Grok vypadá následovně: %{SYNTAX:SEMANTIC}

První věc, kterou jsem se pokusil udělat, bylo přejít na záložku Objev v Grok debuggeru. Myslel jsem, že by bylo skvělé, kdyby tento nástroj mohl automaticky generovat šablonu Grok, ale nebylo to příliš užitečné, protože našel pouze dvě shody.

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

Využitím tohoto objevu jsem začal vytvářet svou vlastní šablonu v Grok debuggeru, používající syntaxi nalezenou na stránce Github Elastic.

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

Hraním si s různými syntaxy jsem nakonec dokázal strukturovat data protokolu tak, jak jsem chtěl.

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

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

Zdrojový text:

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

Vzorek:

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

To, co se nakonec podařilo

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

Mít v rukou šablonu Grok a odpovídající data, poslední krok je přidat ji do Logstash.

Aktualizace souboru konfigurace Logstash.conf

Na serveru, na kterém jste nainstalovali stack 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

Nakonec, abyste se ujistili, že změny nabyly účinnosti, nezapomeňte aktualizovat index Elasticsearch pro Logstash v Kibana!

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

S Grok jsou vaše data z logů strukturována!

Tips and Recommendations for Transforming Unstructured Data from Logs in ELK Stack Using GROK in LogStash

Jak vidíme na výše uvedeném obrázku, Grok dokáže automaticky mapovat data z logů do Elasticsearch. To usnadňuje správu logů a rychlé vyhledávání informací. Místo toho, abyste procházeli soubory logů pro ladění, můžete jednoduše filtrovat to, co hledáte, jako je prostředí nebo url.

Zkuste dát Grok expression šanci! Pokud máte jiný způsob, jak to udělat, nebo pokud máte nějaké problémy s výše uvedenými příklady, neváhejte napsat komentář níže a dejte mi vědět.

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

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

Telegram kanál o Elasticsearch

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster