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ą.
- 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ąć
- Zacznij od złotych sygnałów dotyczących najważniejszej usługi.
- Dodaj jeden lub dwa alerty dotyczące objawów zauważonych przez użytkowników.
- Przełącz na logi strukturalne z identyfikatorem żądania w każdym wierszu.
- Dodaj śledzenie do swojej głównej ścieżki użytkownika dzięki OpenTelemetry, ponieważ automatyczne oprzyrządowanie może obejmować wiele popularnych platform.
- Połącz wdrożenia ze swoimi wykresami, aby sprawdzić, czy wydanie z Twojego potoku CI/CD spowodowało zmianę.
- 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
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.
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.
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ł →DevOpsWyjaś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 oprogramowaniaWyjaś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ówWyś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 oprogramowaniaWyjaś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 SQLDELETE 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 SQLWyjaś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 oprogramowaniaInterfejs 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 oprogramowaniaPython *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 oprogramowaniaFunkcje 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 inteligencjaKim 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ł →DevOpsMonitorowanie 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ł →DevOpsWoluminy 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ówTDD 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 oprogramowaniaGit 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 oprogramowaniaPython 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 SQLSQL 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ł →