ELK Stack, dobre praktyki zarządzania logami

 

Cat | tail | grep – nierzadko jest to dla wielu osób podstawowy zestaw komend do wyszukiwania pewnych informacji w logach. Rozwijając jakąkolwiek aplikację, tworzymy pewien ekosystem składający się wielu usług, generujących własne pliki rejestru zdarzeń w różnych formatach. Na przykład w pierwszej lepszej aplikacji którą rozwijałem informacje rejestrowane są przez:

  • serwer proxy – NGINX
  • serwer http – Tomcat
  • bazę danych – PostgrteSQL
  • no i aplikację.

Już przy tak podstawowym zestawie usług, generowanych informacji jest ogrom. Przegląd i analiza takich logów jest dosyć problematyczna. Jeszcze pół biedy, gdy wszystkie z tych danych znajdują się na jednym serwerze.

Jak nad tym zapanować? W tym artykule przedstawię open source’owy zestaw narzędzi służących zarządzania logami ELK Stack w skład którego wchodzą:

  • Elasticsearch – silnik wyszukiwania pełnotekstowego oparty na Apache Lucene.
  • Logstash – narzędzie przetwarzające, filtrujące, normalizujące i wysyłające gdzieś logi (w naszym przypadku do Elasticsearch’a).
  • Kibana – interfejs, aplikacja webowa do przeglądania i wizualizacji logów w czasie rzeczywistym.

W poniższym artykule zaprezentuję przykład aplikacji wykorzystującej Javovy Log4J wysyłającej do Logstasha logi za pomocą SocketAppendera (na potrzeby wpisu w Windowsie 10).

Zaczynajmy, jak zwykle bez zbędnego rozpisywania się.

Instalujemy zestaw narzędzi

Ze strony www.elastic.co pobieramy opisywane wyżej trzy narzędzia:

  1. Elasticsearch
  2. Logstash
  3. Kibana

Konfiguracja Elasticsearcha

Ustawienia znajdują się w pliku /config/elasticsearch.yml. Na potrzeby tego wpisy nie było konieczne wprowadzania w nim jakichkolwiek zmian.

Uruchamiamy silnik:

Sprawdzamy status uruchamiając przeglądarkę przechodząc pod adres: http://localhost:9200/.

Przykładowa odpowiedź:

Konfiguracja Logstasha

Tworzymy nowy plik konfiguracji: config/logstash.conf ustawiając serwer do odbioru danych z log4j na porcie 3456:

Jeśli będziemy w aplikacji wykorzystywać bibliotekę log4j w wersji 1.2.17, musimy w pliku \logstash-core\lib\logstash-core_jars.rb zakomentować jedną linię:

W przeciwnym wypadku logi nie będą poprawnie odbierane.

Uruchamiamy:

Konfiguracja Kibany

Uruchamiamy:

W przeglądarce przechodzimy pod adres: http://localhost:5601/

Na pierwszym ekranie klikamy w przycisk „Create” aby dodać pole @timestamp.

Konfiguracja Log4J i SocketAppendera

Tworzymy przykładowy plik konfiguracyjny log4j.properties:

A następnie przykładową klasę wysyłającą komunikaty:

Co 10 sekund zostanie zarejestrowany log error ze stack trace’em.

Zobaczmy

Uruchamiamy kolejno Elasticsearcha, Logstasha, Kibanę i naszą przykładową aplikację wysyłającą logi.
Przechodzimy do zakładki Discover w Kibanie i widzimy w czasie rzeczywistym wszystkie zdarzenia:

Możemy zdefiniować własne kolumny przeglądu wybierając je z listy po lewej stronie:

Bardzo szybko wyszukujemy interesujące nas zdarzenia. Po wpisaniu w polu wyszukiwania np. wartości: *Exception*, zobaczymy wszystkie wyjątki aplikacji.

Po rozwinięciu danej pozycji uzyskujemy szczegółowe informacje:

Panele i wizualizacja danych

Jednak najlepszą sprawą jest możliwość dowolnego konfigurowania dashboardów, dzięki którym możemy mieć szybki dostęp do poglądu sytuacji. Zobaczcie kilka przykładów:

 

Podsumowanie

Cały zestaw ELK Stack daje nam ogromnie możliwości przetwarzania logów wytwarzanych przez różne aplikacje takie jak np. Apache, NGINX, Tomcat, czy wszystkie silniki bazodanowe. Jako dane wejściowe do Logstasha możemy podpiąć nawet zwykłe pliki tekstowe, które zostaną odpowiednio znormalizowane i wysłane do Elasticsearcha.

Świetna sprawa, polecam.


Rabat na zestaw książek z serii R.C. Martina

Jest zniżka w Helionie na must have każdego programisty – zestaw od R.C. Martina: „Czysty kod”, „Mistrz czystego kodu” i wydany w tym roku „Software Craftsman” 🙂 3 ebooki za 84 zł, w druku 115 zł.
Trzeba przejść trochę niżej – do zakładki „Kup w zestawie”.
Podsumowując: cały zestaw w druku 115 zł lub 84 zł gdy wolimy ebooki.

rcmartin-zestaw

 

To również może Cię zainteresować:

  • Warsztat i automatyzacja Podczas codziennej pracy często okazuje się, że setki razy powtarzamy pewne czynności według określonego algorytmu (nierzadko bezwiednie). Takie sytuacje należy eliminować poprzez […]
  • Java Spring MVC, recenzja kursu wideo z Videopoint.plJava Spring MVC, recenzja kursu wideo z Videopoint.pl Pół roku temu opisywałem kurs z podstaw frameworka Spring dostępnego w Videopoint.pl, a dziś co nieco o kolejnym z tej serii: Spring Web MVC. Autorem obu ponad 3-godzinnych materiałów jest […]
  • Wyniki Poznań Open Team Programming ChampionshipWyniki Poznań Open Team Programming Championship W miniony weekend na Wydziale Matematyki i Informatyki UAM w Poznaniu  oraz na Wydziale Informatyki Politechniki Poznańskiej odbyły się X Mistrzostwa  Wielkopolski  w Programowaniu […]
  • Open sourcowy prysznic, który zużywa 90% mniej wodyOpen sourcowy prysznic, który zużywa 90% mniej wody Natrafiłem dziś (dzięki fundacji Cohabitat) na dosyć ciekawy, rozwojowy ciągle projekt typu open hardware wykorzystujący m.in. Arduino. Showerloop jest systemem znacznie oszczędzającym […]
  • Node.js, Express i Jade, czyli kompletny web czatNode.js, Express i Jade, czyli kompletny web czat W poprzednim wpisie został wykonany serwer chatu, jednak klientem była zwykła strona html zapisana na dysku lokalnym. W tym miejscu rozszerzę chat o udostępnienie serwisu http dla […]
  • Testy PHP 7.0.0beta2 w WindowsTesty PHP 7.0.0beta2 w Windows Dziesiątego lipca 2015 została wydana wersja PHP 7.0.0 Beta1. Na dzień dzisiejszy dostępna jest już do pobrania Beta3 (6 sierpnia 2015), a najnowsze źródła i wersje skompilowane można […]

One thought on “ELK Stack, dobre praktyki zarządzania logami

  1. ELK jest świetny, używam w pracy i jestem bardzo zadowolony. Jedyne co moim zdaniem bywa ciężkie to właściwa konfiguracja dashboardów, tak aby pokazywały to co chcesz zobaczyć. U mnie w zespole wielu się z tym zmaga. Na ogół pewnie jedna osoba może stworzyć jeden ogólny dashboard z wszystkimi wykresami a potem inni mogą sobie ewentulanie dodawać filtry. Jeśli jednak chcesz stworzyć dashboard to na ogół musisz spędzić nad tym kilka godzin. Może mógłbyś napisać kiedyś jakiś tutorial na ten temat?

    Dodam jeszcze, że pisanie konfiguracji logstasha też może wymagać troche trudu jeśli masz swoją aplikacje, która produkuje logi w jakimś tam formacie ustalonym przez kogoś kiedyś a nie pasującym do domyślnych pluginów.

    Aha i dosyć irytujące bywa zmaganie się z różnymi wersjami ElasticSearch czy Kibany. Te projekty idą dosyć szybko i jest dużo breaking changes pomiędzy wersjami, konfiguracja dashboardów też się zmienia i trzeba się praktycznie na nowo tego uczyć przy każdej nowej kibanie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *