Monitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami

  1. Strona główna
  2. Blog
  3. DevOps

DevOps

Monitorowanie a obserwowalność: Rzeczywista różnica z logami, wskaźnikami i śladami

Monitoring mówi, że coś jest nie tak. Obserwowalność pomaga ustalić przyczynę, nawet jeśli awaria jest taka, której nigdy nie przewidywałeś. Śledź wydarzenie przy kasie, aby zobaczyć, jak te dwie rzeczy ze sobą współpracują.

9 min czytania
Monitorowanie a obserwowalność: prawdziwa różnica dzięki logom, metrykom i śladom

Najważniejsze

  • Monitorowanie monitoruje znane problemy, korzystając z predefiniowanych wskaźników i alertów.
  • Obserwowalność to stopień, w jakim można zrozumieć stan wewnętrzny systemu na podstawie jego wyników.
  • Dzienniki, metryki i ślady to typowe sygnały, ale ich gromadzenie nie gwarantuje wglądu.
  • Działają razem: monitorowanie podnosi alarm, a obserwowalność pomaga znaleźć przyczynę.

Pulpit nawigacyjny jest zielony, a mimo to klienci narzekają, że płatność jest zepsuta. Jeśli byłeś w takiej sytuacji, już rozumiesz różnicę między monitorowaniem a obserwowalnością. Twój monitoring sprawdził tylko to, co miałeś sprawdzić, a ta awaria jest czymś nowym.

W tym przewodniku wyjaśniono oba pomysły bez użycia języka marketingowego i opisano jedno fikcyjne zdarzenie, począwszy od ostrzeżenia aż do pierwotnej przyczyny. Dzienniki, ślady i liczby wymyślono w celu zilustrowania procesu. Powinieneś także wiedzieć, że sprzedawcy i praktycy rysują tę granicę inaczej, a niektórzy uważają to częściowo za rozróżnienie marketingowe. Skupiamy się na części praktycznej.

Krótka odpowiedź

Monitorowanie to czynność. Z góry decydujesz, co oglądać, np. procesor, poziom błędów czy miejsce na dysku, i ustawiasz progi wyzwalające alerty. Odpowiedź brzmi: „Czy dzieje się to, o co się martwiłem?”

Obserwowalność to właściwość Twojego systemu. Termin pochodzi z teorii sterowania, gdzie opisuje, jak dobrze można wnioskować o stanie wewnętrznym systemu na podstawie jego zewnętrznych wyników. W praktyce odpowiada: „Co się dzieje i dlaczego, w tym w przypadku problemów, których nigdy się nie spodziewałem?”

Pomyśl o samochodzie. Lampki ostrzegawcze na desce rozdzielczej monitorują. Obejmują zestaw znanych problemów. Pełny port diagnostyczny mechanika, który pozwala zadać nowe pytania dotyczące dowolnej części silnika, jest bliższy obserwowalności.

Monitorowanie a obserwowalność obok siebie

Aspekt Monitorowanie Obserwowalność
Główne pytanie Czy coś jest nie tak? Dlaczego jest źle?
Najlepsze dla Znane tryby awarii Nieznane i nowe awarie
Podejście Predefiniowane kontrole i dashboardy Otwarta eksploracja bogatych danych
Typowe wyjście Alerty i wykresy stanu Odpowiedzi na nowe pytania
Szczegóły danych Często zagregowane Szczegółowe, jeśli to możliwe, na żądanie
Konfiguracja Skonfiguruj kontrole z zewnątrz Wymaga instrumentacji kodu
Używany przez Operacje, personel na wezwanie Programiści i personel dyżurujący

To nie jest wybór pomiędzy nimi dwoma. Nadal potrzebujesz alertów, które informują Cię, kiedy szukać.

Dlaczego sam monitoring nie wystarczy

W przypadku jednej aplikacji na jednym serwerze lista rzeczy, które mogą pójść nie tak, jest dość krótka, więc można je wszystkie obejrzeć. Nowoczesny system może zawierać dziesiątki usług, kolejek i interfejsów API innych firm, a także kontenery, które przychodzą i znikają. Awarie stają się kombinacjami, których nikt nie przewidywał: jeden region, jeden typ klienta, konkretna wersja aplikacji i pojedyncza powolna zależność.

Nie możesz z wyprzedzeniem napisać dashboardu dla pytania, o którym nie pomyślałeś. Potrzebujesz danych, które pozwolą Ci zadać je później.

Dzienniki, metryki i ślady

Te trzy typy telemetrii są często nazywane filarami obserwowalności. Każdy odpowiada na inne pytanie:

Sygnał Co to jest? Odpowiedzi Słabość
Metryki Liczby w czasie Ile? Czy jest coraz gorzej? Trochę szczegółów na temat pojedynczych wydarzeń
Dzienniki Zapisy poszczególnych wydarzeń Co dokładnie się stało? Może być kosztowny i głośny
Ślady Ścieżka żądania przez usługi Gdzie podział się czas? Wymagają oprzyrządowania i często są pobierane próbki

Metryki

http_requests_total{service="checkout", status="500"} 1832
http_request_duration_seconds{service="checkout", quantile="0.95"} 2.4

Metryki są tanie w przechowywaniu i szybkie w zapytaniach, co czyni je idealnymi do tworzenia pulpitów nawigacyjnych i alertów. Uważaj na etykiety o dużej kardynalności, takie jak identyfikator użytkownika, w wielu systemach metrycznych, ponieważ mogą one gwałtownie zwiększyć koszty.

Ślady

Śledzenie następuje po jednym żądaniu w różnych usługach. Każdy krok to zakres z czasem rozpoczęcia i czasem trwania:

POST /checkout                      2410 ms
├─ auth-service: verify token         18 ms
├─ cart-service: load cart            42 ms
├─ pricing-service: calculate       2290 ms   <-- slow
│  └─ SELECT coupons ...            2265 ms
└─ payment-service: not reached

Śledzenie sprawia, że powolny krok staje się oczywisty, co bardzo trudno dostrzec w oddzielnych dziennikach z oddzielnych usług.

Dzienniki

Dzienniki zawierają szczegółowe informacje o tym, co wydarzyło się w danym momencie. Za chwilę zastanowimy się, jak uczynić je użytecznymi.

Opis zdarzenia

Oto, jak elementy pasują do siebie, w fikcyjnym przykładzie.

Krok Sygnał Czego się uczymy
1. Alarmuj pożary Metryczne Opóźnienie p95 programu Checkout przekroczyło docelowy poziom 1 sekundy
2. Rozbij to Metryczne Dotyczy to tylko aplikacji mobilnej, a nie sieci
3. Sprawdź żądanie Ślad Czas jest w serwisie cenowym, na zapytanie kuponowe
4. Przeczytaj szczegóły Dzienniki Powolne żądania wykorzystują kupon z dzisiejszej kampanii
5. Potwierdź przyczynę Plan zapytania Wyszukiwanie kuponów nie ma odpowiedniego indeksu
6. Napraw to Wdrożenie Dodaj indeks i obserwuj, jak odzyskują się opóźnienia

Monitoring wykonał krok 1. Wszystko później było obserwowalne. Zwróć uwagę, że każde pytanie wynika z poprzedniej odpowiedzi. Nikt nie mógł wcześniej zbudować dashboardu dla „zapytań o kupony do aplikacji mobilnej z dzisiejszej kampanii”. Jeśli chodzi o samą poprawkę, nasz przewodnik po optymalizacji zapytań SQL pokazuje, jak czytać tego rodzaju plan.

Lepsze logi

Dzienniki zwykłego tekstu są przeznaczone dla ludzkich oczu i trudno je przeglądać. Dzienniki strukturalne korzystają z pól, według których maszyna może filtrować:

# Hard to search
ERROR Payment failed for user 42 after 3 tries

# Easy to search
{"level":"error","event":"payment_failed","user_id":"42",
 "attempts":3,"provider":"acme","trace_id":"a1b2c3","duration_ms":2410}

Za pomocą drugiego formularza możesz od razu zapytać „ile awarii na dostawcę w ciągu ostatniej godziny?” Pole trace_id jest szczególnie cenne, ponieważ łączy wiersz dziennika z całym żądaniem, w przypadku każdej usługi, której dotknął.

Nigdy nie zapisuj haseł, tokenów ani numerów kart i dbaj o dane osobowe. Jak wyjaśnia nasz przewodnik, JWT może być ponownie wykorzystany przez każdego, kto odczytuje je z dziennika.

Wskazówka: Dodaj kontekst, który będzie potrzebny podczas incydentu, taki jak wersja, region, poziom klienta i stan flagi funkcji. Możliwość powiedzenia „tylko wersja 2.14 w jednym regionie” często sama rozwiązuje problem.

Złote sygnały

Nie wiesz, co monitorować? Książka Google Site Reliability Engineering sugeruje cztery sygnały dla systemów dostępnych dla użytkownika:

Sygnał Pytanie Przykład
Opóźnienie Jak długo trwają żądania? czas reakcji p95 i p99
Ruch Jak duży jest popyt? Żądania na sekundę
Błędy Ile żądań kończy się niepowodzeniem? Współczynnik 5xx odpowiedzi
Nasycenie Jak pełny jest system? Użycie procesora, pamięci, puli połączeń

Użyj percentyli do określenia opóźnienia, ponieważ średnie ukrywają wolne żądania, jak pokazaliśmy w testowaniu obciążenia a testowaniu warunków skrajnych.

Alerty, którym ludzie ufają

Jeśli alerty pojawiają się cały czas, ludzie przestają je czytać. Dobrzy kierują się kilkoma zasadami:

  • Powiadomienie o objawach odczuwanych przez użytkowników. „Błędy przy kasie powyżej 2%” przewyższają „Procesor na poziomie 85%”. Wysoki procesor, który nikomu nie szkodzi, nie powinien nikogo budzić.
  • Spraw, aby każdy alert był możliwy do podjęcia. Jeśli nikt nie musi nic robić, ustaw go jako element pulpitu nawigacyjnego lub usuń go.
  • Link do elementu Runbook. Powiedz respondentowi, gdzie szukać i czego spróbować.
  • Przeglądaj je regularnie. Usuń lub napraw każdy alert, który został zignorowany w zeszłym miesiącu.

Cele poziomu usług

SLO sprawia, że „strona powinna być szybka i niezawodna” w mierzalny cel, np. „99,9% żądań realizacji transakcji zakończy się powodzeniem w ciągu 30 dni”. Pozwala to na wystąpienie około 0,1% błędów, co nazywa się budżetem błędów. Jeśli zostało Ci dużo, możesz wysłać szybciej, a jeśli jest już prawie wyczerpany, możesz priorytetowo potraktować niezawodność. Jest to pomocny sposób na rozstrzygnięcie sporów pomiędzy szybkością dostawy a stabilnością.

OpenTelemetry i narzędzia

OpenTelemetry to niezależny od dostawcy standard typu open source służący do generowania i eksportowania danych telemetrycznych. Jest to projekt fundacji Cloud Native Computing Foundation. Instrumentacja za jego pomocą oznacza, że ​​możesz później zmienić backend bez przepisywania kodu. Nie jest to sam produkt do przechowywania danych ani pulpitu nawigacyjnego, więc łączysz go z jednym:

Cel Przykłady open source Przykłady komercyjne
Metryki Prometeusz Datadog, nowy relikt
Pulpity nawigacyjne Grafana Datadog, Dynatrace
Dzienniki Lokiego, OpenSearch Szaleństwo, elastyczne
Ślady Jaeger, Tempo Plaster miodu, Datadog

Sprawdź samodzielnie aktualne funkcje i ceny, ponieważ te produkty często się zmieniają. Koszty mogą szybko rosnąć wraz z ilością danych, dlatego korzystaj z próbkowania i ustalaj limity przechowywania.

Jak zacząć

  1. Zacznij od złotych sygnałów dotyczących najważniejszej usługi.
  2. Dodaj jeden lub dwa alerty dotyczące objawów zauważonych przez użytkowników.
  3. Przełącz na logi strukturalne z identyfikatorem żądania w każdym wierszu.
  4. Dodaj śledzenie do swojej głównej ścieżki użytkownika dzięki OpenTelemetry, ponieważ automatyczne oprzyrządowanie może obejmować wiele popularnych platform.
  5. Połącz wdrożenia ze swoimi wykresami, aby sprawdzić, czy wydanie z Twojego potoku CI/CD spowodowało zmianę.
  6. Wyciągaj wnioski z każdego zdarzenia. Po każdym z nich zapytaj, jakie dane przyspieszyłyby rozwiązanie problemu, i dodaj to.

Mały zespół z jedną usługą nie potrzebuje ogromnej platformy. Podstawowe wskaźniki, dobre logi i kilka alertów mogą wystarczyć. Tracing zarabia na siebie wraz ze wzrostem liczby usług.

Typowe błędy

  • Kupowanie narzędzia i nazywanie go obserwowalnością. Wartość wynika z dobrego instrumentarium i sposobu wykorzystania danych.
  • Traktowanie trzech filarów jako listy kontrolnej. Oddzielne dane bez możliwości ich połączenia powodują konieczność przeglądania zakładek. Wspólne identyfikatory mają znaczenie.
  • Zbieranie wszystkiego. Niefiltrowana telemetria staje się kosztowna i dodaje hałasu.
  • Zbyt wiele pulpitów nawigacyjnych. Kilka zaufanych widoków przewyższa setkę, których nikt nie otwiera.
  • Myślę, że to zastępuje testowanie. Nadal potrzebujesz testów przed wydaniem. Jednak Emisje Canary dobrze komponują się z tymi sygnałami.

Podsumowanie

Monitorowanie informuje, że coś poszło nie tak, a obserwowalność pozwala dowiedzieć się, dlaczego. Test praktyczny jest prosty: czy w przypadku pojawienia się nieznanego problemu można znaleźć przyczynę bez konieczności wysyłania nowego kodu? Następnym razem, gdy będziesz świadkiem zdarzenia, zapisz każde pytanie, na które nie potrafisz odpowiedzieć. Ta lista to Twój plan działania.

Najczęstsze pytania

Jaka jest różnica między monitorowaniem a obserwowalnością?

Monitorowanie śledzi predefiniowane wskaźniki i alerty dotyczące znanych problemów. Obserwowalność to zdolność zrozumienia stanu systemu na podstawie jego wyników, w tym w przypadku nieoczekiwanych problemów.

Jakie są trzy filary obserwowalności?

Są to dzienniki, metryki i ślady. Dzienniki rejestrują zdarzenia, metryki mierzą wartości w czasie, a ślady śledzą pojedyncze żądanie w różnych usługach.

Czy potrzebuję obserwowalności, jeśli mam monitoring?

W przypadku małego, prostego systemu dobry monitoring i logi mogą wystarczyć. W miarę jak systemy stają się rozproszone, a awarie mniej przewidywalne, obserwowalność staje się cenniejsza.

Co to jest OpenTelemetry?

Jest to standard typu open source oraz zestaw narzędzi do tworzenia i eksportowania dzienników, metryk i śladów, dzięki czemu nie jesteś przywiązany do agenta jednego dostawcy.

Jakie są cztery złote sygnały?

Są to opóźnienia, ruch, błędy i nasycenie. Wytyczne Google dotyczące SRE zalecają je jako punkt wyjścia do monitorowania systemów dostępnych dla użytkownika.

Ucz się dalej

Pracuj z Stack Quora

Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?

Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.

Czytaj dalej

Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój

Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.

Sztuczna inteligencja

Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć

Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…

Przeczytaj artykuł →
DevOps

Wyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo

Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429

Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …

Przeczytaj artykuł →
Automatyzacja testów

Wyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią

Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…

Przeczytaj artykuł →
Testowanie oprogramowania

Wyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%

Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…

Przeczytaj artykuł →
Bazy danych i SQL

DELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich

DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami

Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…

Przeczytaj artykuł →
Tworzenie oprogramowania

Interfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora

Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…

Przeczytaj artykuł →
Tworzenie oprogramowania

Python *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami

Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…

Przeczytaj artykuł →
Tworzenie oprogramowania

Funkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać

Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…

Przeczytaj artykuł →
Sztuczna inteligencja

Kim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić

Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…

Przeczytaj artykuł →
DevOps

Monitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami

Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…

Przeczytaj artykuł →
DevOps

Woluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób

Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…

Przeczytaj artykuł →
Automatyzacja testów

TDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich

TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…

Przeczytaj artykuł →
Tworzenie oprogramowania

Git merge vs rebase: różnice, przykłady i kiedy czego używać

Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.

Przeczytaj artykuł →
Tworzenie oprogramowania

Python list comprehension: składnia, przykłady i kiedy jej unikać

Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…

Przeczytaj artykuł →
Bazy danych i SQL

SQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)

Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…

Przeczytaj artykuł →