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.
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.
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á
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
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.
Pomocí tohoto objevu jsem začal vytvářet vlastní šablonu v ladicím programu Grok pomocí syntaxe nalezené na stránce Elastic Github.
Po hraní si s různými syntaxemi jsem byl konečně schopen strukturovat data protokolu tak, jak jsem chtěl.
Odkaz na Grok Debugger
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ě!
S Grokem jsou vaše logová data strukturována!
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í!
Ресурсы
Telegramový kanál od
Zdroj: www.habr.com