Gdzie trzymasz logi i metryki ze swoich serwisów? Jeśli nie potrafisz odpowiedzieć na to pytanie, bądź odpowiedź brzmi: jak to gdzie – w plikach, to powinieneś koniecznie zainteresować się rozwiązaniem opisanym w tym artykule. Posiadanie zcentralizowanego miejsca na logi i metryki jest bardzo ważne. Doskonałym narzędziem do tego typu rzeczy jest The Elastic Stack.
Pierwszą styczność z ELK (bo tak to się kiedyś nazywało) miałem kilka lat temu. Od tamtego czasu produkt ten przekształcił się w The Elastic Stack i oferuje dużo więcej. W tym krótkim poście chciałbym przedstawić Ci co wchodzi w skład The Elastic Stack i za co odpowiada każdy produkt.
NOWOŚĆ: 20 maja 2019 elastic.co wydał wersję 7.1.0 w której nie dodał żadnej nowej funkcjonalności, a postanowił udostępnić podstawowy moduł security za darmo. Co to oznacza? Od teraz zarządzanie użytkownikami i poziomami dostępu dostępne są całkowicie za darmo.
The Elastic Stack oferuje nam zarówno opcję Cloud jak i On-Prem. Poniżej przedstawiam opis najważniejszych komponentów dostępnych w obu opcjach.
Elasticsearch czyli rozproszony silnik wyszukiwania i analizy, a zarazem centralne miejsce przechowywania danych dla całego The Elastic Stack. Udostępnia RESTowe API, jest skalowalny i posiada implementację klientów w wielu językach (Java, C#, JavaScrip, PHP, Perl, Ruby) Bez tego komponentu reszta produktów jest bezużyteczna.
Kibana to kolejny ważny komponent The Elastic Stack. Umożliwia wizualizację danych z Elasticsearcha w bardzo wielu formach (histogramy, wykresy różnego typu, itd.). Jest interfejsem webowym, który także udostępnia narzędzia developerskie.
Logstash jest centralnym punktem systemu do którego możemy przesyłać dane (logi i metryki) z różnych źródeł, a następnie dowolnie przetwarzać je na różne formaty przed dalszym przekazaniem do elasticsearcha.
Beats są to pojedyncze mniejsze usługi zbierające dane z różnych źródeł. Moduły te mogą łączyć się do logstash’a, kolejki bądź bezpośrednio do elasticsearcha.
- Filebeat zbiera logi z plików. Dzięki modułom umie rozpoznawać bardzo dużo formatów logów np. logi z docker, apache, nginx, syslog, mysql i wiele innych.
- Metricbeat czyli komponent, który zbiera wszystkie metryki z systemów i usług. Potrafi zbierać informacje o zużyciu RAM, CPU, DYSK IO i wiele innych.
- Packetbeat służy do analizy i przesyłania informacji na temat ruchu sieciowego.
- Winlogbeat służy głównie do monitorowania infrastruktury opartej o Windows.
- Auditbeat służy do zbierania danych z oprogramowania do audytu zmian w systemie Linux, sprawdzanie integralności systemu plików, śledzenie zachowań użytkowników, czy analiza procesów to główne funkcje tego modułu.
- Heartbeat umożliwia łatwe sprawdzanie dostępności usług. Odpytujemy usługę, czy jest dostępna co jakiś określony czas.
- Functionbeat jest usługą serverless umożliwiającą zbieranie logów i metryk z wielu miejsc u różnych providerów usług chmurowych.
APM server czyli Application Performance Monitoring. Po zintegrowaniu aplikacji z agentem APM będziemy mieli informacje na temat rzeczy, które dzieją się wewnątrz kodu.
Oprócz wymienionych tutaj komponentów The Elastic Stack posiada moduły do zaawansowanego wyszukiwania Site Search oraz moduł do notyfikacji, jednak nie poruszam go w tym artykule ze względu na cenę. Podstawowa licencja na ten moduł, która wymaga od nas posiadania klastra elasticsearch składającego się z minimum 3 węzłów kosztuje ~$12000 / rok. W wersji Cloud The Elastic Stack ta licencja może być darmowa, jednak wtedy miesięczna subskrybcja za całość będzie bardzo droga. Odsyłam po więcej informacji na https://www.elastic.co.
Na zakończenie przedstawiam Ci najprostszą architekturę The Elastic Stack. Nie jest to zalecane produkcyjnie, ponieważ produkcyjny klaster elasticsearch powinien składać się minimum z 3 węzłów (1 master + 2 węzły danych) w celu zapewnienia wysokiej dostępności. Jednak poniższa architektura w celach nauki i bardzo małych środowisk powinna być wystarczająca. Przy użyciu beats wysyłamy dane (logi i metryki) do logstasha w którym następuje odpowiednia analiza i formatowanie danych, które następnie wysyłamy do elasticsearcha gdzie są one składowane. Kibana łączy się z elasticsearchem i możemy dokonywać vizualizacji otrzymanych logów i metryk.
Może okazać się, że ruch który generujemy poprzez wysyłkę logów i metryk jest na tyle duży, że na którejś z warstw powyższe rozwiązanie zacznie się zapychać. Wtedy możemy zastosować warstwę w postaci kolejki np. pomiędzy beats a logstash. Logstash będzie w odpowiednim dla siebie tępie zczytywał dane z kolejki i cała komunikacja będzie przebiegała płynnie. Dodatkowo jeżeli cokolwiek złego stanie się z komponentem logstash to nie stracimy danych bo będą one kolejkowane.
Reasumując The Elastic Stack jest doskonałym rozwiązaniem, jeżeli planujesz zacząć gromadzić logi ze swojej aplikacji w jednym centralnym punkcie. Dodatkowo, jeżeli chcesz w wygodny sposób wyszukiwać i analizować logi dzięki Kibana zapomnisz o komendach tail, grep itp. Jeżeli masz jakieś pytania bądź uwagi zapraszam do kontaktu [email protected]
Źródła:
- ElkStack: Hope Tutors
- TheElasticStackArchitecture_1: logz.io
- TheElasticStackArchitecture_2: logz.io
- workstation: Owned by the author