
Ahoj, jmenuji se Jevgenij, jsem týmový vedoucí B2B sekce v Sitimobil. Jedním z úkolů našeho týmu je podpora integrací pro objednávky taxi od partnerů a pro zajištění stabilního servisu musíme vždy chápat, co se děje v našich mikroslužbách. A k tomu je potřeba neustále sledovat logy.
V Sitimobilu pro práci s logy používáme ELK stack (ElasticSearch, Logstash, Kibana), a objem přicházejících dat je obrovský. Najít v tomto množství požadavky na problémy, které se mohou objevit po nasazení nového kódu, je docela složité. A pro jejich názorné zjištění má Kibana sekci Dashboard.
Na Habru je poměrně hodně článků s příklady, jak nastavit ELK stack pro získávání a uchovávání dat, ale ohledně vytváření Dashboardu aktuální materiály chybí. Proto chci ukázat, jak v Kibana vytvářet vizuální znázornění dat na základě přicházejících logů.
Nastavení
Aby to bylo názornější, vytvořil jsem Docker obraz s ELK a Filebeat. A umístil jsem do kontejneru malou v Go, která pro náš příklad bude generovat testovací logy. Podrobně popisovat konfiguraci ELK nebudu, na Habru je o tom dost napsáno.
Odkloňte repozitář s konfigurací docker-compose a nastaveními ELK a spouštíme ho příkazem docker-compose up. Záměrně nepřidávám klíč -d, abych viděl proces práce ELK stacku.
git clone https://github.com/et-soft/habr-elk
cd habr-elk
docker-compose up
Pokud je vše nastaveno správně, v logách uvidíme záznam (možná ne hned, proces spuštění kontejneru s celým stackem může trvat několik minut):
{"type":"log","@timestamp":"2020-09-20T05:55:14Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running at http://0:5601"}
Na adrese localhost:5061 by se měla otevřít Kibana.


Jediné, co potřebujeme nastavit, je vytvořit Index Pattern pro Kibana s informacemi o tom, která data je potřeba zobrazit. K tomu provedeme curl požadavek nebo uděláme řadu akcí v grafickém rozhraní.
$ curl -XPOST -D- 'http://localhost:5601/api/saved_objects/index-pattern'
-H 'Content-Type: application/json'
-H 'kbn-xsrf: true'
-d '{"attributes":{"title":"logstash-*","timeFieldName":"@timestamp"}}'
Vytvoření Index Pattern prostřednictvím grafického rozhraní
Pro nastavení vybíráme v levém menu sekci Discover a dostáváme se na stránku vytváření Index pattern.

Kliknutím na tlačítko „Create index pattern“ se dostáváme na stránku pro vytvoření indexu. Do pole „Index pattern name“ zadáváme „logstash-*“. Pokud je vše nastaveno správně, níže Kibana ukáže indexy, které spadají pod pravidlo.

Na další stránce vybíráme klíčové pole s časovým označením, v našem případě je to @timestamp.

Výsledkem bude stránka s nastavením indexu, ale nyní od nás nejsou vyžadovány žádné další akce.

Nyní se můžeme znovu vrátit do sekce Discover, kde uvidíme záznamy protokolů.

Dashboard
V levém menu klikněte na sekci pro vytvoření Dashboardu a dostanete se na odpovídající stránku.

Klikněte na "Create new dashboard" a dostanete se na stránku pro přidání objektů do Dashboardu.

Klikněte na tlačítko "Create new" a systém vám nabídne vybrat způsob zobrazení dat. V Kibana jich je velké množství, ale my se podíváme na vytvoření grafického zobrazení "Vertical Bar" a tabulkového "Data Table". Ostatní typy zobrazení se nastavují podobným způsobem.

Některé dostupné objekty mají štítky B a E — to znamená, že formát je experimentální nebo v beta testování. V průběhu času se formát může změnit nebo úplně zmizet z Kibany.
Vertikální sloupec
Pro příklad "Vertical Bar" vytvoříme histogram poměru úspěšných a neúspěšných stavů odpovědi našeho servisu. Po dokončení nastavení získáme následující graf:

K úspěšným budeme počítat všechny požadavky se stavem odpovědi = 400.
Pro vytvoření grafu "Vertical Bar" je nutné vybrat zdroj dat. Vyberte Index Pattern, který jsme vytvořili dříve.

Ve výchozím nastavení, po výběru zdroje dat, se zobrazí jeden souvislý graf. Nastavíme ho.

V bloku "Buckets" klikneme na tlačítko "Add", vybereme "X-axis" a nastavíme osu X. Na tuto osu umístíme časové značky příchozích záznamů do protokolu. V poli "Aggregation" vybereme "Date Histogram" a v poli "Field" zvolíme "@timestamp", což označuje časové pole. "Minimum interval" ponecháme v nastavení "Auto", aby se automaticky přizpůsoboval našemu zobrazení.

Po kliknutí na tlačítko "Update" uvidíme graf s počtem požadavků každých 30 sekund.

Nyní nastavíme sloupce po ose Y. Momentálně se zobrazuje celkový počet požadavků ve vybraném časovém intervalu.

Změníme hodnotu "Aggregation" na "Sum Bucket", což nám umožní sloučení dat o úspěšných a neúspěšných požadavcích. V bloku Bucket -> Aggregation vybíráme agregaci podle "Filters" a nastavíme filtraci podle "statusCode >= 400". A do pole "Custom label" zadáme naše názvy ukazatelů pro přehlednější zobrazení v legendě na grafu a v celém seznamu.

Po kliknutí na tlačítko "Update" pod blokem nastavení získáme graf s problematickými požadavky.

Pokud kliknete na kruh vedle legendy, otevře se okno, ve kterém můžete změnit barvu sloupců.

Nyní přidáme do grafu data o úspěšných dotazech. V sekci „Metrics“ klikněte na tlačítko „Přidat“ a vyberte „Y-axis“.

V nově vytvořené metrice nastavte stejné parametry jako pro chybnou dotazy. Pouze ve filtru uveďte „statusCode < 400“.

Změnou barvy nového sloupce získáme zobrazení poměru problematických a úspěšných dotazů.

Kliknutím na tlačítko „Uložit“ v horní části obrazovky a zadáním názvu uvidíme na Dashboardu první graf.

Data Table
Nyní se podívejme na tabulkové zobrazení „Data Table“. Vytvoříme tabulku se seznamem všech URL, ke kterým byly požadavky, a počtem těchto požadavků. Stejně jako v případě s Vertikálním sloupem, nejprve vybereme zdroj dat.

Poté se na obrazovce zobrazí tabulka s jedním sloupcem, který ukazuje celkový počet požadavků za zvolený časový interval.

Budeme měnit pouze blok „Buckets“. Klikněte na tlačítko „Přidat“ a vyberte „Rozdělit řádky“.

V poli „Agregace“ vyberte „Terms“. A v zobrazeném poli „Field“ vyberte „url.keyword“.

Zadáním hodnoty „Url“ do pole „Vlastní popis“ a kliknutím na „Aktualizovat“ získáme požadovanou tabulku s počtem požadavků pro každou z URL za zvolený časový interval.

V horní části obrazovky znova klikneme na tlačítko „Uložit“ a uvedeme název tabulky, například Urls. Vrátíme se zpět na Dashboard a uvidíme obě vytvořená zobrazení.

Práce s Dashboardem
Při vytvoření Dashboardu jsme v nastavení objektů zobrazení nastavili pouze základní vizuální parametry. Není smysluplné uvádět v objektech údaje pro filtry, jako jsou „časový rozsah“, „filtrování podle useragentu“, „filtrování podle země požadavku“ atd. Je mnohem pohodlnější zadat požadovaný časový interval nebo stanovit nezbytné filtrování na panelu dotazů, který se nachází nad objekty.
![]()
Filtry přidané na tomto panelu se aplikují na celý Dashboard a všechny objekty zobrazení se přestaví podle aktuálních filtrovaných dat.
Závěr
Kibana je mocný nástroj, který umožňuje vizualizovat jakákoliv data pohodlným způsobem. Snažil jsem se ukázat nastavení dvou základních typů zobrazení. Ale i další typy se nastavují podobným způsobem. A množství nastavení, které jsem nechal „za scénou“, vám umožní velmi flexibilně upravit grafy podle vašich potřeb.
Zdroj: habr.com
