1/50
Wprowadzenie do monitorowania
Monitorowanie w IT to proces systematycznego zbierania, analizowania i wizualizowania danych o stanie i wydajności systemów komputerowych, sieci i aplikacji.
  • Jego głównym celem jest zapewnienie, że usługi działają zgodnie z oczekiwaniami, oraz proaktywne wykrywanie problemów, zanim wpłyną one na użytkowników końcowych.
  • Skuteczne monitorowanie pozwala na szybką identyfikację przyczyn awarii, optymalizację wydajności oraz planowanie przyszłej rozbudowy infrastruktury.
  • Jest to fundamentalna praktyka, bez której zarządzanie złożonymi, nowoczesnymi środowiskami IT byłoby niemożliwe.
Ilustracja dla slajdu 1

W praktyce inżynierskiej monitorowanie obejmuje nie tylko zbieranie danych, ale także ich agregację, normalizację i interpretację w kontekście konkretnych celów biznesowych. Nowoczesne systemy monitoringu potrafią obsługiwać miliony punktów danych na sekundę, wykorzystując do tego rozproszone architektury zbierające dane z tysięcy węzłów. Kluczowym wyzwaniem pozostaje jednak oddzielenie sygnału od szumu, czyli skoncentrowanie się na tych metrykach, które rzeczywiście niosą informację o stanie systemu.

Wdrożenie efektywnego monitoringu wymaga starannego planowania i zrozumienia architektury systemu. Należy zidentyfikować krytyczne ścieżki przepływu danych oraz określić, które komponenty mają kluczowe znaczenie dla działania całej usługi. Bez tej wiedzy łatwo jest utonąć w morzu danych, które nie przekładają się na praktyczne wnioski.

Współczesne podejście do monitorowania ewoluowało w kierunku obserwowalności, która kładzie nacisk na możliwość zadawania dowolnych pytań o stan systemu bez potrzeby wcześniejszego definiowania wszystkich scenariuszy awaryjnych. To fundamentalna zmiana paradygmatu, która wymaga odpowiedniego przygotowania zarówno infrastruktury, jak i zespołów odpowiedzialnych za utrzymanie systemów informatycznych.

2/50
Rola obserwowalności w IT
  • Obserwowalność to ewolucja tradycyjnego monitoringu, szczególnie istotna w kontekście złożonych, rozproszonych systemów, takich jak mikroserwisy.
  • Podczas gdy monitoring skupia się na zbieraniu z góry zdefiniowanych metryk (np. użycie CPU), obserwowalność polega na projektowaniu systemów w taki sposób, aby emitowały one bogate dane telemetryczne (logi, metryki, ślady), które pozwalają na zadawanie dowolnych pytań o ich wewnętrzny stan i zachowanie, nawet w przypadku nieprzewidzianych problemów.
  • Obserwowalność pozwala nie tylko stwierdzić, że coś jest nie tak, ale także zrozumieć dlaczego.
Ilustracja dla slajdu 2

Obserwowalność wywodzi się z teorii sterowania i w kontekście IT oznacza zdolność do wnioskowania o wewnętrznym stanie systemu na podstawie danych generowanych na jego wyjściu. W praktyce przekłada się to na konieczność odpowiedniego oprzyrządowania aplikacji, czyli dodania kodu emitującego metryki, logi i ślady. Bez tego nawet najzaawansowane narzędzia zbierające dane nie będą w stanie dostarczyć pełnego obrazu sytuacji.

W architekturze mikroserwisowej, gdzie pojedyncze żądanie użytkownika może przechodzić przez kilkanaście różnych usług, obserwowalność staje się absolutnie niezbędna. Tradycyjne monitorowanie, które sprawdza każdą usługę w izolacji, nie pozwala na zrozumienie przepływu transakcji. Dopiero połączenie metryk, logów i śladów daje pełny obraz zachowania systemu.

Wdrożenie kultury obserwowalności wymaga zmiany sposobu myślenia w całej organizacji. Deweloperzy muszą projektować swoje aplikacje z myślą o generowaniu odpowiednich danych telemetrycznych, a zespoły operacyjne muszą umieć te dane interpretować i wyciągać z nich wnioski. To proces długotrwały, ale niezbędny dla dojrzałości DevOpsowej organizacji.

3/50
Monitoring infrastruktury vs usług
Monitoring usług (lub aplikacji) koncentruje się na doświadczeniu użytkownika końcowego i kluczowych wskaźnikach biznesowych.
  • Należy rozróżnić dwa poziomy monitoringu.
  • Monitoring infrastruktury skupia się na kondycji fizycznych i wirtualnych komponentów, takich jak serwery, przełączniki sieciowe czy pamięć masowa.
  • Mierzy on takie wskaźniki jak użycie CPU, zajętość pamięci RAM czy przepustowość sieci.
  • Mierzy on czas odpowiedzi aplikacji, liczbę błędów, czy liczbę zrealizowanych transakcji.
  • Oba te poziomy są niezbędne i wzajemnie się uzupełniają, dając pełny obraz stanu systemu.
Ilustracja dla slajdu 3

Monitoring infrastruktury dostarcza informacji o kondycji poszczególnych zasobów fizycznych i wirtualnych, ale nie mówi nic o jakości usługi widzianej przez użytkownika. Przykładowo serwer może mieć niskie obciążenie CPU i dużo wolnej pamięci RAM, a mimo to aplikacja może działać wolno z powodu błędów w kodzie. Dlatego te dwa poziomy monitoringu muszą być zawsze analizowane łącznie.

Z kolei monitoring usług koncentruje się na wskaźnikach biznesowych, takich jak liczba złożonych zamówień, czas realizacji transakcji czy wskaźnik konwersji. Te metryki są najbardziej wartościowe z perspektywy biznesu, ale ich interpretacja może być trudna bez znajomości stanu infrastruktury. Wzrost czasu odpowiedzi może być spowodowany zarówno awarią sprzętu, jak i zwiększonym ruchem użytkowników.

Nowoczesne platformy monitoringu pozwalają na łatwą korelację danych z obu poziomów. Dzięki temu operator może szybko przejść od ogólnego widoku biznesowego do szczegółowej analizy poszczególnych komponentów infrastruktury. To kluczowa umiejętność w diagnozowaniu złożonych problemów w rozproszonych systemach informatycznych.

4/50
Rodzaje monitoringu: aktywny, pasywny
  • Monitoring można podzielić na dwa główne rodzaje.
  • Monitoring pasywny polega na nasłuchiwaniu danych emitowanych przez systemy, takich jak logi, pułapki SNMP czy metryki wydajności.
  • Jest to metoda nieinwazyjna.
  • Monitoring aktywny, zwany też syntetycznym, polega na regularnym wysyłaniu sztucznych zapytań (sond) do usługi w celu sprawdzenia jej dostępności i czasu odpowiedzi.
  • Symuluje on zachowanie użytkownika i pozwala na wykrycie problemów, zanim zauważą je prawdziwi klienci.
  • Najlepsze strategie monitoringu łączą w sobie oba te podejścia.
Ilustracja dla slajdu 4

Wybór między monitoringiem aktywnym a pasywnym zależy od konkretnych potrzeb i charakterystyki monitorowanego systemu. Monitoring pasywny jest mniej inwazyjny i nie zwiększa obciążenia systemu, ale wymaga, aby system sam generował odpowiednie dane. Z kolei monitoring aktywny pozwala na testowanie systemu w kontrolowany sposób, ale może zakłócać jego normalne działanie, szczególnie przy zbyt dużej częstotliwości sond.

W praktyce najczęściej stosuje się podejście hybrydowe łączące obie metody. Monitoring pasywny służy do ciągłej obserwacji stanu systemu i zbierania danych historycznych, podczas gdy monitoring aktywny jest używany do regularnego sprawdzania dostępności usług i kluczowych scenariuszy biznesowych. Dzięki temu można wykryć zarówno problemy występujące naturalnie, jak i te, które nie zostałyby zauważone bez aktywnego testowania.

Ważnym aspektem monitoringu aktywnego jest wybór odpowiednich lokalizacji, z których wysyłane są sondy. Jeśli wszystkie sondy pochodzą z tej samej sieci, mogą nie wykryć problemów występujących tylko dla użytkowników zewnętrznych. Dlatego profesjonalne rozwiązania wykorzystują rozproszone geograficznie lokalizacje do przeprowadzania testów syntetycznych z różnych punktów widzenia.

5/50
Metryki systemowe: CPU, RAM, I/O
Podstawowe metryki systemowe, zwane też trzema kluczowymi wskaźnikami, dają szybki wgląd w kondycję każdego serwera.
  • Użycie procesora (CPU) wskazuje, jak intensywnie pracuje serwer.
  • Długotrwale wysokie użycie CPU może świadczyć o przeciążeniu.
  • Użycie pamięci (RAM) pokazuje, ile pamięci operacyjnej jest zajęte; jej wyczerpanie prowadzi do spowolnienia lub awarii.
  • Operacje wejścia/wyjścia (I/O) dysku mierzą, jak intensywnie system odczytuje i zapisuje dane.
  • Wysokie obciążenie I/O jest częstym wąskim gardłem w aplikacjach bazodanowych.
Ilustracja dla slajdu 5

Metryka CPU wymaga uważnej interpretacji, ponieważ wysokie użycie procesora nie zawsze oznacza problem. Dla aplikacji obliczeniowych wysokie obciążenie CPU może być normalne, podczas gdy dla serwera bazodanowego może wskazywać na brak odpowiednich indeksów. Należy monitorować podział obciążenia między tryb użytkownika, systemowy i I/O wait, ponieważ każdy z tych składników wskazuje na inną kategorię problemów.

Pamięć RAM jest często wąskim gardłem w systemach, szczególnie gdy aplikacje mają wycieki pamięci. W przeciwieństwie do CPU, wyczerpanie pamięci prowadzi do natychmiastowego użycia swapu, co dramatycznie spowalnia działanie systemu. Dobrą praktyką jest monitorowanie nie tylko procentowego użycia pamięci, ale także tempa jej alokacji i dealokacji.

Operacje I/O są najtrudniejsze do zdiagnozowania, ponieważ problem może leżeć na wielu poziomach: w aplikacji, systemie plików, sterownikach, kontrolerze dysku lub samym nośniku danych. Nowoczesne narzędzia pozwalają na monitorowanie zarówno opóźnień poszczególnych operacji, jak i przepustowości oraz głębokości kolejki I/O. Analiza tych wskaźników pozwala na precyzyjne zidentyfikowanie źródła problemów z wydajnością dyskową.

6/50
Metryki sieciowe: bandwidth, latency
Monitorowanie obu tych wskaźników jest kluczowe dla diagnozowania problemów z wydajnością sieci.
  • Dwie kluczowe metryki opisujące wydajność sieci to przepustowość (bandwidth) i opóźnienie (latency).
  • Przepustowość, mierzona w bitach na sekundę, określa, ile danych można przesłać przez łącze w danym czasie.
  • Można ją porównać do szerokości autostrady.
  • Opóźnienie, mierzone w milisekundach, to czas potrzebny na dotarcie pakietu danych od źródła do celu.
  • Można je porównać do prędkości podróży.
  • Nawet przy dużej przepustowości, wysokie opóźnienia mogą sprawić, że aplikacje interaktywne będą działać wolno.
Ilustracja dla slajdu 6

Opóźnienie sieciowe można podzielić na kilka składowych: opóźnienie propagacji, transmisji, przetwarzania i kolejkowania. Każda z tych składowych ma inne przyczyny i wymaga innych metod optymalizacji. Dla aplikacji czasu rzeczywistego, takich jak VoIP czy wideokonferencje, kluczowe znaczenie ma nie tylko średnie opóźnienie, ale także jego zmienność, czyli jitter.

Przepustowość efektywna różni się od teoretycznej przepustowości łącza i zależy od wielu czynników, takich jak rozmiar ramek, protokół transportowy oraz występowanie retransmisji. Narzędzia takie jak iperf pozwalają na precyzyjny pomiar rzeczywistej przepustowości między dwoma punktami w sieci. W monitoringu produkcyjnym często wykorzystuje się dane z protokołów NetFlow i sFlow.

W środowiskach chmurowych metryki sieciowe są szczególnie istotne, ponieważ infrastruktura wirtualna wprowadza dodatkowe opóźnienia. Dostawcy chmur często limitują przepustowość w zależności od rozmiaru instancji, co może być źródłem niespodziewanych problemów z wydajnością. Konieczne jest monitorowanie zarówno metryk sieciowych na poziomie systemu operacyjnego, jak i tych dostarczanych przez platformę chmurową.

7/50
Metryki aplikacyjne: response time, error rate
Jest to kluczowy wskaźnik satysfakcji użytkownika.
  • Metryki aplikacyjne pozwalają ocenić, jak usługa jest postrzegana przez użytkowników.
  • Czas odpowiedzi (response time) to czas, jaki upływa od wysłania żądania przez klienta do otrzymania pełnej odpowiedzi.
  • Wskaźnik błędów (error rate), wyrażony w procentach, pokazuje, jaka część żądań kończy się błędem (np. kodem HTTP 5xx).
  • Nagły wzrost którejkolwiek z tych metryk jest silnym sygnałem, że w aplikacji wystąpił problem, który wymaga natychmiastowej uwagi.
Ilustracja dla slajdu 7

Oprócz podstawowego czasu odpowiedzi warto monitorować jego rozkład percentylowy, ponieważ średnia może maskować problemy dotyczące niewielkiej części żądań. W praktyce najczęściej analizuje się percentyle P50, P95 i P99, które pokazują, jak szybko obsługiwana jest większość żądań, a jakie są najgorsze przypadki. Szczególnie P99 jest czułym wskaźnikiem problemów z wydajnością, które dotykają nielicznych użytkowników.

Wskaźnik błędów również wymaga starannej interpretacji. Należy rozróżnić błędy oczekiwane, takie jak błędy 404 dla nieistniejących zasobów, od błędów nieoczekiwanych, które wskazują na problemy z aplikacją. Ważne jest monitorowanie nie tylko procentu błędów, ale także ich bezwzględnej liczby i trendu w czasie.

Nowoczesne platformy monitoringu aplikacyjnego APM dostarczają informacji o czasie wykonywania poszczególnych fragmentów kodu, wywołaniach zewnętrznych API i zapytaniach do bazy danych. Pozwala to na szybką identyfikację, która część aplikacji jest odpowiedzialna za spowolnienie i optymalizację konkretnych fragmentów kodu bez konieczności zgadywania.

8/50
Zbieranie logów systemowych
  • Logi systemowe, generowane przez jądro systemu operacyjnego i kluczowe usługi, są podstawowym źródłem informacji o stanie serwera.
  • W systemach Linux, logi są tradycyjnie zarządzane przez demona `syslog` i zapisywane w plikach w katalogu `/var/log`.
  • Nowoczesne dystrybucje używają `journald`, który przechowuje logi w ustrukturyzowanym, binarnym formacie.
  • W systemach Windows, logi są zarządzane przez usługę Podgląd Zdarzeń (Event Viewer) i podzielone na kategorie, takie jak System, Aplikacja i Zabezpieczenia.
  • Zbieranie i analiza tych logów jest kluczowa dla diagnozowania awarii i badania incydentów bezpieczeństwa.
Ilustracja dla slajdu 8

W systemie Linux logi systemowe są zarządzane przez demona rsyslog lub syslog-ng, które oferują zaawansowane możliwości filtrowania, routingu i formatowania wiadomości. Demon journald, będący częścią systemd, przechowuje logi w ustrukturyzowanym formacie binarnym, który umożliwia szybkie wyszukiwanie według metadanych, takich jak identyfikator procesu, priorytet czy znacznik czasu. Narzędzie journalctl pozwala na wygodne przeglądanie i filtrowanie tych danych.

W systemie Windows logi są przechowywane w formacie EVTX i dostępne przez Podgląd Zdarzeń. Każde zdarzenie ma przypisany identyfikator, poziom ważności oraz źródło. Zaawansowani administratorzy korzystają z poleceń PowerShell, takich jak Get-WinEvent, do programowego przetwarzania i analizy logów systemowych.

Niezależnie od platformy kluczowe znaczenie ma zapewnienie integralności logów poprzez ich szyfrowanie i podpisywanie cyfrowe. W kontekście bezpieczeństwa logi systemowe są często pierwszym źródłem informacji o ataku, dlatego muszą być chronione przed modyfikacją i usunięciem przez potencjalnego intruza. Dobrą praktyką jest wysyłanie ich w czasie rzeczywistym do centralnego repozytorium.

9/50
Zbieranie logów aplikacyjnych
  • Każda aplikacja powinna generować własne logi, które opisują jej działanie, błędy i ważne zdarzenia biznesowe.
  • Kluczowe jest, aby logi te były pisane w ustrukturyzowanym formacie (np. JSON), co ułatwia ich automatyczne parsowanie i analizę.
  • Zamiast zapisywać logi do plików, nowoczesne aplikacje, zwłaszcza w architekturach skonteneryzowanych, wysyłają je na standardowe wyjście (stdout).
  • Pozwala to platformie orkiestracji (np. Kubernetes) na ich przechwycenie i przekazanie do centralnego systemu logowania, co znacząco upraszcza zarządzanie logami w środowiskach rozproszonych.
Ilustracja dla slajdu 9

Ustrukturyzowane logi w formacie JSON umożliwiają łatwe parsowanie i indeksowanie przez systemy takie jak Elasticsearch. Każdy wpis logu powinien zawierać znacznik czasu, poziom ważności, identyfikator żądania oraz kontekst, w jakim został wygenerowany. Dzięki temu możliwe jest śledzenie przebiegu pojedynczej transakcji przez wiele usług i szybkie diagnozowanie problemów.

W nowoczesnych aplikacjach webowych często stosuje się biblioteki takie jak Serilog, Log4j, Winston czy structlog, które zapewniają bogate możliwości konfiguracji i formatowania logów. Pozwalają one na dynamiczną zmianę poziomu szczegółowości logowania bez konieczności restartu aplikacji, co jest niezwykle przydatne podczas diagnozowania problemów w środowisku produkcyjnym.

Coraz popularniejsze staje się logowanie asynchroniczne, które minimalizuje wpływ operacji logowania na wydajność aplikacji. W tym modelu logi są zapisywane do kolejki w pamięci, a następnie przetwarzane przez dedykowany wątek w tle. Rozwiązanie to jest szczególnie ważne w aplikacjach o wysokiej przepustowości, gdzie każde opóźnienie ma znaczenie dla użytkowników końcowych.

10/50
Zbieranie logów sieciowych
Zbieranie i korelowanie tych logów jest fundamentem systemów SIEM (Security Information and Event Management).
  • Logi z urządzeń sieciowych, takich jak zapory sieciowe (firewalle), przełączniki i routery, dostarczają bezcennych informacji o ruchu w sieci i potencjalnych zagrożeniach bezpieczeństwa.
  • Firewalle logują każde zaakceptowane i odrzucone połączenie, co pozwala na analizę prób włamań.
  • Przełączniki i routery mogą eksportować szczegółowe informacje o przepływach sieciowych (np. za pomocą protokołu NetFlow), co pozwala na analizę, kto z kim i jak intensywnie komunikuje się w sieci.
Ilustracja dla slajdu 10

Protokół Syslog, zdefiniowany w RFC 5424, jest standardem przesyłania logów sieciowych w środowiskach IP. Urządzenia sieciowe wysyłają wiadomości syslog z różnymi priorytetami, od informacji o normalnych zdarzeniach po alerty krytyczne. Każda wiadomość zawiera identyfikator urządzenia, znacznik czasu i opis zdarzenia, co umożliwia scentralizowane zbieranie i analizę.

NetFlow, opracowany przez Cisco, jest protokołem do zbierania informacji o przepływach sieciowych. Dostarcza szczegółowych danych o adresach IP źródła i celu, portach, protokołach i liczbie przesłanych bajtów. Analiza tych danych pozwala na wykrywanie nietypowych wzorców ruchu, takich jak próby skanowania sieci czy ataki DDoS, a także na planowanie pojemności łączy.

Nowoczesne systemy SIEM integrują logi sieciowe z logami z innych źródeł, tworząc spójny obraz bezpieczeństwa. Dzięki zaawansowanym regułom korelacji są w stanie wykrywać wieloetapowe ataki, które nie byłyby widoczne przy analizie pojedynczego źródła danych. To jedna z najważniejszych funkcji systemów bezpieczeństwa IT.

11/50
Centralizacja logów
  • W środowisku składającym się z wielu serwerów, ręczne przeglądanie logów na każdej maszynie z osobna jest nieefektywne i niepraktyczne.
  • Dlatego kluczową praktyką jest centralizacja logów.
  • Polega ona na wysyłaniu logów ze wszystkich serwerów, aplikacji i urządzeń sieciowych do jednego, centralnego repozytorium.
  • Taki system pozwala na agregację, przeszukiwanie, analizowanie i wizualizowanie logów z całej infrastruktury w jednym miejscu.
  • Umożliwia to szybkie diagnozowanie problemów, które obejmują wiele systemów, oraz korelowanie zdarzeń w celu wykrywania złożonych ataków.
Ilustracja dla slajdu 11

Centralizacja logów rozwiązuje problem rozproszenia danych, ale wprowadza nowe wyzwania związane z przepustowością sieci i pojemnością magazynów. Każde urządzenie i aplikacja generuje logi w różnym tempie, dlatego konieczne jest odpowiednie skalowanie infrastruktury centralnej. Protokoły takie jak syslog przez TCP zapewniają niezawodne dostarczanie wiadomości kosztem większego opóźnienia.

Nowoczesne systemy centralizacji logów oferują zaawansowane mechanizmy filtrowania i wzbogacania danych. Niepotrzebne lub zbyt szczegółowe logi mogą być odrzucane już na etapie zbierania, co zmniejsza obciążenie infrastruktury centralnej. Logi mogą być wzbogacane o dodatkowe metadane, takie jak lokalizacja geograficzna adresu IP, co ułatwia późniejszą analizę.

Dostęp do scentralizowanych logów powinien być kontrolowany i audytowany. Nie każdy pracownik powinien mieć wgląd we wszystkie logi, szczególnie jeśli zawierają one dane wrażliwe lub osobowe. Wdrożenie odpowiednich mechanizmów autoryzacji i uwierzytelniania jest kluczowe z perspektywy zgodności z regulacjami takimi jak RODO.

12/50
ELK stack – podstawy
  • Stos ELK (obecnie znany jako Elastic Stack) to jeden z najpopularniejszych na świecie zestawów narzędzi open-source do centralizacji i analizy logów.
  • Składa się on z trzech głównych komponentów.
  • Elasticsearch to rozproszony silnik wyszukiwania i analityki, który przechowuje i indeksuje logi.
  • Logstash (lub lżejszy Beats) to narzędzie do zbierania, przetwarzania i wysyłania logów z różnych źródeł do Elasticsearch.
  • Kibana to interfejs webowy, który pozwala na przeszukiwanie, analizowanie i tworzenie zaawansowanych wizualizacji i dashboardów na podstawie danych zgromadzonych w Elasticsearch.
Ilustracja dla slajdu 12

Elasticsearch wykorzystuje odwrócony indeks do błyskawicznego wyszukiwania pełnotekstowego w ogromnych zbiorach danych. Jego rozproszona architektura pozwala na przechowywanie danych na wielu węzłach i automatyczne równoważenie obciążenia. Dane są dzielone na fragmenty, które są replikowane dla zapewnienia wysokiej dostępności i odporności na awarie.

Logstash oferuje bogaty zestaw filtrów do transformacji i wzbogacania logów, takich jak parsowanie dat, rozbijanie ciągów znaków na pola lub wzbogacanie o dane geolokalizacyjne. Beats, lżejsza alternatywa, są agentami zainstalowanymi na monitorowanych serwerach, które wysyłają dane bezpośrednio do Elasticsearch lub Logstash. Filebeat jest najpopularniejszym agentem do zbierania plików logów.

Kibana udostępnia zaawansowane funkcje wizualizacji, takie jak wykresy słupkowe, liniowe, mapy geograficzne i tabele. Umożliwia tworzenie dashboardów, które można udostępniać innym członkom zespołu. Funkcja Canvas pozwala na tworzenie atrakcyjnych wizualnie raportów prezentowanych osobom nietechnicznym.

13/50
Prometheus – zasady działania
  • Prometheus to wiodący system monitoringu i alertów open-source, stworzony z myślą o dynamicznych, chmurowych środowiskach.
  • Działa on w modelu pobierania, co oznacza, że serwer Prometheus w regularnych odstępach czasu sam odpytuje monitorowane usługi (tzw. cele) o ich aktualne metryki.
  • Usługi te muszą udostępniać swoje metryki w prostym formacie tekstowym na specjalnym endpoincie HTTP.
  • Prometheus przechowuje zebrane dane jako szeregi czasowe i oferuje potężny język zapytań (PromQL) do ich analizy.
  • Jego architektura jest wysoce skalowalna i odporna na awarie.
Ilustracja dla slajdu 13

Model pull stosowany przez Prometheusa ma kilka istotnych zalet. Po pierwsze upraszcza zarządzanie konfiguracją, ponieważ serwer monitoringu sam kontroluje, kiedy i jakie dane są zbierane. Po drugie ułatwia wykrywanie usług, które przestały odpowiadać, ponieważ brak danych z danego źródła jest natychmiast widoczny. Po trzecie zmniejsza ryzyko przeciążenia serwera przez niekontrolowany wzrost liczby wysyłanych danych.

Język PromQL umożliwia wykonywanie zaawansowanych operacji na szeregach czasowych, takich jak agregacja, przecięcia, obliczanie współczynników czy prognozowanie trendów. Zapytania PromQL mogą być używane zarówno do tworzenia wykresów w Grafanie, jak i do definiowania reguł alertów. Przykładowo możliwe jest obliczenie percentyla czasu odpowiedzi dla wszystkich instancji danej usługi.

Eksportery są kluczowym elementem ekosystemu Prometheusa, ponieważ umożliwiają monitorowanie usług, które nie udostępniają natywnie metryk. Node Exporter dostarcza metryk systemowych, Blackbox Exporter umożliwia monitorowanie dostępności usług przez HTTP, ICMP i TCP, a eksporterzy baz danych zbierają metryki z PostgreSQL, MySQL czy MongoDB.

14/50
Grafana – wizualizacja
  • Grafana to otwarte narzędzie do wizualizacji i analizy danych, które stało się de facto standardem w dziedzinie monitoringu.
  • Pozwala ona na tworzenie zaawansowanych, interaktywnych dashboardów, które w czytelny sposób prezentują dane z różnych źródeł.
  • Grafana doskonale integruje się z Prometheusem, pozwalając na tworzenie pięknych wykresów i paneli na podstawie zapytań PromQL.
  • Może również pobierać dane z wielu innych systemów, takich jak bazy danych (InfluxDB, MySQL), systemy logowania (Elasticsearch) czy usługi chmurowe, co pozwala na stworzenie jednego, centralnego punktu widokowego na całą infrastrukturę.
Ilustracja dla slajdu 14

Grafana obsługuje wiele źródeł danych jednocześnie, co pozwala na tworzenie dashboardów łączących metryki z Prometheusa, logi z Elasticsearch i dane z baz relacyjnych. Każdy panel na dashboardzie może korzystać z innego źródła danych, a zmienne pozwalają na dynamiczną zmianę kontekstu, na przykład przełączanie między środowiskami produkcyjnym i testowym. Funkcja adnotacji umożliwia zaznaczanie na wykresach momentów wdrożeń.

Tworzenie czytelnych dashboardów w Grafanie wymaga przestrzegania zasad wizualizacji danych. Wykresy powinny być odpowiednio dobrane do rodzaju danych, skale osi muszą być czytelne, a etykiety i legendy jasno opisane. Grafana oferuje szeroki wybór typów paneli, od prostych wykresów czasu rzeczywistego po złożone diagramy, mapy cieplne i tabele.

Grafana udostępnia mechanizmy udostępniania dashboardów zewnętrznym użytkownikom i osadzania ich w innych aplikacjach. Funkcja alertów pozwala na definiowanie powiadomień bezpośrednio z poziomu paneli, bez konieczności korzystania z zewnętrznych systemów alertowania. Dzięki społeczności użytkowników dostępne są tysiące gotowych dashboardów.

15/50
Alerting i powiadomienia
System alertów jest kluczowym komponentem, który automatycznie powiadamia administratorów o wystąpieniu zdefiniowanych sytuacji awaryjnych.
  • Celem monitoringu nie jest samo zbieranie danych, ale aktywne reagowanie na problemy.
  • W systemach takich jak Prometheus, definiuje się reguły alertów (np. "uruchom alert, jeśli użycie CPU jest powyżej 90% przez 5 minut").
  • Kiedy warunek reguły jest spełniony, Prometheus wysyła alert do komponentu Alertmanager, który zarządza deduplikacją, grupowaniem i wysyłaniem powiadomień do odpowiednich osób za pośrednictwem różnych kanałów, takich jak e-mail, Slack czy PagerDuty.
Ilustracja dla slajdu 15

Skuteczny system alertingowy wymaga starannego zaprojektowania reguł, aby uniknąć zmęczenia alertami. Każdy alert powinien mieć określony poziom ważności, opisujący powagę sytuacji, oraz przypisany zespół odpowiedzialny za jego obsługę. Dobrą praktyką jest definiowanie alertów wielopoziomowych, gdzie ostrzeżenie pojawia się przy przekroczeniu pierwszego progu, a alert krytyczny przy przekroczeniu drugiego.

Alertmanager w Prometheusie oferuje zaawansowane możliwości grupowania alertów, co zapobiega zasypywaniu zespołu pojedynczymi powiadomieniami. Alerty dotyczące tego samego incydentu są grupowane w jedną wiadomość, a mechanizm wyciszania pozwala na tymczasowe blokowanie alertów podczas planowanych prac konserwacyjnych. Integracja z PagerDuty umożliwia tworzenie eskalacji.

Wybór odpowiedniego kanału powiadomień zależy od ważności alertu i pory dnia. Dla alertów krytycznych w nocy najlepszym rozwiązaniem jest PagerDuty lub SMS, ponieważ gwarantują dotarcie powiadomienia. Dla ostrzeżeń dziennych wystarczający jest Slack lub e-mail, gdzie zespół może przeanalizować sytuację w dogodnym momencie.

16/50
Konfiguracja alertów krytycznych
Przykłady to całkowita niedostępność usługi, drastyczny wzrost wskaźnika błędów czy zbliżające się wyczerpanie kluczowych zasobów.
Zbyt wiele fałszywych lub nieistotnych alertów krytycznych prowadzi do zmęczenia alertami i ignorowania realnych problemów.
  • Nie wszystkie alerty są sobie równe.
  • Kluczowe jest rozróżnienie między alertami informacyjnymi, ostrzeżeniami a alertami krytycznymi, które wymagają natychmiastowej reakcji, nawet w środku nocy.
  • Alerty krytyczne powinny być zarezerwowane tylko dla sytuacji, które bezpośrednio wpływają na użytkowników i wymagają interwencji człowieka.
Ilustracja dla slajdu 16

Konfigurowanie alertów krytycznych wymaga dogłębnej znajomości normalnego zachowania systemu, aby uniknąć fałszywych alarmów. Każdy alert krytyczny powinien być testowany przed wdrożeniem, aby upewnić się, że warunki jego aktywacji są prawidłowo zdefiniowane. Warto określić czas trwania alertu, po którym następuje eskalacja do wyższego poziomu wsparcia technicznego.

Dokumentacja każdego alertu krytycznego powinna zawierać instrukcje postępowania, czyli runbook opisujący kroki naprawcze. Bez takiej dokumentacji osoba dyżurna może tracić cenny czas na analizę sytuacji, zamiast natychmiast przystąpić do rozwiązywania problemu. Runbooki powinny być regularnie aktualizowane i testowane podczas symulacji awarii.

Wdrożenie mechanizmów autodiagnozy i automatycznej naprawy dla najczęstszych scenariuszy krytycznych może znacząco skrócić czas przestoju. Przykładowo jeśli alert krytyczny dotyczy braku miejsca na dysku, automatyczny skrypt może usunąć stare pliki tymczasowe, zanim problem wpłynie na działanie aplikacji. Takie rozwiązania wymagają jednak starannego zaprojektowania.

17/50
Próg alertów – SLA/SLO/SLI
  • Definiowanie progów dla alertów powinno opierać się na celach biznesowych, a nie arbitralnych wartościach.
  • W tym celu stosuje się koncepcje takie jak SLA, SLO i SLI.
  • Wskaźnik poziomu usługi (SLI, Service Level Indicator) to konkretna, mierzalna metryka, np. czas odpowiedzi.
  • Cel poziomu usługi (SLO, Service Level Objective) to docelowa wartość dla SLI, np. "99% żądań powinno być obsłużonych w czasie poniżej 200ms".
  • Umowa o poziomie usług (SLA, Service Level Agreement) to kontrakt z klientem, który określa konsekwencje niespełnienia SLO.
  • Alerty powinny być skonfigurowane tak, aby ostrzegać, gdy system zbliża się do naruszenia zdefiniowanego SLO.
Ilustracja dla slajdu 17

Zdefiniowanie SLO wymaga zrozumienia, które metryki są najważniejsze z perspektywy użytkownika i jak ich wartości przekładają się na satysfakcję klienta. Dla aplikacji e-commerce kluczowym SLO będzie czas odpowiedzi strony głównej, podczas gdy dla systemu bankowego najważniejsza będzie dostępność usługi autoryzacji transakcji. Wartości SLO powinny być ambitne, ale realistyczne i oparte na historycznych danych.

Monitorowanie SLI jest podstawą do oceny, czy SLO są spełniane. Jeśli SLI systematycznie odbiega od zdefiniowanego celu, konieczna jest interwencja, która może obejmować zarówno optymalizację techniczną, jak i zmianę architektury systemu. W praktyce często stosuje się budżet błędów, czyli dopuszczalny czas, przez który SLO może być naruszone.

Konsekwencje naruszenia SLA powinny być jasno określone w umowie z klientem i mogą obejmować kary finansowe lub dodatkowe dni bezpłatnego korzystania z usługi. Dlatego tak ważne jest precyzyjne mierzenie SLI i przechowywanie historycznych danych jako dowodu w ewentualnych sporach. Automatyzacja raportowania SLA znacząco ułatwia ten proces.

18/50
Analiza trendów metryk
  • Analiza historycznych danych i trendów jest kluczowa dla proaktywnego zarządzania infrastrukturą.
  • Obserwując, jak metryki takie jak zużycie dysku czy liczba użytkowników zmieniają się w czasie, można przewidzieć, kiedy zasoby się wyczerpią i zaplanować rozbudowę z wyprzedzeniem.
  • Analiza trendów pozwala również na wykrywanie powolnych, stopniowych degradacji wydajności, które mogłyby pozostać niezauważone przy monitorowaniu tylko chwilowych wartości.
  • Narzędzia takie jak Grafana oferują zaawansowane funkcje do wizualizacji i analizy trendów w długich okresach.
Ilustracja dla slajdu 18

Do analizy trendów metryk wykorzystuje się zaawansowane techniki statystyczne, takie jak regresja liniowa, średnie kroczące czy wygładzanie wykładnicze. Pozwalają one na wyodrębnienie trendu z danych obarczonych szumem i przewidywanie przyszłych wartości z określonym prawdopodobieństwem. Narzędzia takie jak Prometheus oferują wbudowane funkcje PromQL do prognozowania, takie jak predict_linear.

Sezonowość danych ma kluczowe znaczenie dla poprawnej analizy trendów. Ruch w systemach IT często wykazuje cykliczność dobową, tygodniową, a nawet miesięczną. Porównywanie bieżących wartości z tymi samymi okresami w przeszłości pozwala na identyfikację anomalii, które nie byłyby widoczne przy porównaniu do średniej globalnej.

Długoterminowa analiza trendów jest podstawą planowania pojemności i budżetowania IT. Na jej podstawie można prognozować, kiedy konieczny będzie zakup nowego sprzętu, zwiększenie przepustowości łącza czy migracja do większej instancji w chmurze. Pozwala to na uniknięcie gwałtownych wydatków i lepsze wykorzystanie budżetu.

19/50
Wizualizacja danych historycznych
Użycie odpowiednich typów wykresów, spójnych kolorów i jasnych etykiet jest kluczowe dla czytelności.
  • Efektywna wizualizacja danych historycznych na dashboardach jest sztuką.
  • Dobry dashboard opowiada historię i pozwala na szybkie zrozumienie stanu systemu.
  • Powinien on być zorganizowany hierarchicznie, od ogólnych wskaźników "zdrowia" usługi na górze, po bardziej szczegółowe metryki poszczególnych komponentów poniżej.
  • Dashboardy powinny być dostosowane do odbiorcy – inne informacje są potrzebne menedżerowi, a inne inżynierowi diagnozującemu problem.
Ilustracja dla slajdu 19

Wybór odpowiedniego zakresu czasu na dashboardzie ma kluczowe znaczenie dla czytelności prezentowanych danych. Zbyt krótki zakres może nie pokazać trendów, zbyt długi może przytłoczyć szczegółami. Dobrą praktyką jest udostępnienie możliwości dynamicznej zmiany zakresu czasu i poziomu agregacji, tak aby użytkownik mógł samodzielnie decydować o szczegółowości widoku.

Wizualizacja danych historycznych powinna uwzględniać adnotacje dotyczące ważnych zdarzeń, takich jak wdrożenia nowych wersji, zmiany konfiguracji czy awarie. Dzięki temu analityk może szybko skorelować zmiany na wykresie z konkretnymi działaniami zespołu. W Grafanie adnotacje mogą być dodawane ręcznie lub automatycznie z potoku CI/CD.

Porównywanie danych historycznych między podobnymi okresami, na przykład między bieżącym tygodniem a poprzednim, pozwala na szybkie wykrywanie odchyleń. Wiele narzędzi monitoringu oferuje wbudowane funkcje do takiego porównania, prezentując oba zestawy danych na jednym wykresie. To jedna z najczęściej używanych funkcji w codziennej pracy z monitoringiem.

20/50
Wykrywanie anomalii
  • Wykrywanie anomalii to technika, która polega na użyciu algorytmów statystycznych lub uczenia maszynowego do automatycznego identyfikowania nietypowych wzorców w danych telemetrycznych.
  • Zamiast definiować sztywne progi dla alertów, system uczy się, jak wygląda normalne zachowanie metryki (np. uwzględniając cykle dobowe i tygodniowe), a następnie alarmuje, gdy bieżące wartości znacząco od tego wzorca odbiegają.
  • Pozwala to na wykrywanie subtelnych problemów i nieznanych wcześniej zagrożeń, które nie zostałyby wychwycone przez tradycyjne alerty oparte na progach.
Ilustracja dla slajdu 20

Wykrywanie anomalii opiera się na założeniu, że normalne zachowanie systemu można modelować statystycznie na podstawie historycznych danych. Najprostsze metody polegają na definiowaniu przedziałów ufności wokół średniej, podczas gdy zaawansowane algorytmy wykorzystują modele sezonowe i sieci neuronowe. Wybór metody zależy od charakteru danych i dostępnych zasobów obliczeniowych.

Anomalie można podzielić na trzy główne kategorie: punktowe, kontekstowe i kolektywne. Anomalia punktowa to pojedyncza wartość znacząco odbiegająca od normy, kontekstowa to wartość nietypowa w danym kontekście czasowym, a kolektywna to sekwencja wartości, która jako całość jest nietypowa. Każda kategoria wymaga innego podejścia do detekcji i analizy.

Wdrożenie automatycznego wykrywania anomalii wymaga starannego dostrojenia czułości algorytmu. Zbyt niska czułość spowoduje przeoczenie wielu problemów, a zbyt wysoka doprowadzi do nadmiaru fałszywych alarmów. Optymalne parametry można znaleźć poprzez eksperymenty na historycznych danych, weryfikując, czy system poprawnie wykrywa znane incydenty z przeszłości.

21/50
Korelacja zdarzeń
Korelacja zdarzeń to proces automatycznego grupowania powiązanych ze sobą alertów i logów w celu zidentyfikowania pierwotnej przyczyny problemu.
  • W złożonych systemach, jeden problem często generuje lawinę alertów z różnych komponentów.
  • Ręczne analizowanie tej burzy alertów jest trudne.
  • Zaawansowane systemy monitoringu potrafią, na podstawie topologii systemu i analizy zależności, zrozumieć, że alert o niedostępności aplikacji jest spowodowany wcześniejszym alertem o awarii bazy danych, i przedstawić operatorowi jeden, skonsolidowany incydent.
Ilustracja dla slajdu 21

Korelacja może być oparta na regułach, topologii systemu lub uczeniu maszynowym. Podejście regułowe jest najbardziej przewidywalne i łatwe do zrozumienia, ale wymaga ręcznego definiowania zależności. Podejście oparte na topologii wykorzystuje wiedzę o architekturze systemu, automatycznie łącząc zdarzenia pochodzące z powiązanych komponentów. Metody oparte na uczeniu maszynowym są najbardziej zaawansowane.

W praktyce korelacja zdarzeń pozwala na redukcję liczby incydentów nawet o 90%. Zamiast setek pojedynczych alertów operator widzi kilka skonsolidowanych incydentów, każdy z jasno wskazaną potencjalną przyczyną źródłową. To znacząco przyspiesza diagnozę i zmniejsza stres zespołu operacyjnego podczas poważnych awarii.

Implementacja efektywnej korelacji wymaga zrozumienia zależności między komponentami systemu. Mapy topologiczne, które wizualizują te zależności, są nieocenionym narzędziem podczas projektowania reguł korelacji. W środowiskach chmurowych i kontenerowych mapy te mogą być generowane automatycznie na podstawie konfiguracji sieci i orkiestracji.

22/50
Health checks usług
Jest to fundamentalny mechanizm budowania systemów samonaprawiających się (self-healing).
  • Sprawdzanie stanu (health check) to mechanizm, który pozwala systemom zewnętrznym (takim jak load balancery czy orkiestratory kontenerów) na monitorowanie, czy dana instancja usługi działa poprawnie.
  • Każda usługa powinna udostępniać specjalny endpoint (np. `/health`), który zwraca kod 200 OK, jeśli usługa jest zdrowa i gotowa do przyjmowania ruchu.
  • Jeśli health check zacznie zwracać błąd, load balancer automatycznie przestanie kierować do tej instancji nowy ruch, a orkiestrator może podjąć decyzję o jej restarcie.
Ilustracja dla slajdu 22

Endpoint /health powinien sprawdzać nie tylko stan samej usługi, ale także dostępność jej kluczowych zależności, takich jak baza danych czy zewnętrzne API. Wyróżnia się dwa rodzaje kontroli: liveness probe sprawdza, czy usługa jest żywa, a readiness probe określa, czy jest gotowa do przyjmowania ruchu. Rozdzielenie tych dwóch rodzajów kontroli pozwala na bardziej precyzyjne zarządzanie ruchem.

W środowisku Kubernetes health checks są automatycznie wykorzystywane przez kubelet do podejmowania decyzji o restartowaniu kontenerów. Jeśli liveness probe zwróci błąd, Kubernetes automatycznie restartuje kontener, dążąc do samonaprawy systemu. Readiness probe jest używana przez Service do kierowania ruchu tylko do tych podów, które są gotowe go obsłużyć.

Dobrze zaprojektowany health check powinien być szybki i efektywny, aby nie obciążać niepotrzebnie systemu. Zbyt wolne health checks mogą opóźniać wykrywanie problemów, a zbyt złożone mogą same stać się przyczyną awarii. W praktyce health check powinien wykonywać tylko niezbędne kontrole.

23/50
Monitoring syntetyczny
Pozwala to na proaktywne monitorowanie działania kluczowych procesów biznesowych i mierzenie ich wydajności z perspektywy użytkownika.
  • Monitoring syntetyczny, o którym już wspominaliśmy jako o monitoringu aktywnym, polega na symulowaniu ścieżek i transakcji, jakie wykonują użytkownicy w aplikacji.
  • Zamiast prostego sprawdzania dostępności strony głównej, skrypty syntetyczne mogą realizować całe scenariusze, takie jak logowanie, wyszukiwanie produktu i dodawanie go do koszyka.
  • Testy te są uruchamiane z różnych lokalizacji geograficznych, co pozwala na ocenę globalnej wydajności aplikacji.
Ilustracja dla slajdu 23

Skrypty syntetyczne powinny odwzorowywać rzeczywiste ścieżki użytkowników, uwzględniając logowanie, nawigację po stronie, wyszukiwanie i realizację transakcji. Każdy z tych kroków powinien być mierzony osobno, aby można było precyzyjnie zidentyfikować, który etap działa wolno. W zaawansowanych implementacjach skrypty potrafią rejestrować zrzuty ekranu i nagrania wideo.

Wybór lokalizacji, z których uruchamiane są testy syntetyczne, ma kluczowe znaczenie dla uzyskania miarodajnych wyników. Jeśli wszyscy użytkownicy pochodzą z Europy, testowanie z Ameryki Południowej może nie być konieczne. Z drugiej strony testowanie z wielu lokalizacji pozwala na wykrycie problemów regionalnych dotyczących konkretnych dostawców usług internetowych.

Testy syntetyczne powinny być uruchamiane z częstotliwością dostosowaną do charakteru aplikacji. Dla systemów krytycznych testy co minutę są standardem, podczas gdy dla mniej ważnych aplikacji wystarczające może być testowanie co godzinę. Zbyt częste testy mogą generować znaczny ruch i wpływać na wydajność systemu.

24/50
Monitoring end-to-end
  • Monitoring end-to-end (od końca do końca) to podejście, które ma na celu ocenę działania całego systemu z perspektywy użytkownika, obejmując wszystkie komponenty, od przeglądarki klienta po bazy danych. Łączy on w sobie techniki monitoringu syntetycznego, monitoringu realnych użytkowników (RUM, Real User Monitoring), który zbiera dane o wydajności bezpośrednio z przeglądarek, oraz śledzenia rozproszonego (distributed tracing) w backendzie.
  • Taki całościowy obraz pozwala na precyzyjne zidentyfikowanie, która część złożonego systemu jest odpowiedzialna za ewentualne spowolnienia.
Ilustracja dla slajdu 24

Distributed tracing jest kluczowym elementem monitoringu end-to-end, ponieważ pozwala na śledzenie pojedynczego żądania przez wszystkie usługi, przez które przechodzi. Każda usługa dodaje do śladu informacje o czasie przetwarzania i ewentualnych błędach. Narzędzia takie jak Jaeger czy Zipkin wizualizują te dane w formie wykresów kaskadowych.

Real User Monitoring dostarcza informacji o działaniu aplikacji z perspektywy rzeczywistych użytkowników. Dane zbierane są bezpośrednio w przeglądarce, co pozwala na pomiar czasu ładowania stron, interakcji użytkownika i błędów JavaScript. RUM uzupełnia monitoring syntetyczny, pokazując, jak aplikacja działa w rzeczywistych warunkach.

Połączenie metryk z monitoringu syntetycznego, RUM i śledzenia rozproszonego daje pełny obraz działania systemu. Operator może rozpocząć analizę od ogólnego widoku wydajności aplikacji, a następnie stopniowo zagłębiać się w szczegóły poszczególnych komponentów. To podejście, znane jako obserwowalność, jest standardem w nowoczesnych organizacjach IT.

25/50
Integracja monitoringu z CI/CD
  • Integracja systemu monitoringu z potokiem CI/CD pozwala na wczesne wykrywanie problemów z wydajnością i stabilnością.
  • Po wdrożeniu nowej wersji aplikacji na środowisko testowe, potok może automatycznie uruchomić zestaw testów obciążeniowych i analizować kluczowe metryki.
  • Jeśli nowa wersja powoduje znaczącą degradację wydajności lub wzrost liczby błędów, wdrożenie jest automatycznie zatrzymywane.
  • Ponadto, system CI/CD może automatycznie oznaczać wdrożenia na wykresach w systemie monitoringu, co ułatwia korelowanie zmian w metrykach z konkretnymi zmianami w kodzie.
Ilustracja dla slajdu 25

Automatyczne blokowanie wdrożeń na podstawie wyników monitoringu jest kluczową praktyką w zaawansowanych potokach CI/CD. Jeśli po wdrożeniu nowej wersji na środowisko staging metryki wskazują na wzrost czasu odpowiedzi lub liczby błędów, wdrożenie na produkcję jest automatycznie wstrzymywane. Mechanizm ten nazywa się bramką jakości i jest implementowany w narzędziach takich jak Spinnaker czy ArgoCD.

Oznaczanie wdrożeń na dashboardach monitoringu pozwala na szybką korelację zmian w metrykach z konkretnymi wersjami kodu. W Grafanie adnotacje o wdrożeniach są automatycznie pobierane z systemu CI/CD i wyświetlane na wykresach. Dzięki temu każdy członek zespołu może zobaczyć, które wdrożenie spowodowało poprawę lub pogorszenie wydajności.

Integracja monitoringu z CI/CD umożliwia również automatyczne uruchamianie testów wydajnościowych po każdym wdrożeniu. Wyniki tych testów są porównywane z historycznymi wartościami, a wszelkie znaczące odchylenia są natychmiast raportowane. To pozwala na szybkie wykrywanie regresji wydajnościowych już na wczesnym etapie.

26/50
Automatyzacja reakcji na alerty
  • Wiele powtarzalnych problemów wykrywanych przez system monitoringu można rozwiązać automatycznie, bez interwencji człowieka.
  • Automatyzacja reakcji na alerty, zwana też automatyczną naprawą (remediation), polega na uruchamianiu predefiniowanych skryptów lub akcji w odpowiedzi na konkretne alerty.
  • Na przykład, alert o zapełnieniu dysku może automatycznie uruchomić skrypt czyszczący stare pliki tymczasowe.
  • Alert o awarii usługi może uruchomić jej restart.
  • Takie podejście, często realizowane w ramach praktyk AIOps (AI for IT Operations), pozwala na szybsze rozwiązywanie problemów i odciążenie zespołu operacyjnego.
Ilustracja dla slajdu 26

Automatyczna naprawa, znana również jako auto-remediation, jest naturalnym rozszerzeniem systemu alertów. Zamiast budzić administratora w środku nocy z powodu zapełnienia dysku, system może automatycznie uruchomić skrypt czyszczący i dopiero w razie niepowodzenia eskalować problem do człowieka. Takie podejście znacząco zmniejsza obciążenie zespołów operacyjnych.

Implementacja automatycznych reakcji wymaga starannego zaprojektowania logiki i zabezpieczeń. Skrypty naprawcze muszą być dokładnie testowane, aby nie pogorszyć sytuacji. Warto wprowadzić mechanizmy cofania zmian, tak aby możliwe było przywrócenie poprzedniego stanu w przypadku błędnej decyzji automatycznego systemu.

W zaawansowanych implementacjach AIOps system uczy się na podstawie historycznych danych, które akcje naprawcze są najskuteczniejsze w przypadku konkretnych alertów. Z czasem system potrafi samodzielnie diagnozować i rozwiązywać coraz więcej problemów bez interwencji człowieka, co przekłada się na wyższą dostępność usług i niższe koszty operacyjne.

27/50
Automatyzacja runbooków
  • Runbook to szczegółowa, krok-po-kroku instrukcja opisująca, jak rozwiązać konkretny problem lub przeprowadzić złożoną operację.
  • Tradycyjnie, runbooki były dokumentami tekstowymi.
  • Automatyzacja runbooków to praktyka przekształcania tych instrukcji w zautomatyzowane skrypty i przepływy pracy (workflows).
  • Kiedy wystąpi problem, operator zamiast ręcznie wykonywać kroki z dokumentu, uruchamia jeden zautomatyzowany runbook, który wykonuje wszystkie niezbędne czynności diagnostyczne i naprawcze.
  • Zwiększa to szybkość, powtarzalność i niezawodność reakcji na incydenty.
Ilustracja dla slajdu 27

Automatyzacja runbooków może być realizowana za pomocą dedykowanych platform takich jak Rundeck, StackStorm czy Ansible Tower. Platformy te oferują graficzny interfejs do tworzenia przepływów pracy, integrację z systemami monitoringu i ticketowymi oraz mechanizmy kontroli dostępu. Dzięki temu nawet osoby nietechniczne mogą uruchamiać złożone procedury naprawcze.

Wersjonowanie runbooków jest równie ważne jak wersjonowanie kodu źródłowego. Zmiany w procedurach naprawczych powinny być przechowywane w repozytorium Git, poddawane przeglądowi kodu i testowane przed wdrożeniem. Pozwala to na śledzenie historii zmian i szybkie przywracanie poprzednich wersji w razie problemów.

Regularne testowanie zautomatyzowanych runbooków podczas symulowanych awarii jest kluczowe dla utrzymania ich skuteczności. Chaos Engineering, praktyka celowego wprowadzania awarii w kontrolowanym środowisku, pozwala na weryfikację, czy systemy naprawcze działają zgodnie z oczekiwaniami. To niezbędny element dojrzałej kultury DevOps.

28/50
Dashboardy dla zespołów
  • Dashboardy monitoringu nie powinny być tworzone tylko dla zespołu operacyjnego.
  • Różne zespoły w organizacji mają różne potrzeby i mogą czerpać wartość z danych telemetrycznych.
  • Zespół deweloperski może potrzebować dashboardu pokazującego wydajność konkretnych funkcji aplikacji i liczbę błędów.
  • Zespół biznesowy może być zainteresowany dashboardem pokazującym liczbę rejestracji użytkowników czy wartość sprzedaży w czasie rzeczywistym.
  • Udostępnianie tych danych promuje kulturę współodpowiedzialności za jakość i wydajność usługi.
Ilustracja dla slajdu 28

Projektowanie dashboardów dla różnych odbiorców wymaga zrozumienia ich potrzeb i języka, jakim się posługują. Dla zespołu zarządzającego najważniejsze są wskaźniki biznesowe, takie jak dostępność usługi, liczba aktywnych użytkowników i wartość generowanych transakcji. Dane techniczne, takie jak użycie CPU czy pamięci, są dla nich drugorzędne.

Zespół deweloperski potrzebuje dashboardów pokazujących szczegóły techniczne, takie jak czas odpowiedzi poszczególnych endpointów, liczba wyjątków w kodzie czy wydajność zapytań do bazy danych. Ważne jest, aby dane te były powiązane z konkretnymi wersjami kodu i wdrożeniami, co ułatwia identyfikację regresji wydajnościowych.

Zespół operacyjny wymaga dostępu do aktualnych danych w czasie rzeczywistym, alertów krytycznych i informacji o stanie całej infrastruktury. Dashboardy operacyjne powinny być proste i czytelne, z wyraźnym oznaczeniem stanów awaryjnych. Automatyczne odświeżanie danych i możliwość szybkiego przejścia do szczegółów poszczególnych komponentów to kluczowe funkcje.

29/50
Audyty i compliance
  • Systemy monitoringu i logowania odgrywają kluczową rolę w audytach bezpieczeństwa i zapewnianiu zgodności z regulacjami (compliance), takimi jak RODO czy PCI DSS.
  • Logi dostępu stanowią niezaprzeczalny dowód na to, kto, kiedy i do jakich danych miał dostęp.
  • Systemy monitoringu integralności plików (File Integrity Monitoring) alarmują o wszelkich nieautoryzowanych zmianach w krytycznych plikach systemowych.
  • Posiadanie scentralizowanego i zabezpieczonego przed modyfikacją repozytorium logów jest często podstawowym wymogiem podczas audytów bezpieczeństwa.
Ilustracja dla slajdu 29

Wymogi compliance, takie jak RODO, PCI DSS czy HIPAA, nakładają na organizacje obowiązek przechowywania i udostępniania logów dostępu do danych osobowych lub finansowych. System monitoringu musi zapewnić, że logi te są przechowywane w sposób uniemożliwiający ich modyfikację i usunięcie. Rozwiązania takie jak WORM są często wymagane do spełnienia tych wymogów.

Audyt bezpieczeństwa często rozpoczyna się od analizy logów z systemu monitoringu. Dlatego tak ważne jest, aby logi zawierały kompletne informacje o zdarzeniach, w tym adres IP źródła, identyfikator użytkownika, typ operacji i jej rezultat. Brak któregokolwiek z tych elementów może uniemożliwić przeprowadzenie skutecznego dochodzenia po incydencie bezpieczeństwa.

Regularne przeglądy uprawnień dostępu do systemów monitoringu i logów są wymagane przez większość standardów bezpieczeństwa. Należy zapewnić, że tylko upoważnione osoby mają dostęp do danych telemetrycznych, a wszelkie próby nieautoryzowanego dostępu są rejestrowane i analizowane. To kluczowy element budowania zaufania do systemu.

30/50
Polityka retencji logów
  • Polityka retencji logów określa, jak długo logi z różnych systemów powinny być przechowywane.
  • Jest to kompromis między potrzebami (diagnostyka, bezpieczeństwo, zgodność z prawem) a kosztami przechowywania stale rosnącej ilości danych.
  • Logi potrzebne do bieżącej diagnostyki mogą być przechowywane w szybkim, gorącym magazynie (np. Elasticsearch) przez kilka tygodni.
  • Starsze logi, potrzebne do celów audytowych, mogą być archiwizowane w tańszym, zimnym magazynie (np. Amazon S3 Glacier) przez wiele miesięcy lub lat, zgodnie z wymaganiami prawnymi.
Ilustracja dla slajdu 30

Okres retencji logów powinien być określony dla każdej kategorii danych osobno, uwzględniając zarówno wymogi prawne, jak i praktyczne potrzeby diagnostyczne. Logi systemowe mogą być przechowywane przez kilka tygodni, podczas gdy logi audytowe muszą być przechowywane nawet przez kilka lat. Koszty przechowywania rosną proporcjonalnie do ilości danych, dlatego polityka retencji jest kompromisem między bezpieczeństwem a ekonomią.

Implementacja polityki retencji w systemach takich jak Elasticsearch opiera się na mechanizmach ILM. Pozwala on na automatyczne przenoszenie danych między warstwami przechowywania i usuwanie starych indeksów. Można zdefiniować politykę, która po 30 dniach przenosi dane do węzłów o niższej wydajności, a po 90 dniach całkowicie je usuwa.

Archiwizacja logów do chmurowego magazynu, takiego jak Amazon S3 Glacier czy Azure Archive Storage, jest popularnym rozwiązaniem dla danych wymagających długoterminowego przechowywania. Przed archiwizacją warto skompresować dane, co może zmniejszyć ich rozmiar nawet o 90%. Ważne jest również zapewnienie możliwości szybkiego przywrócenia zarchiwizowanych danych.

31/50
Monitoring baz danych
  • Monitoring baz danych jest specjalistyczną dziedziną, kluczową dla wydajności większości aplikacji.
  • Oprócz podstawowych metryk systemowych, należy monitorować wskaźniki specyficzne dla bazy danych, takie jak liczba aktywnych połączeń, wskaźnik trafień w cache (cache hit ratio), liczba zapytań na sekundę oraz czas wykonywania najwolniejszych zapytań.
  • Wiele systemów bazodanowych udostępnia specjalne widoki i narzędzia, które dają głęboki wgląd w ich wewnętrzne działanie i pozwalają na precyzyjną optymalizację wydajności.
Ilustracja dla slajdu 31

Monitorowanie czasu wykonywania zapytań wymaga zaawansowanych narzędzi, które potrafią przechwytywać i analizować wszystkie zapytania SQL kierowane do bazy danych. Narzędzia takie jak pg_stat_statements dla PostgreSQL czy Query Performance Insight dla Azure SQL dostarczają szczegółowych informacji o najwolniejszych zapytaniach. Dzięki temu administrator może szybko zidentyfikować i zoptymalizować problematyczne zapytania.

Cache hit ratio jest miarą efektywności mechanizmów buforowania bazy danych. Wysoki wskaźnik oznacza, że większość danych jest odczytywana z pamięci podręcznej, co jest znacznie szybsze niż odczyt z dysku. Nagły spadek tego wskaźnika może wskazywać na problem z konfiguracją pamięci podręcznej lub na zmianę wzorca dostępu do danych.

Monitorowanie replikacji jest kluczowe dla zapewnienia spójności danych w systemach z replikacją. Opóźnienie replikacji, mierzone w bajtach lub czasie, pokazuje, jak bardzo repliki są opóźnione względem źródła. Zbyt duże opóźnienie może prowadzić do odczytu nieaktualnych danych przez aplikacje korzystające z replik.

32/50
Monitoring kontenerów
  • Monitoring środowisk skonteneryzowanych, takich jak Kubernetes, wprowadza nowe wyzwania.
  • Kontenery są efemeryczne – mogą być tworzone i usuwane w ciągu sekund, a ich adresy IP ciągle się zmieniają.
  • Tradycyjne narzędzia monitoringu, oparte na statycznej konfiguracji, nie sprawdzają się w takim środowisku.
  • Nowoczesne systemy, takie jak Prometheus, są zaprojektowane do pracy w takich warunkach.
  • Dzięki mechanizmom service discovery, potrafią one automatycznie wykrywać nowe kontenery i zaczynać zbierać z nich metryki, a także radzić sobie z ich znikaniem.
Ilustracja dla slajdu 32

W środowisku Kubernetes monitoring musi uwzględniać nie tylko pojedyncze kontenery, ale także wyższe poziomy abstrakcji, takie jak pody, deploymenty i usługi. Każdy z tych poziomów dostarcza innych informacji i wymaga innego podejścia do zbierania metryk. Prometheus, zintegrowany z Kubernetes przez kube-state-metrics i cAdvisor, jest standardem w tej dziedzinie.

Kube-state-metrics generuje metryki opisujące stan obiektów Kubernetes, takie jak liczba replik, stan podów czy wykorzystanie zasobów. Dzięki tym metrykom można tworzyć alerty informujące o nieoczekiwanych stanach, takich jak pody w stanie CrashLoopBackOff czy deploymenty z niewystarczającą liczbą replik. To kluczowe dane dla operatorów Kubernetes.

cAdvisor, zintegrowany z kubeletem, dostarcza szczegółowych metryk dotyczących wykorzystania zasobów przez poszczególne kontenery, takich jak CPU, pamięć, sieć i dysk. Dane te są automatycznie eksponowane przez kubelet i zbierane przez Prometheusa bez konieczności dodatkowej konfiguracji. To jedna z największych zalet monitorowania Kubernetes z Prometheusem.

33/50
Monitoring w chmurze
Korzystanie z tych natywnych narzędzi jest często najprostszym i najskuteczniejszym sposobem na monitorowanie infrastruktury chmurowej.
  • Dostawcy chmury publicznej, tacy jak AWS, Azure i GCP, oferują bogate, zintegrowane usługi do monitoringu.
  • Usługi takie jak Amazon CloudWatch czy Azure Monitor automatycznie zbierają metryki i logi ze wszystkich zasobów działających w chmurze, od maszyn wirtualnych po zarządzane bazy danych i funkcje serverless.
  • Zapewniają one również mechanizmy do tworzenia dashboardów, definiowania alertów i automatyzacji reakcji.
Ilustracja dla slajdu 33

Amazon CloudWatch oferuje szeroki zakres metryk dla usług AWS, od prostych takich jak CPUUtilization dla EC2 po złożone, jak liczba błędów 4xx i 5xx dla API Gateway. CloudWatch Logs umożliwia scentralizowane zbieranie logów z różnych usług, a CloudWatch Alarms pozwala na definiowanie reguł alertów i automatyczne uruchamianie akcji naprawczych. Integracja z AWS Lambda umożliwia wykonywanie dowolnych akcji.

Azure Monitor oferuje zbliżoną funkcjonalność dla platformy Microsoft. Application Insights jest szczególnie wartościowy dla aplikacji, dostarczając zaawansowane możliwości monitorowania wydajności, w tym śledzenie rozproszone i mapę zależności. Log Analytics Workspace umożliwia zaawansowaną analizę logów przy użyciu języka zapytań Kusto.

Google Cloud Monitoring, wcześniej znany jako Stackdriver, oferuje monitoring dla GCP z możliwością monitorowania również zasobów hybrydowych i wielochmurowych. Jego integracja z Prometheusem jest szczególnie zaawansowana, umożliwiając import metryk Prometheus do Cloud Monitoring. To ułatwia migrację między środowiskami.

34/50
Monitoring hybrydowy
  • Wiele organizacji korzysta z architektury hybrydowej, łączącej zasoby we własnym centrum danych (on-premise) z usługami w chmurze publicznej.
  • Monitorowanie takiego środowiska jest wyzwaniem, ponieważ wymaga integracji danych z wielu różnych systemów.
  • Celem jest stworzenie jednego, spójnego obrazu całej infrastruktury.
  • Można to osiągnąć, wysyłając dane z obu środowisk do jednego, centralnego systemu monitoringu (np. hostowanego w chmurze) lub używając narzędzi, które potrafią agregować i wizualizować dane z wielu źródeł, w tym z natywnych narzędzi chmurowych.
Ilustracja dla slajdu 34

Wyzwaniem monitoringu hybrydowego jest zapewnienie spójnego formatu danych z różnych źródeł. Metryki z chmury mogą być wyrażone w innych jednostkach niż te z infrastruktury lokalnej, a logi mogą mieć różne formaty. Rozwiązaniem jest stosowanie standardów takich jak OpenTelemetry, które zapewniają ujednolicony sposób zbierania i eksportowania danych telemetrycznych.

Centralny system monitoringu w architekturze hybrydowej powinien mieć dostęp do obu środowisk przez bezpieczne połączenia sieciowe. W praktyce często stosuje się model agentowy, gdzie agenci w każdym środowisku zbierają dane i wysyłają je do centralnej instancji. W przypadku chmury agenci mogą działać jako usługi zarządzane.

W architekturze hybrydowej szczególnie ważne jest monitorowanie opóźnień sieciowych między środowiskami. Ruch między chmurą a lokalnym centrum danych musi przechodzić przez internet lub dedykowane łącze, co wprowadza dodatkowe opóźnienia. Monitorowanie tych opóźnień pozwala na wczesne wykrywanie problemów z łącznością.

35/50
Integracja z systemami ticketowymi
  • Integracja systemu monitoringu z systemem do zarządzania zgłoszeniami, takim jak Jira czy ServiceNow, pozwala na automatyzację procesu zarządzania incydentami.
  • Kiedy system monitoringu wygeneruje krytyczny alert, może on automatycznie utworzyć nowy ticket w systemie zgłoszeniowym, przypisując go do odpowiedniego zespołu i wypełniając go wszystkimi niezbędnymi informacjami kontekstowymi.
  • Taka integracja zapewnia, że każdy alert jest śledzony, a proces jego rozwiązywania jest udokumentowany, co ułatwia późniejszą analizę i raportowanie.
Ilustracja dla slajdu 35

Automatyczne tworzenie ticketów z alertów monitoringu powinno być skonfigurowane tak, aby każdy ticket zawierał komplet informacji niezbędnych do diagnozy. Oprócz opisu problemu, ticket powinien zawierać link do dashboardu z odpowiednimi wykresami, zrzuty ekranu i szczegółowe logi. Dzięki temu inżynier przejmujący ticket ma od razu pełen kontekst sytuacji.

Dwukierunkowa integracja między monitoringiem a systemem ticketowym umożliwia automatyczne wyciszanie alertów po utworzeniu ticketu. Zapobiega to generowaniu kolejnych alertów dotyczących tego samego problemu. Gdy ticket zostanie zamknięty, alerty mogą zostać automatycznie wznowione.

Zaawansowane integracje umożliwiają również automatyczne przypisywanie ticketów do odpowiednich zespołów na podstawie treści alertu. Jeśli alert dotyczy bazy danych, ticket trafia do zespołu bazodanowego, a jeśli aplikacji – do zespołu deweloperskiego. Przyspiesza to znacząco proces eskalacji i rozwiązywania problemów.

36/50
Analiza przyczyn źródłowych wspomagana narzędziami
Analiza przyczyn źródłowych (RCA) to proces dochodzenia, którego celem jest zidentyfikowanie fundamentalnej przyczyny incydentu, a nie tylko jego objawów.
  • Nowoczesne narzędzia do obserwowalności znacząco wspomagają ten proces.
  • Dzięki korelacji metryk, logów i śladów, potrafią one często automatycznie wskazać, która zmiana w kodzie, która anomalia w metrykach czy który błąd w logach był najbardziej prawdopodobną przyczyną problemu.
  • Skraca to drastycznie czas potrzebny na diagnozę i pozwala szybciej wdrożyć trwałe rozwiązanie.
Ilustracja dla slajdu 36

Nowoczesne narzędzia do analizy przyczyn źródłowych wykorzystują techniki takie jak analiza korelacji krzyżowej szeregów czasowych. Polega ona na badaniu, które metryki zmieniają się w czasie w sposób najbardziej skorelowany z wystąpieniem problemu. Metryki, które zmieniają się wcześniej niż inne, są potencjalnymi przyczynami, a nie skutkami awarii.

Mapy zależności usług, generowane automatycznie na podstawie danych z monitoringu i śledzenia, są nieocenionym narzędziem w RCA. Pokazują one, które usługi są od siebie zależne i jak awaria jednej może wpływać na inne. Dzięki temu operator może szybko zidentyfikować komponent, który jako pierwszy uległ awarii.

Wykorzystanie uczenia maszynowego do RCA pozwala na analizę wzorców z przeszłych incydentów i automatyczne sugerowanie potencjalnych przyczyn na podstawie podobieństwa do wcześniejszych przypadków. Z czasem system staje się coraz skuteczniejszy, ponieważ uczy się na podstawie każdego nowego incydentu i sposobu jego rozwiązania przez zespół.

37/50
Testy wydajnościowe
Polegają one na poddaniu aplikacji kontrolowanemu obciążeniu w celu zmierzenia jej kluczowych wskaźników wydajności, takich jak czas odpowiedzi i przepustowość.
  • Testy wydajnościowe są nierozerwalnie związane z monitoringiem.
  • Podczas testów, system monitoringu jest używany do obserwowania, jak zachowują się poszczególne komponenty infrastruktury (serwery, bazy danych) i do identyfikacji wąskich gardeł.
  • Regularne przeprowadzanie testów wydajnościowych, na przykład w ramach potoku CI/CD, pozwala na wczesne wykrywanie regresji wydajnościowych.
Ilustracja dla slajdu 37

Testy wydajnościowe powinny być powtarzalne i wykonywane w kontrolowanych warunkach, aby wyniki były miarodajne. Izolacja środowiska testowego od produkcyjnego jest kluczowa, ponieważ inne procesy mogłyby zakłócać wyniki. W praktyce często wykorzystuje się środowiska staging, które są repliką środowiska produkcyjnego, ale o mniejszej skali.

Narzędzia do testów wydajnościowych, takie jak JMeter, Gatling czy k6, oferują zaawansowane funkcje do definiowania scenariuszy testowych i generowania raportów. Integracja tych narzędzi z systemem monitoringu pozwala na korelację wyników testów z metrykami infrastruktury. Dzięki temu można precyzyjnie zidentyfikować wąskie gardła.

Automatyzacja testów wydajnościowych w potoku CI/CD pozwala na wykrywanie regresji wydajnościowych na wczesnym etapie. Każda zmiana w kodzie może być testowana pod kątem wpływu na wydajność, a wszelkie odchylenia od ustalonych norm są natychmiast raportowane. To kluczowa praktyka w utrzymaniu wysokiej jakości oprogramowania.

38/50
Testy obciążeniowe i monitoring
Podczas gdy narzędzie do testów (np. JMeter, Gatling) generuje ruch i mierzy metryki z perspektywy klienta, system monitoringu dostarcza kluczowych informacji o tym, co dzieje się wewnątrz systemu.
  • Testy obciążeniowe (load testing) to specyficzny rodzaj testów wydajnościowych, których celem jest sprawdzenie, jak system zachowuje się pod oczekiwanym, normalnym i szczytowym obciążeniem.
  • Korelacja tych dwóch źródeł danych pozwala na precyzyjne zrozumienie, jak wzrost obciążenia wpływa na zużycie zasobów i który komponent jako pierwszy ulega nasyceniu.
Ilustracja dla slajdu 38

Podczas testów obciążeniowych kluczowe jest monitorowanie zarówno metryk aplikacyjnych, jak i infrastrukturalnych. Czas odpowiedzi aplikacji powinien być korelowany z użyciem CPU, pamięci i operacji I/O na serwerach. Jeśli czas odpowiedzi rośnie, ale zasoby serwera nie są w pełni wykorzystane, problem może leżeć w aplikacji, a nie w infrastrukturze.

Monitorowanie podczas testów obciążeniowych pozwala na identyfikację nieskutecznych mechanizmów skalowania. Jeśli system automatycznie skaluje się w odpowiedzi na wzrost obciążenia, ale nowe instancje są gotowe do przyjmowania ruchu z opóźnieniem, użytkownicy mogą doświadczać spowolnień. Testy obciążeniowe pomagają dostroić parametry skalowania.

Analiza wyników testów obciążeniowych powinna uwzględniać również zachowanie systemu po zakończeniu obciążenia. System powinien płynnie powrócić do normalnego stanu, bez pozostawiania niepotrzebnych zasobów. Długotrwałe utrzymywanie podwyższonego poziomu zasobów po zakończeniu testu może wskazywać na problemy z mechanizmami skalowania w dół.

39/50
Testy przeciążeniowe i monitoring
Monitoring podczas testów przeciążeniowych jest kluczowy dla obserwowania, jak system się degraduje – które komponenty zawodzą jako pierwsze i w jaki sposób system próbuje się odzyskać po zmniejszeniu obciążenia.
  • Testy przeciążeniowe (stress testing) idą o krok dalej niż testy obciążeniowe.
  • Ich celem jest znalezienie punktu krytycznego systemu poprzez stopniowe zwiększanie obciążenia aż do momentu, gdy system ulegnie awarii.
  • Testy te pozwalają na identyfikację ukrytych słabości i weryfikację mechanizmów odporności na awarie.
Ilustracja dla slajdu 39

Testy przeciążeniowe pozwalają na zrozumienie, jak system zachowuje się w ekstremalnych warunkach i jakie są granice jego wydajności. Wiedza o punkcie krytycznym jest niezbędna do planowania pojemności i określania maksymalnego obciążenia, jakie system może bezpiecznie obsłużyć. Monitoring podczas tych testów dostarcza bezcennych danych o najsłabszych ogniwach architektury.

Podczas testów przeciążeniowych szczególnie ważne jest monitorowanie mechanizmów ochronnych systemu, takich jak circuit breakery, throttling i kolejkowanie żądań. Powinny one aktywować się w odpowiedniej kolejności i zapobiegać całkowitej awarii systemu. Jeśli mechanizmy te nie działają prawidłowo, system może ulec całkowitemu zablokowaniu.

Po zakończeniu testów przeciążeniowych i zmniejszeniu obciążenia należy monitorować proces odzyskiwania systemu. System powinien samodzielnie powrócić do normalnego stanu, bez potrzeby ręcznej interwencji. Zdolność do samonaprawy po ekstremalnych obciążeniach jest kluczowym wskaźnikiem dojrzałości architektury systemu.

40/50
Planowanie pojemności
Planowanie pojemności (capacity planning) to proces przewidywania przyszłego zapotrzebowania na zasoby IT i zapewnienia, że infrastruktura będzie w stanie je obsłużyć.
Jest to proces oparty na danych, który wykorzystuje historyczne metryki z systemu monitoringu do prognozowania przyszłych trendów wzrostu.
  • Analizując, jak rosło zużycie CPU, pamięci czy przestrzeni dyskowej w przeszłości, można z dużym prawdopodobieństwem oszacować, kiedy obecne zasoby się wyczerpią i zaplanować ich rozbudowę z odpowiednim wyprzedzeniem, unikając w ten sposób awarii i problemów z wydajnością.
Ilustracja dla slajdu 40

Planowanie pojemności opiera się na analizie trendów historycznych i prognozowaniu przyszłych potrzeb. Wymaga regularnego monitorowania kluczowych wskaźników, takich jak zużycie CPU, pamięci, dysku i przepustowości sieci, oraz ich korelacji z liczbą użytkowników i wolumenem transakcji. Tylko na podstawie takich danych można podejmować racjonalne decyzje o rozbudowie infrastruktury.

W przypadku infrastruktury chmurowej planowanie pojemności jest prostsze, ponieważ zasoby mogą być skalowane praktycznie w czasie rzeczywistym. Należy jednak pamiętać o limitach nałożonych przez dostawcę chmury, takich jak maksymalna liczba vCPU na konto czy maksymalna przepustowość dla danego typu instancji. Przekroczenie tych limitów może prowadzić do niespodziewanych problemów.

Planowanie pojemności powinno uwzględniać również czynniki sezonowe, takie jak czarny piątek, święta czy promocje. W tych okresach obciążenie systemu może wzrosnąć wielokrotnie, a brak odpowiedniego przygotowania może prowadzić do awarii i utraty przychodów. Monitorowanie historycznych danych z takich okresów pozwala na lepsze przygotowanie się na przyszłe szczyty.

41/50
Prognozowanie wykorzystania zasobów
  • Nowoczesne systemy monitoringu, często z wykorzystaniem uczenia maszynowego, oferują zaawansowane funkcje prognozowania.
  • Na podstawie danych historycznych, potrafią one tworzyć modele predykcyjne, które z dużą dokładnością prognozują przyszłe wartości metryk.
  • Na przykład, system może przewidzieć, że przy obecnym tempie wzrostu, przestrzeń dyskowa na serwerze bazy danych wyczerpie się za 30 dni.
  • Takie prognozy, często prezentowane w formie wizualnej na wykresach, są niezwykle cennym narzędziem dla administratorów, pozwalającym na proaktywne zarządzanie infrastrukturą.
Ilustracja dla slajdu 41

Prognozowanie wartości metryk opiera się na założeniu, że wzorce z przeszłości będą kontynuowane w przyszłości. W przypadku stabilnych systemów jest to założenie bezpieczne, ale w dynamicznie zmieniających się środowiskach prognozy mogą być mniej dokładne. Dlatego ważne jest regularne weryfikowanie prognoz i dostosowywanie modeli do zmieniających się warunków.

Modele liniowe są najprostsze i najłatwiejsze do interpretacji, ale często nie oddają złożoności rzeczywistych danych. Zaawansowane metody, takie jak ARIMA, sieci LSTM czy modele oparte na gradient boosting, potrafią uchwycić bardziej złożone wzorce, ale wymagają więcej danych i mocy obliczeniowej. Wybór metody zależy od dostępnych zasobów i wymaganej dokładności.

Wizualizacja prognoz na dashboardach monitoringu powinna uwzględniać przedziały ufności, które pokazują zakres możliwych wartości. Dzięki temu operator widzi nie tylko przewidywaną wartość, ale także poziom niepewności prognozy. Szeroki przedział ufności oznacza, że prognoza jest mniej wiarygodna i wymaga ostrożniejszej interpretacji.

42/50
Najczęstsze problemy w monitoringu
Do najczęstszych problemów w implementacji monitoringu należy "szum alertów", czyli generowanie zbyt wielu fałszywych lub nieistotnych powiadomień, co prowadzi do ich ignorowania.
  • Innym problemem jest monitorowanie niewłaściwych rzeczy – skupianie się na niskopoziomowych metrykach infrastruktury, przy jednoczesnym ignorowaniu wskaźników, które realnie wpływają na doświadczenie użytkownika.
  • Częstym błędem jest również traktowanie monitoringu jako projektu, a nie ciągłego procesu, co prowadzi do tego, że dashboardy i alerty szybko stają się nieaktualne w miarę ewolucji systemu.
Ilustracja dla slajdu 42

Jednym z najpoważniejszych problemów w monitoringu jest brak spójnej strategii i definiowania celów. Wiele organizacji implementuje monitoring bez jasnego określenia, co chce osiągnąć i jakie pytania ma ono odpowiadać. Prowadzi to do sytuacji, w której zbierane są ogromne ilości danych, ale nie przekładają się one na lepsze zrozumienie systemu czy szybsze rozwiązywanie problemów.

Innym częstym problemem jest brak utrzymania systemu monitoringu. Dashboardy i alerty, które nie są regularnie aktualizowane, szybko tracą na wartości. Zmiany w architekturze systemu, nowe usługi czy zmiany nazw komponentów powinny być natychmiast odzwierciedlane w konfiguracji monitoringu. W przeciwnym razie operatorzy przestają ufać danym.

Problemy techniczne, takie jak przeciążenie systemu monitoringu w wyniku zbyt dużej liczby zbieranych danych, również są częste. Niewłaściwa konfiguracja agregacji, zbyt szczegółowe próbkowanie czy zbyt długi okres retencji mogą prowadzić do pogorszenia wydajności. Regularny przegląd konfiguracji i optymalizacja są kluczowe dla utrzymania wydajności systemu monitoringu.

43/50
Przykłady narzędzi open-source
  • Ekosystem narzędzi open-source do monitoringu i obserwowalności jest niezwykle bogaty.
  • W dziedzinie metryk i alertów dominują Prometheus i Grafana.
  • Do zbierania i analizy logów najczęściej używa się stosu Elastic (Elasticsearch, Logstash/Beats, Kibana).
  • W obszarze śledzenia rozproszonego (tracing) popularne są narzędzia takie jak Jaeger i Zipkin.
  • Wszystkie te narzędzia są częścią Cloud Native Computing Foundation (CNCF) i doskonale integrują się ze sobą, tworząc kompleksową, otwartą platformę do obserwowalności.
Ilustracja dla slajdu 43

Poza wymienionymi narzędziami, w ekosystemie open-source istnieje wiele innych wartościowych rozwiązań. Nagios i Zabbix, choć starsze, wciąż są szeroko stosowane w środowiskach o mniej dynamicznej infrastrukturze. Oferują one bogate możliwości monitorowania sieci, serwerów i usług, choć ich architektura jest mniej dostosowana do środowisk chmurowych i kontenerowych.

W dziedzinie zbierania i analizy logów popularną alternatywą dla ELK jest Graylog, który oferuje prostsze wdrożenie i zarządzanie. Loki, rozwijany przez twórców Grafany, jest nowoczesnym systemem logowania zoptymalizowanym pod kątem integracji z Prometheusem i minimalizacją kosztów przechowywania. Każde z tych narzędzi ma swoje mocne strony.

Netdata oferuje niezwykle szczegółowe monitorowanie w czasie rzeczywistym z pięknymi wizualizacjami, wymagając minimalnej konfiguracji. Jest idealnym narzędziem dla administratorów potrzebujących szybkiego wglądu w stan systemu bez skomplikowanej konfiguracji. Choć nie nadaje się do monitorowania na dużą skalę, doskonale sprawdza się w mniejszych środowiskach.

44/50
Przykłady narzędzi komercyjnych
  • Na rynku istnieje również wiele potężnych, komercyjnych platform do monitoringu i obserwowalności, które oferują zintegrowane rozwiązanie w modelu SaaS (Software as a Service).
  • Do liderów w tej dziedzinie należą Datadog, New Relic, Dynatrace i Splunk.
  • Platformy te łączą w sobie zbieranie metryk, logów i śladów, oferując zaawansowane funkcje analizy, korelacji i wykrywania anomalii oparte na sztucznej inteligencji.
  • Choć są to rozwiązania płatne, często pozwalają na szybsze wdrożenie i oferują bardziej zaawansowane funkcje niż ich odpowiedniki open-source.
Ilustracja dla slajdu 44

Datadog oferuje jedną z najbardziej zaawansowanych platform do monitorowania i obserwowalności, obejmującą metryki, logi, ślady, monitoring syntetyczny i zarządzanie alertami. Jego kluczową zaletą jest integracja z setkami technologii i usług, co pozwala na szybkie rozpoczęcie monitorowania bez konieczności konfiguracji. Model cenowy oparty na liczbie hostów może jednak być kosztowny.

Dynatrace wyróżnia się automatycznym wykrywaniem topologii aplikacji i zaawansowanymi funkcjami AI do wykrywania anomalii i analizy przyczyn źródłowych. Jego agent automatycznie instrumentuje aplikacje bez konieczności modyfikacji kodu, co znacząco ułatwia wdrożenie. Dynatrace jest szczególnie popularny w dużych przedsiębiorstwach.

New Relic oferuje platformę obserwowalności z naciskiem na monitorowanie aplikacji i doświadczenia użytkownika. Jego funkcje monitorowania przeglądarek i urządzeń mobilnych dostarczają cennych informacji o wydajności aplikacji z perspektywy użytkownika. New Relic jest często wybierany przez zespoły deweloperskie ze względu na łatwość użycia.

45/50
Case study: monitoring produkcji
  • Firma e-commerce wdrożyła kompleksowy system obserwowalności.
  • Aplikacje zostały zinstrumentowane do wysyłania metryk do Prometheus, logów do stosu ELK i śladów do Jaeger.
  • Stworzono dashboardy w Grafanie, które pokazywały kluczowe wskaźniki biznesowe i techniczne.
  • Pewnego dnia, alert poinformował o nagłym wzroście czasu odpowiedzi.
  • Na dashboardzie zauważono, że problem dotyczy tylko jednego mikroserwisu.
  • Analiza śladów w Jaegerze pokazała, że spowolnienie występuje podczas wywołania zewnętrznego API.
  • Logi potwierdziły, że API partnera zaczęło odpowiadać z dużym opóźnieniem.
  • Dzięki temu, problem został zdiagnozowany w kilka minut, a nie godzin.
Ilustracja dla slajdu 45

W opisanym przypadku kluczowym elementem sukcesu było posiadanie zintegrowanego systemu obserwowalności, który pozwolił na szybkie przejście od alertu do konkretnej przyczyny problemu. Bez wcześniejszej inwestycji w odpowiednie oprzyrządowanie aplikacji i narzędzia, diagnoza mogłaby zająć wiele godzin. Ten przykład doskonale ilustruje wartość obserwowalności w praktyce.

Warto zwrócić uwagę na to, że każdy z trzech filarów obserwowalności odegrał inną rolę w diagnozie. Metryki w Grafanie wskazały, który mikroserwis jest problematyczny, ślady w Jaegerze zidentyfikowały konkretne wywołanie zewnętrzne, a logi potwierdziły diagnozę. Żaden z tych elementów samodzielnie nie wystarczyłby do pełnej diagnozy.

Po rozwiązaniu incydentu zespół powinien przeprowadzić analizę powdrożeniową, aby zidentyfikować działania zapobiegające podobnym problemom w przyszłości. W tym przypadku mogło to obejmować dodanie monitorowania czasu odpowiedzi zewnętrznego API, ustawienie progu alertu i wdrożenie mechanizmu circuit breakera. Taka ciągła poprawa jest istotą dojrzałego zarządzania incydentami.

46/50
Najlepsze praktyki
  • Do najlepszych praktyk w dziedzinie monitoringu i obserwowalności należy traktowanie ich jako integralnej części cyklu rozwoju oprogramowania, czyli wcześniejsze włączanie ich w proces wytwarzania, a nie jako dodatek po wdrożeniu.
  • Należy definiować cele (SLO) i na ich podstawie budować alerty.
  • Kluczowe jest zbieranie danych z trzech filarów obserwowalności: metryk, logów i śladów.
  • Ważne jest również, aby dane te były dostępne i zrozumiałe dla wszystkich zespołów, nie tylko dla operacji.
  • Wreszcie, należy dążyć do automatyzacji, zarówno w zakresie zbierania danych, jak i reagowania na problemy.
Ilustracja dla slajdu 46

Wdrażanie monitoringu powinno rozpocząć się już na etapie projektowania systemu, a nie po jego wdrożeniu. Projektując aplikację, należy określić, jakie metryki będą zbierane, jakie logi generowane i jakie ślady będą dostępne. Narzędzia takie jak OpenTelemetry ułatwiają to zadanie, zapewniając standardowy sposób instrumentacji.

Należy unikać monitorowania wszystkiego, co możliwe, i zamiast tego skupić się na metrykach, które mają rzeczywiste znaczenie biznesowe. Każda metryka powinna odpowiadać na konkretne pytanie dotyczące stanu systemu. Monitorowanie zbyt wielu danych może prowadzić do przeciążenia informacyjnego i utrudniać identyfikację rzeczywistych problemów.

Automatyzacja w monitoringu powinna obejmować nie tylko zbieranie danych, ale także ich analizę i reagowanie na problemy. Im więcej procesów jest zautomatyzowanych, tym szybciej zespół może reagować na incydenty i tym mniejsze jest ryzyko błędu ludzkiego. W pełni zautomatyzowane systemy monitoringu są celem, do którego powinny dążyć wszystkie organizacje IT.

47/50
Trendy w monitorowaniu
Kluczowym trendem jest AIOps, czyli wykorzystanie sztucznej inteligencji i uczenia maszynowego do automatyzacji analizy danych, wykrywania anomalii i korelacji zdarzeń.
  • Obecne trendy w monitoringu są napędzane przez rosnącą złożoność systemów.
  • Innym ważnym trendem jest OpenTelemetry, otwarty standard do instrumentacji aplikacji, który ma na celu ujednolicenie sposobu zbierania metryk, logów i śladów, niezależnie od używanego języka programowania i platformy monitoringu.
  • Coraz większy nacisk kładzie się również na monitorowanie kosztów w chmurze (FinOps).
Ilustracja dla slajdu 47

OpenTelemetry staje się standardem w dziedzinie obserwowalności, ponieważ rozwiązuje jeden z największych problemów: brak standaryzacji w zbieraniu danych telemetrycznych. Dzięki OpenTelemetry organizacje mogą uniezależnić się od konkretnego dostawcy narzędzi monitoringu i swobodnie migrować między platformami. To znacząco obniża ryzyko vendor lock-in.

FinOps, czyli monitorowanie kosztów chmurowych, zyskuje na znaczeniu wraz z rosnącą adopcją chmury publicznej. Narzędzia FinOps pozwalają na śledzenie wydatków na poszczególne usługi i zasoby, identyfikację marnotrawstwa i optymalizację kosztów. W dobie rosnących cen usług chmurowych jest to niezbędny element zarządzania IT.

Obserwowalność bezpieczeństwa, znana jako Cloud Security Posture Management, łączy dane monitoringu z informacjami o bezpieczeństwie. Pozwala na wykrywanie nieprawidłowych konfiguracji, nieautoryzowanych prób dostępu i innych zagrożeń bezpieczeństwa. To naturalna ewolucja monitoringu w kierunku bardziej kompleksowego zarządzania ryzykiem.

48/50
Obserwowalność jako praktyka DevOps
Obserwowalność jest kluczowym elementem kultury DevOps, która promuje współpracę między zespołami deweloperskimi i operacyjnymi.
  • Dając deweloperom bezpośredni wgląd w to, jak ich kod zachowuje się w środowisku produkcyjnym, obserwowalność promuje poczucie odpowiedzialności za wdrażane rozwiązania.
  • Pozwala im na szybsze diagnozowanie i naprawianie błędów, a także na podejmowanie lepszych decyzji architektonicznych w oparciu o realne dane.
  • Obserwowalność skraca pętlę zwrotną między wdrożeniem a zrozumieniem jego wpływu.
Ilustracja dla slajdu 48

Obserwowalność w praktyce DevOps oznacza, że deweloperzy mają dostęp do danych produkcyjnych i mogą samodzielnie diagnozować problemy, bez konieczności angażowania zespołu operacyjnego. To skraca czas rozwiązywania problemów i zwiększa odpowiedzialność deweloperów za działanie ich kodu w produkcji. W wielu organizacjach wdrożenie obserwowalności było kluczowym krokiem w transformacji DevOps.

Kultura współodpowiedzialności za działanie systemu, którą promuje obserwowalność, wymaga odpowiedniego przygotowania i szkoleń. Deweloperzy muszą nauczyć się korzystać z narzędzi monitoringu i interpretować dane telemetryczne. Z kolei zespół operacyjny musi zrozumieć potrzeby deweloperów w zakresie danych i udostępniać im odpowiednie narzędzia.

W dojrzałych organizacjach DevOps obserwowalność jest integralną częścią każdego sprintu i każdego wdrożenia. Dane telemetryczne są wykorzystywane nie tylko do diagnozowania problemów, ale także do podejmowania decyzji architektonicznych i planowania rozwoju produktu. To najwyższy poziom dojrzałości w zakresie obserwowalności.

49/50
Podsumowanie
  • Od prostego sprawdzania, czy serwer odpowiada na ping, po zaawansowane platformy obserwowalności oparte na sztucznej inteligencji – monitoring przeszedł długą drogę.
  • W dzisiejszych, dynamicznych i rozproszonych środowiskach, nie wystarczy już tylko zbierać metryki.
  • Konieczne jest holistyczne podejście, łączące metryki, logi i ślady, które pozwala na głębokie zrozumienie zachowania systemu.
  • Inwestycja w nowoczesne narzędzia i kulturę obserwowalności jest kluczowa dla zapewnienia niezawodności, wydajności i bezpieczeństwa usług, od których zależy nasz biznes.
Ilustracja dla slajdu 49

Monitorowanie i obserwowalność to nie tylko zestaw narzędzi, ale przede wszystkim podejście do zarządzania systemami IT, które kładzie nacisk na ciągłe doskonalenie i podejmowanie decyzji w oparciu o dane. Organizacje, które inwestują w te praktyki, są lepiej przygotowane do radzenia sobie z awariami i szybciej dostarczają wartość swoim klientom.

Kluczowym wnioskiem jest to, że obserwowalność nie jest celem samym w sobie, ale środkiem do budowania bardziej niezawodnych i wydajnych systemów. Dane telemetryczne są bezwartościowe, jeśli nie prowadzą do konkretnych działań i poprawy jakości usług. Dlatego tak ważne jest, aby każda metryka i każdy alert miały jasno określony cel biznesowy.

Przyszłość monitoringu należy do rozwiązań opartych na sztucznej inteligencji, które będą w stanie automatycznie wykrywać anomalie, diagnozować przyczyny problemów i podejmować działania naprawcze. Jednak nawet najbardziej zaawansowane narzędzia nie zastąpią wiedzy i doświadczenia inżynierów, którzy rozumieją swój system i potrafią interpretować dostarczane przez nie dane.

50/50
Wnioski
  • Pamiętajmy, że monitoring i obserwowalność to nie cel sam w sobie, ale środek do celu.
  • Ostatecznym celem jest dostarczanie niezawodnej i wydajnej usługi, która spełnia oczekiwania użytkowników i realizuje cele biznesowe.
  • Dane telemetryczne są bezwartościowe, jeśli nie prowadzą do działania – do optymalizacji kodu, poprawy architektury, czy usprawnienia procesów operacyjnych.
  • Najlepsze systemy monitoringu to te, które stają się integralną częścią kultury inżynierskiej, napędzając ciągłe doskonalenie i podejmowanie decyzji w oparciu o dane.
Ilustracja dla slajdu 50

Opanowanie praktyk monitorowania i obserwowalności jest niezbędne dla każdego inżyniera IT w dzisiejszym złożonym środowisku technologicznym. Umiejętność projektowania systemów pod kątem generowania odpowiednich danych telemetrycznych oraz interpretacji tych danych jest jedną z najbardziej poszukiwanych kompetencji na rynku pracy. Studenci powinni kontynuować rozwijanie tych umiejętności poprzez praktyczne projekty.

Należy pamiętać, że wdrożenie skutecznego monitoringu to proces iteracyjny, który wymaga ciągłego dostosowywania do zmieniających się potrzeb i architektury systemu. Nie ma jednego uniwersalnego rozwiązania, które sprawdzi się w każdej organizacji. Kluczem do sukcesu jest zrozumienie własnego systemu i dostosowanie narzędzi i praktyk do jego specyfiki.

Zachęcamy do eksperymentowania z różnymi narzędziami i podejściami, zarówno open-source, jak i komercyjnymi. Praktyczne doświadczenie w konfiguracji Prometheusa, Grafany, ELK czy zaawansowanych platform chmurowych jest bezcenne. Tylko poprzez praktykę można zrozumieć niuanse i wyzwania związane z monitorowaniem i obserwowalnością w rzeczywistych systemach.