Jak se nezbláznit z logů? Aneb Elastic Stack ve Skrzu.

DEV tým Skrz.cz
5 min readFeb 27, 2019

--

Skrz.cz je již několik let běžící projekt. Za ta léta se nám nashromáždilo mnoho různých tasků, které dělají mnoho různých věcí. A mnoho různých věcí se zapisuje do mnoha různých logů, které nikdo nečte.

Úplně hezky se v tom nečte

Motivace č.1 — aplikační logy

A každý z těch tasků loguje mnoho různých věcí. Na to co a jak logovat nikde žádné guidelines nemáme. A tak každý logoval, co jak chtěl, na jaké úrovni chtěl. Dovedete si představit, co z toho nakonec vzniklo.

Mnoho souborů na několika serverch, kde se během dne v každém nastřádaly od jednotek KB až po stovky MB dat.

Co je to za data? Co se tam loguje? Je to užitečné? Proč je tam zalogováno tolik věcí s levelem ERROR? Jsou to opravdu chyby?

Otázky, otázky, samé otázky.

Motivace č.2 — access logy

Nginxové access logy skrývají velké množství zajímavých dat — umožní odpovědět na otázky jako například:

  • Nemáme dnes pomalejší web než včera?
  • Optimalizovali jsme URL https://skrz.cz/pobyty/destinace:cesko o kolik % dat jsou odpovědi menší?
  • Skáčou chyby pouze z nějakých prohlížečů?
  • Odkud k nám chodí traffic na tyhle divný URL?

Ale tahat to pomocí grepů, cutů, sedů atd., následné kopírovaní do spreadsheetů a vytváření grafů… No, jde to, ale není to úplně pohodlná a rychlá věc.

A vždycky musí člověk danou informaci proaktivně hledat.

Elastic Stack (dříve také ELK)

Na nějaké přednášce jsem se doslechl o ELKu, tak jsem si řekl, že to zní zajímavě a že to vyzkoušíme. Od té doby se změnil název, ale je to pořád stejná sada nástrojů se stejným účelem.

Princip fungování Elastic Stacku je poměrně jednoduchý:

  1. Sledují se určené logovací soubory
  2. Podle definovaných patternů se jednotlivé řádky zpracují
  3. Nalejí se do ElasticSearche
  4. Pomocí Kibany se v nich dá snadno hledat
  5. Dají se snadno vytvářet vizualizace a ty skládat do přehledných dashboardů
dashboardy našich produkčních serverů

Jdeme na to — co je potřeba nainstalovat a nastavit?

1. Nainstalujte si ELK

Nejprve je potřeba rozběhat samotný Elastic Stack. Je k tomu mnoho různých návodů, záleží, kde budete chtít Elastic Stack provozovat atp.:

Nám běhá Elastic Stack na samostatném dropletu v Digital Oceanu. Nedoporučoval bych monitoring spouštět na monitorovaném serveru.

2. Nastavte logstash

Jak nastavit logstash snadno dohledáte v oficiální dokumentaci. Dobré je kouknout se na část, kde se popisuje spolupráce s filebeatem a na konkrétní příklady zpracování běžných logovacích formátů.

Zde se děje veškerá logika a magie zpracování řádku ze souboru na jednotlivé fieldy. Překlad user agent stringů na konkrétní prohlížeče, IP geolokace a mnoho dalšího. Mnoho filtrů již existuje a co nenajdete, můžete si napsat :)

Nyní bychom měli mít připravený Elastic Stack, aby nám zpracovával logy. Teď už jen potřebujeme říct serverům, kde logy máme, aby logy posílaly na náš připravený stroj.

3. Připravte Filebeat

Takto třeba vypadá konfigurace našeho filebeatu na jednom ze serverů

POZOR, ten jediný se instaluje na servery, kde máte log soubory a ne tam, kde běhá Elastic Stack.

Jak filebeat nainstalovat najdete např. v oficiální dokumentaci. Filebeatu je potřeba nastavit inputy (odkud má číst logy) a outputy (kam logy posílat — u nás to bude připravený logstash).

Čeho stojí za to si všimnout? Už zde je možnost pomocí jednoduchých (nechceme zatěžovat produkci parsováním logů) patternů nějaké řádky vyházet (nechceme dělat zbytečný traffic) a posílat to, co není opravdu potřeba.

Filebeat je poměrně chytrý a poradí si bez problému s

  • Rotováním logů podle počtu (log, log.1, log.2, …)
  • Rotováním logů podle data (log-Y-m-d)
  • Výpadkem logstashe — pamatuje si, kde skončil a bude tam pokračovat, až zjistí, že logstash opět běží

4. Elastic Stack není nafukovací

Je dobré se také zamyslet nad tím, jakou dobu zpátky logy chcete mít k dispozici — podle toho samozřejmě budete muset zvolit konfiguraci serveru, na kterém vám poběží Elastic Stack.

Curator vám umožní jednoduše nakonfigurovat zavírání starých a mazání ještě starších indexů.

A teď už to jen spustit!

Pokud se vám podařilo všechno správně nakonfigurovat, tak byste měli v Kibaně (kde ji najdete záleží na tom, jak a kam jste nainstalovali Elastic Stack v prvním kroku) vidět první zprávy. Samozřejmě pokud nějaké zprávy odpovídající vašim pravidlům, spadly do logů.

A co teď s tím?

To už záleží jen na vás! V Kibaně se dají naklikat všemožné grafy a pokud byste potřebovali něco speciálního, pomocí Timelion máte možnosti téměř neomezené.

Pár tipů a rad nakonec

1. Buďte trpěliví

Pokud jste si dali Elastic Stack na nějaký slabší stroj, buďte shovívaví. Ve výsledku to pojede rychle, ale pokud měníte konfiguraci a zrestartujete všechno, může to někdy trvat i několik minut než vše naběhne.

2. Verzujte konfiguraci

Vytvořte si repo na konfiguraci a naházejte do něj všechno, co někde nastavujete a konfigurujete. Vyhnete se pak nepříjemným situacím, kdy si za půl roku něco omylem smažete a zaboha nevíte, jak to bylo nakonfigurované. Nebo něco změníte, zjistíte, že to nebyl krok správným směrem, ale už netušíte jak to bylo předtím.

3. Udělejte si deploy scripty

Máte-li spravované servery přes nějaký nástroj, použijte ten (ansible, terraform…). U nás deploy konfigurace filebeatu probíhá velmi jednoduše. Přes SCP nakopíruji aktuální verzi konfiguračního souboru z repa na správné místo na serveru a přes ssh zrestartuju požadovanou službu. Člověk nemusí přemýšlet, kde se služba nachází, kde má konfiguraci a jak se zrestartuje, ale pustí jednoduchý několikařádkový skriptík.

4. Vytvořte přehledné dashboardy s jasnými instrukcemi

V Kibaně jde kromě grafů vytvářet i markdown widgety, které si pak dáte na dashboardy. Z dashboardu by mělo být ihned jasné nejen to, že je někde problém, ale především, kde je problém, jak dohledat více informací.

5. Mějte dashboardy neustále na očích

Pokud budete mít krásné dashboardy, ale nikdo je nebude sledovat, budou trochu k ničemu. Koukejte na ně několikrát denně — budete vědět, jak vypadají v běžném stavu a poznáte když je něco “jinak”.

6. Začněte po malých krůčcích

Stejně jako se vším ostatním, co děláte — nesnažte se na první dobrou udělat 100% dashboard. Udělejte nějaký. Za pár dnů a po pár chybách a výpadcích uvidíte, co vám tam chybí, co byste ještě mohli sledovat a doplnit.

Zpracováváte logy pomocí nějakých jiných nástrojů? Máte tipy jak vytunit dashboardy v Kibaně? Řešíte nějak automatický alerting? A kolik dat takto zpracujete?

Napište nám do komentářů nebo na twitter.

A také stále hledáme nové kolegy. Nejsi to právě ty?!

--

--

DEV tým Skrz.cz

Blogují vývojáři Skrz.cz o všem, co zajímavého řeší při programování Skrz.cz / Sortado.pl (PHP, Front-end, Javascript, NodeJS, Redis, MySQL, Nginx, Elastic,..)