Wprowadzenie do Prometeusza i Grafany

Prometheus to oparty na metrykach system monitorowania typu open source. Zbiera dane z usług i hostów, wysyłając żądania HTTP do punktów końcowych metryk. Następnie przechowuje wyniki w bazie danych szeregów czasowych i udostępnia je do analizy i ostrzegania.

Dlaczego warto monitorować?

  • Włącza alerty, gdy coś pójdzie nie tak, najlepiej zanim coś pójdzie nie tak. Żeby ktoś mógł na to spojrzeć.
  • Zapewnia wgląd umożliwiający analizę, debugowanie i rozwiązanie problemu.
  • Pozwala zobaczyć trendy/zmiany w czasie. Na przykład, ile aktywnych sesji w danym momencie. Pomaga to w podejmowaniu decyzji projektowych i planowaniu pojemności.

Monitoring zazwyczaj dotyczy zdarzeń. Zdarzenie może obejmować otrzymanie żądania HTTP, wysłanie odpowiedzi, odczyt z dysku, logowanie użytkownika. Monitorowanie systemu może obejmować profilowanie, rejestrowanie, śledzenie, metryki, alerty i wizualizację.

Monitorowanie Blackbox vs. Whitebox

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

Monitorowanie czarnej skrzynki

W monitorowaniu Blackbox monitorowanie odbywa się na poziomie aplikacji lub hosta, ponieważ są one obserwowane z zewnątrz. To może być dość ograniczające.

Monitorowanie białej skrzynki

Monitorowanie białej skrzynki oznacza monitorowanie wewnętrznych elementów usługi. Ujawniłoby to dane o stanie i wydajności komponentów wewnętrznych.

Cztery złote sygnały

Według Google’ajeśli możesz zmierzyć tylko cztery wskaźniki swojego systemu skierowanego do użytkownika, skup się na następujących czterech, zwanych czterema złotymi sygnałami:

# 1. Czas oczekiwania

Czas potrzebny na obsłużenie żądania — pomyślne lub nieudane. Ważne jest, aby śledzić nie tylko pomyślne żądania, ale także te, które zakończyły się niepowodzeniem.

#2. Ruch drogowy

Miara tego, jak duże jest zapotrzebowanie na twój system. W przypadku usługi internetowej jest to zwykle liczba żądań HTTP na sekundę.

#3. Błędy

Wskaźnik żądań, które zakończyły się niepowodzeniem.

#4. Nasycenie

Jak pełna jest twoja usługa. Wzrost latencji jest często ważnym wskaźnikiem nasycenia. Wydajność wielu systemów spada na długo przed osiągnięciem 100% wykorzystania.

Typy metryk Prometheusa

Metryki Prometheusa dzielą się na cztery główne typy:

# 1. Licznik

Wartość licznika zawsze będzie rosła. Nigdy nie może się zmniejszyć, ale można go zresetować do zera. Tak więc, jeśli skrobanie się nie powiedzie, oznacza to tylko pominięty punkt danych. Skumulowany wzrost będzie dostępny przy następnym czytaniu. Przykłady:

  • Łączna liczba odebranych żądań HTTP
  • Liczba wyjątków.

#2. Miernik

Miernik to migawka w dowolnym momencie. Może zarówno rosnąć, jak i maleć. Jeśli pobieranie danych nie powiedzie się, tracisz próbkę; następne pobranie może pokazać inną wartość: przykładowe miejsce na dysku, użycie pamięci.

#3. Histogram

Histogram próbkuje obserwacje i zlicza je w konfigurowalnych przedziałach. Są używane do takich rzeczy, jak czas trwania żądania lub rozmiary odpowiedzi. Można na przykład zmierzyć czas trwania żądania dla określonego żądania HTTP. Histogram będzie miał zestaw przedziałów, powiedzmy 1 ms, 10 ms i 25 ms. Zamiast przechowywać każdy czas trwania dla każdego żądania, Prometheus będzie przechowywać częstotliwość żądań, które należą do określonego zasobnika.

#4. Streszczenie

Podobnie jak w przypadku obserwacji próbek histogramu, zazwyczaj czas trwania żądania lub rozmiary odpowiedzi. Zapewni całkowitą liczbę obserwacji i sumę wszystkich obserwowanych wartości, umożliwiając obliczenie średniej obserwowanych wartości. Na przykład w ciągu jednej minuty miałeś trzy żądania, które trwały 2,3,4 sekundy. Suma wyniosłaby 9, a licznik wyniósłby 3. Opóźnienie wyniosłoby 3 sekundy.

Składniki ekosystemu Prometheus

Serwer Prometheus

Zbiera metryki, przechowuje je i udostępnia do zapytania, wysyła alerty na podstawie zebranych metryk.

Skrobanie

Prometeusz jest systemem opartym na ściąganiu. Aby pobrać metryki, Prometheus wysyła żądanie HTTP zwane zdrapką. Wysyła zadrapania do celów na podstawie swojej konfiguracji.

Każdy cel (zdefiniowany statycznie lub wykrywany dynamicznie) jest czyszczony w regularnych odstępach czasu (interwał zeskrobywania). Każde złomowanie odczytuje punkt końcowy HTTP /metrics, aby uzyskać bieżący stan metryk klienta i utrwala wartości w bazie danych szeregów czasowych Prometheus.

Istnieje więcej baz danych szeregów czasowych dla rozwiązań do monitorowania, które warto zbadać.

Biblioteki klienckie

Aby monitorować usługę, musisz dodać oprzyrządowanie do swojego kodu. Dostępne są biblioteki klienckie dla wszystkich popularnych języków i środowisk wykonawczych. Korzystając z tych bibliotek, po dodaniu kilku wierszy kodu Twój kod może zacząć emitować metryki. Nazywa się to instrumentacją bezpośrednią. Biblioteki te umożliwiają definiowanie metryk wewnętrznych, a także udostępnianie ich za pośrednictwem punktu końcowego HTTP. Gdy Prometheus pobiera metryki punktu końcowego HTTP, biblioteka klienta wysyła metryki do serwera.

Oficjalne biblioteki klienckie są oferowane przez Prometheus dla Go, Java, Python i Ruby. Prometheus ma otwarty ekosystem. Dostępne są również stworzone przez społeczność biblioteki klienckie dla języków C, PHP, Node.js, C#/.NET i wielu innych.

Eksporterzy

Wiele aplikacji udostępnia metryki w formacie innym niż Prometheus. W przypadku tych i aplikacji, których nie posiadasz lub do których nie masz dostępu do kodu, nie możesz bezpośrednio dodać instrumentacji. Na przykład serwer MySQL, Kafka, JMX, HAProxy i NGINX. W tych scenariuszach korzystasz z eksporterzy.

Eksporter to narzędzie, które wdrażasz wraz z aplikacją, z której chcesz uzyskać metryki. Eksporter pełni rolę pośrednika między aplikacją a Prometheusem. Będzie odbierał żądania z serwera Prometheus, zbierał dane z logów dostępowych, logów błędów aplikacji, przekształcał je do odpowiedniego formatu, a na koniec wracał na serwer Prometheus.

Niektóre z popularnych eksporterów to:

  • Okna – dla metryk serwera Windows
  • Węzeł – dla metryk serwera Linux
  • Czarna skrzynka – dla wskaźników wydajności DNS i Witryny
  • JMX – dla metryk aplikacji opartych na Javie

Gdy aplikacje zostaną oprzyrządowane lub eksporterzy znajdą się na miejscu, musisz powiedzieć firmie Prometheus, gdzie się znajdują. Można to zrobić za pomocą konfiguracji statycznej. W przypadku środowisk dynamicznych nie można tego zrobić; dlatego używane jest wykrywanie usług.

Alarmowanie

Alarmowanie za pomocą Prometheusa składa się z dwóch części –

Reguły alertów wysyłają alerty do Menedżera alertów.

Alertmanager następnie zarządza tymi alertami. Wysyła powiadomienia za pomocą wielu gotowych integracji, takich jak e-mail, Slack, Hipchat i PagerDuty. Alertmanager może również wykonywać wyciszanie lub agregację w celu zmniejszenia liczby powiadomień.

Oto przewodnik dotyczący monitorowania serwera Linux za pomocą Prometheus i Dashboard.

Wizualizacja za pomocą pulpitów nawigacyjnych

Prometheus ma wiele interfejsów API, za pomocą których zapytania PromQL mogą generować surowe dane do wizualizacji.

Chociaż Prometheus zawiera przeglądarkę wyrażeń, której można używać do zapytań ad-hoc, najlepszym dostępnym narzędziem jest Grafana. Grafana w pełni integruje się z Prometheusem i może tworzyć szeroką gamę pulpitów nawigacyjnych.

Będziesz musiał skonfigurować Prometheus jako źródło danych dla Grafany.

Pulpity nawigacyjne można dodawać za pomocą:

  • Importowanie pulpitów nawigacyjnych stworzonych przez społeczność
  • Budowanie własnego
  • Korzystanie z predefiniowanego pulpitu nawigacyjnego.

Tak wygląda pulpit nawigacyjny predefiniowanego eksportera węzłów:

Grafana ma moduł worldPing, który pozwala monitorować wskaźniki wydajności witryny i DNS na całym świecie.

Streszczenie

Prometeusz ma bardzo mało wymagań. Może być dość prosty w uruchomieniu, ponieważ jest to pojedynczy plik binarny z plikiem konfiguracyjnym. Może obsłużyć tysiące celów i pochłonąć miliony próbek na sekundę. Prometheus jest przeznaczony do śledzenia całego systemu, kondycji, zachowania systemu.

Grafana jest najlepszym dostępnym narzędziem do wizualizacji metryk i bezproblemowo się z nim integruje Prometeusz.