Monitorowanie aplikacji WWW w dynamicznie rozwijających się środowiskach
Niezawodne działanie aplikacji, a co za tym idzie – zadowolenie klientów – jest kluczowym elementem sprawnego prowadzenia biznesu. Monitoring, który pozwoli szybko wykryć awarię, znajdzie ukryte zależności, a nawet przewidzi wystąpienie awarii, jest podstawowym narzędziem w dynamicznie rozwijających się środowiskach.
Z poniższego artykułu dowiesz się:
- Na czym polega monitoring aplikacji
- Jakimi narzędziami monitorować środowiska
Kilka słów wprowadzenia do monitoringu aplikacji
Pod zagadnieniem monitoringu możemy zmieścić naprawdę wiele różnych funkcjonalności:
- wysyłanie powiadomień w momencie wystąpienia awarii,
- wizualizacje danych zbieranych z różnych źródeł
- eksplorację danych
- wyznaczanie zależności pomiędzy pewnymi faktami, a ich skutkami
- predykcję wystąpienia awarii.
Poniżej omówimy najistotniejsze narzędzia do monitorowania aplikacji, takie jak Icinga, Grafana, Kibana, Prometheus oraz AWS CloudWatch.
Przegląd narzędzi do monitorowania aplikacji
Niemal każdy system monitoringu bazuje na metrykach i wartościach progowych, przy których występują alarmy i wysyłane są powiadomienia.
Icinga
Icinga to narzędzie aktywnie monitorujące podzespoły danego systemu. W klasycznym podejściu, gdzie aplikacje, bazy i inne komponenty aplikacji webowej są umieszczone na serwerach, mogą być one monitorowane przez agenta NRPE. Serwer Icinga przesyła do nich zapytania o konkretne czujki i metryki sprawdzające np. obciążenie procesora, ilość dostępnej pamięci dyskowej, długość kolejek, czas ładowania strony czy ilość zapytań do bazy danych.
W zależności od ustawień Icingi, możemy zdefiniować zadania jakie mają zostać wykonane w przypadku wystąpienia sytuacji krytycznej: od powiadomienia odpowiednich osób po wykonanie automatycznej akcji.
Grafana
Znacznie bardziej atrakcyjnym wizualnie narzędziem, choć gorszym pod kątem powiadomień, jest Grafana.
Narzędzie to pozwala na wizualizacje danych w postaci wykresów, wskaźników, diagramów obrazujących kluczowe metryki działania aplikacji.
Źródłem danych do Grafany może być baza danych ElasticSearch, InfluxDB, SQL czy AWS CloudWatch.
Dobrze skonstruowany dashboard pozwala określić obecny oraz historyczny stan całego środowiska.
Wykresy mogą być uzupełniane odpowiednimi adnotacjami, takimi jak uruchomienie nowszej wersji aplikacji, co pozwala na łatwe odnajdywanie zależności pomiędzy wydajnością środowiska, a wersją aplikacji.
Grafana nadaje się również do tworzenia wizualizacji metryk sprawdzanych rutynowo, pozwalając sprawnemu administratorowi na przewidzenie awarii – np. kończącej się pamięci czy przestrzeni dyskowej – przed ich wystąpieniem.
Grafana, umożliwia także definiowanie prostych reguły powiadomień, choć znacznie bardziej ubogich niż Icinga.
Kibana
Kibana jest narzędziem służącym do eksploracji zbiorów danych, które umożliwia agregację logów z różnych źródeł.
Poza funkcjami takimi jak przeglądanie i sprawne przeszukiwanie logów, pozwala tworzyć widoki z wykresami, a także posiada moduł timelion, pozwalający na analizę trendów czy analizę danych w czasie.
Poza tworzeniem wykresów i składaniem z nich dashboardów, można skonstruować zapytanie timelion, które będzie wyszukiwało anomalie między danymi, na przykład tydzień do tygodnia.
Bazą danych dla Kibany jest zazwyczaj indeks ElasticSearch, który może być użyty również przez wspomnianą wcześniej Grafanę. Oba te narzędzia dają w połączeniu świetny zestaw do przeglądania i wizualizacji zbieranych metryk.
Prometheus
Prometeus jest bardzo dobrym narzędziem dedykowanym nowoczesnym środowiskom: automatycznie skalowanych, dynamicznych, konteneryzowanych, o niedeterministycznym czasie życia komponentów.
W relatywnie prosty sposób, można dokonać integracji z katalogiem usług wystawionych przez service discovery (np. consul, eureka). Za pomocą Prometheusa umożliwione jest także zbieranie danych, używając protokołu http(s) z wykorzystaniem rozmaitych exporterów.
Prometheus integruje się z Grafaną, posługując się nią jako silnikiem do wizualizacji danych oraz z alert managerem, jako modułem do agregacji alarmów i wysyłania powiadomień.
CloudWatch
Jeśli nasza aplikacja jest uruchomiona w chmurze AWS, to naturalnym rozwiązaniem monitorującym wydaje się użycie usługi CloudWatch dostarczanej przez Amazon.
CloudWatch automatycznie i bez żadnej konfiguracji zbiera podstawowe metryki od uruchomionych usług, ale oprócz tego mamy możliwość zdefiniowana własnych.
Panel webowy AWS udostępnia nam zintegrowane funkcje do ich przeglądania, tworzenia wykresów, wskaźników, dashboardów, chociaż – jeśli jest taka potrzeba – do tych samych danych można dostać się za pomocą API.
Istnieje również możliwość konfiguracji alarmów i integracji z notyfikacjami SNS lub funkcjami Lambda. Bez problemu jesteśmy w stanie oprogramować eventy integrujące się z innymi usługami AWS, np. skalowanie grupy ASG na podstawie alarmu CloudWatch.
Inną funkcją CloudWatch jest składowanie logów z aplikacji wraz z możliwością ich przeglądania za pomocą zapytań SQL (Athena) lub Insights (interfejs GUI).
Warto przypomnieć, że CloudWatch może służyć jako baza wizualizacji dla Grafany.
Co monitorować?
Każdy projekt powinien posiadać monitoring metryk kluczowych ze względu na działanie biznesu, takich jak prędkość ładowania stron www, czy czas obsługi żądań klientów.
Szybkie wykrycie usterek na środowiskach deweloperskich czy akceptacyjnych, pomaga unikać sytuacji, w których potencjalnie nieefektywny kod zostanie zaaplikowany na środowiska produkcyjne.
Projektując monitoring, należy pamiętać o tym, żeby jak najlepiej odwzorować normalne zachowania internautów –odpytywać aplikacje po adresacji publicznej, weryfikować rozpoznawanie nazw DNS, a także sprawdzać ważność certyfikatów.
Funkcjonalności dostępne w ramach konkretnych aplikacji:
- Icinga – powiadomienia, niestety bez wykresów i analizy logów.
- Grafana – wykresy i powiadomienia (ograniczony zakres).
- Kibana – wykresy i analiza logów, ale bez powiadomień.
- Prometheus – wykresy (dodatkowo można podpiąć Grafanę) i powiadomienia (przez moduł alert manager).
- CloudWatch – komplet od wykresów przez analizę logów po powiadomienia.
Podsumowanie
Dobrze zorganizowany monitoring pozwala nie tylko reagować na awarie, ale również skutecznie je przewidywać, a także im przeciwdziałać. Jeżeli do awarii już dojdzie, to za pomocą monitoringu powinniśmy móc ustalić jej przyczyny i określić działania zapobiegające wystąpieniu awarii.
Zdecydowanie warto poświęcić czas na stworzenie kompleksowego monitoringu środowisk nie tylko produkcyjnych, ale dla wszystkich etapów wytwarzania oprogramowania.
Koniec końców, najważniejsze jest zadowolenie użytkowników aplikacji, a bez mierzenia jej wydajności, ciężko zagwarantować odpowiednią jakość usług.
Jeżeli chcesz dowiedzieć się więcej o usługach związanych z monitoringiem, zapraszamy do zapoznania się z naszą ofertą usług z kategorii managed services.