Wprowadzenie do Prometeusza i Grafany

Photo of author

By maciekx

Prometheus to system monitorowania zasobów o otwartym kodzie źródłowym, działający na zasadzie zbierania danych metrycznych. Realizuje to poprzez wysyłanie zapytań HTTP do punktów końcowych, gdzie metryki są udostępniane. Następnie, uzyskane informacje są przechowywane w bazie danych szeregów czasowych, by później służyć do analizy i generowania alertów.

Dlaczego monitorowanie jest istotne?

  • Umożliwia natychmiastowe informowanie o nieprawidłowościach, najlepiej zanim jeszcze do nich dojdzie. Dzięki temu można podjąć szybką interwencję.
  • Dostarcza niezbędnych danych do analizowania, debugowania i rozwiązywania problemów, co usprawnia utrzymanie systemów.
  • Ułatwia śledzenie trendów i zmian w czasie, na przykład liczby aktywnych sesji w danym momencie, co ma kluczowe znaczenie dla planowania i podejmowania decyzji technicznych.

Proces monitorowania skupia się na rejestrowaniu zdarzeń. Zdarzenie może oznaczać przyjęcie żądania HTTP, wysłanie odpowiedzi, odczyt danych z dysku, czy też logowanie użytkownika. Monitorowanie systemów obejmuje różnorodne aspekty, takie jak profilowanie, rejestrowanie logów, śledzenie, pomiar metryk, ustawianie alertów i wizualizacja danych.

Podejścia Blackbox i Whitebox w monitoringu

Monitorowanie można podzielić na dwie główne kategorie:

Monitorowanie typu czarna skrzynka

W tym podejściu, monitorowanie skupia się na zewnętrznej perspektywie aplikacji lub hosta, jakby były one czarną skrzynką. To podejście może być ograniczone w dostarczaniu szczegółowych informacji.

Monitorowanie typu biała skrzynka

Monitorowanie typu biała skrzynka, z kolei, polega na wglądzie w wewnętrzne działanie usługi. Dzięki temu uzyskujemy dane o stanie i wydajności poszczególnych komponentów.

Cztery kluczowe sygnały

Według wytycznych Google’a, przy monitorowaniu systemów skierowanych do użytkownika, warto skupić się na czterech kluczowych metrykach, zwanych czterema złotymi sygnałami:

#1. Czas odpowiedzi (Latencja)

To czas, jaki system potrzebuje na przetworzenie żądania, niezależnie od tego, czy zakończyło się sukcesem, czy porażką. Ważne jest, by monitorować zarówno udane, jak i nieudane próby.

#2. Ruch

Ruch odzwierciedla obciążenie systemu. W przypadku usług internetowych, jest to zwykle liczba zapytań HTTP na sekundę.

#3. Błędy

Ta metryka pokazuje procent żądań, które nie zostały obsłużone poprawnie.

#4. Nasycenie

Nasycenie to miara obciążenia usługi. Wzrost czasu odpowiedzi często sygnalizuje przeciążenie. Wiele systemów traci wydajność na długo przed osiągnięciem 100% obciążenia.

Rodzaje metryk w Prometheusie

Prometheus operuje na czterech podstawowych typach metryk:

#1. Licznik

Licznik to metryka, której wartość zawsze wzrasta. Nie może się zmniejszyć, chociaż może zostać zresetowana do zera. W przypadku niepowodzenia odczytu, pomijany jest tylko jeden punkt danych, a skumulowany wzrost będzie widoczny przy następnym pobraniu. Przykładami są łączna liczba obsłużonych zapytań HTTP i liczba wystąpień wyjątków.

#2. Wskaźnik

Wskaźnik to migawka wartości w danym momencie. Może zarówno wzrastać, jak i maleć. W przypadku niepowodzenia odczytu danych, próbka jest tracona i następne pobranie może pokazać inną wartość. Przykładem jest dostępne miejsce na dysku lub użycie pamięci.

#3. Histogram

Histogram próbkuje obserwacje i zlicza je w określonych przedziałach. Stosuje się go do pomiaru czasu trwania żądań lub rozmiaru odpowiedzi. Na przykład, czas trwania żądania HTTP można analizować, dzieląc go na przedziały, np. 1 ms, 10 ms i 25 ms. Zamiast przechowywać czas trwania każdego żądania, Prometheus przechowuje częstotliwość żądań w danym przedziale.

#4. Podsumowanie

Podsumowanie, podobnie jak histogram, operuje na próbkach obserwacji, takich jak czas trwania żądań czy rozmiar odpowiedzi. Oblicza całkowitą liczbę obserwacji i sumę obserwowanych wartości, co pozwala na wyznaczenie średniej. Przykładowo, jeśli w ciągu minuty wystąpiły trzy żądania, trwające 2, 3 i 4 sekundy, suma wyniesie 9, licznik 3, a średni czas trwania 3 sekundy.

Elementy składowe ekosystemu Prometheus

Serwer Prometheusa

Jego zadaniem jest zbieranie metryk, przechowywanie ich, udostępnianie na potrzeby zapytań oraz wysyłanie alertów na podstawie zebranych danych.

Scrapowanie (Pobieranie danych)

Prometheus działa na zasadzie pobierania danych. W tym celu wysyła zapytania HTTP, zwane „scrapowaniem”, do zdefiniowanych celów. Cele mogą być określane statycznie lub dynamicznie.

Każdy cel jest „scrapowany” w regularnych odstępach (interwał scrapowania). W procesie scrapowania odczytywany jest punkt końcowy HTTP /metrics, aby uzyskać aktualny stan metryk klienta, a wartości są zapisywane w bazie danych szeregów czasowych Prometheusa.

Istnieje wiele baz danych szeregów czasowych, które warto rozważyć dla potrzeb monitorowania.

Biblioteki klienckie

Aby monitorować usługę, konieczne jest dodanie instrumentacji do kodu. Dostępne są biblioteki klienckie dla wielu popularnych języków i środowisk. Dzięki nim, po dodaniu kilku linijek kodu, program może zacząć emitować metryki. Proces ten nazywa się instrumentacją bezpośrednią. Biblioteki pozwalają na definiowanie wewnętrznych metryk i ich udostępnianie przez punkt końcowy HTTP. Gdy Prometheus pobiera metryki z punktu końcowego HTTP, biblioteka kliencka wysyła dane do serwera.

Oficjalne biblioteki klienckie dla Prometheusa dostępne są dla języków Go, Java, Python i Ruby. Istnieje także bogata społeczność, która rozwija biblioteki dla języków C, PHP, Node.js, C#/.NET i wielu innych.

Eksporterzy

Wiele aplikacji udostępnia metryki w formacie innym niż oczekiwany przez Prometheusa. Dla takich aplikacji, a także dla tych, do których kodu nie mamy dostępu, nie można dodać instrumentacji bezpośrednio. Przykładami są serwery MySQL, Kafka, JMX, HAProxy i NGINX. W takich przypadkach stosuje się eksportery.

Eksporter to narzędzie wdrażane razem z aplikacją, z której chcemy pobierać metryki. Działa jako pośrednik między aplikacją a Prometheusem. Odbiera żądania od serwera Prometheusa, pobiera dane z logów dostępu, błędów aplikacji, przekształca je do odpowiedniego formatu i przekazuje do serwera.

Przykłady popularnych eksporterów:

Po instrumentacji aplikacji lub wdrożeniu eksporterów, należy poinformować Prometheusa o ich lokalizacji. Można to zrobić za pomocą konfiguracji statycznej. W środowiskach dynamicznych wykorzystuje się mechanizm wykrywania usług.

Alarmowanie

Alarmowanie w Prometheusie składa się z dwóch etapów:

Reguły alertów wysyłają alerty do Alertmanagera.

Alertmanager zarządza alertami, wysyłając powiadomienia za pomocą różnych integracji, takich jak e-mail, Slack, Hipchat i PagerDuty. Ponadto, może redukować liczbę powiadomień poprzez wyciszanie i agregację.

Istnieje również poradnik dotyczący monitorowania serwera Linux za pomocą Prometheusa i Dashboardu.

Wizualizacja danych za pomocą pulpitów nawigacyjnych

Prometheus udostępnia API, za pomocą których zapytania PromQL mogą generować dane do wizualizacji.

Chociaż Prometheus ma przeglądarkę wyrażeń do zapytań ad-hoc, najlepszym narzędziem do wizualizacji jest Grafana. Grafana doskonale integruje się z Prometheusem i umożliwia tworzenie różnorodnych pulpitów nawigacyjnych.

Konieczne jest skonfigurowanie Prometheusa jako źródła danych dla Grafany.

Pulpity nawigacyjne można tworzyć przez:

  • Importowanie pulpitów nawigacyjnych stworzonych przez społeczność
  • Budowanie własnych
  • Użycie predefiniowanych pulpitów nawigacyjnych

Poniżej przykład predefiniowanego pulpitu nawigacyjnego dla Node Exportera:

Grafana posiada również moduł worldPing, który pozwala na monitorowanie wskaźników wydajności stron internetowych i DNS z całego świata.

Podsumowanie

Prometheus ma minimalne wymagania systemowe. Jest stosunkowo prosty do uruchomienia, gdyż składa się z pojedynczego pliku binarnego z plikiem konfiguracyjnym. Może monitorować tysiące celów i przetwarzać miliony próbek na sekundę. Prometheus idealnie sprawdza się do śledzenia stanu, kondycji i zachowania systemów.

Grafana to najbardziej efektywne narzędzie do wizualizacji metryk, które bez problemu integruje się z Prometheusem.


newsblog.pl