Jak zorganizować Observability: logging, metrics, tracing
Data dodania: 16 grudnia, 2025 / Aktualizacja: 21 sierpnia, 2025
W praktyce trzy filary obserwowalności łączą się, by skrócić czas diagnozy incydentów i pokazać prawdziwą przyczynę awarii.
Logi powinny być strukturalne i zawierać RequestId/MDC, by szybko odfiltrować przebieg jednego żądania w rozproszonym systemie.
Metryki, takie jak iops, czasy odpowiedzi czy percentyle P95/P99, dają wczesny obraz kondycji usług przed zgłoszeniami użytkowników.
Trace z TraceId i spanami ujawnia kolejność wywołań i zależności między usługami, a B3 w nagłówkach pomaga śledzić żądanie przez wiele serwisów.
W chmurze warto stosować agentów lub sidecar, by agregacja danych działała mimo efemerycznych instancji i autoskalowania.
Kluczowe wnioski
- Skoncentruj się najpierw na strukturze logów i RequestId.
- Wdrożenie metryk na poziomie instancji przyspiesza wykrycie regresji.
- Trace pomaga znaleźć wąskie gardła i relacje między usługami.
- Agent/sidecar rozwiązuje problem znikających instancji w chmurze.
- Stosuj sampling i selektywne logowanie dla kontroli kosztów.
Czytaj także: Poradnik: Monorepo — dlaczego, kiedy i jak go utrzymywać (praktyka)
Dlaczego obserwowalność jest dziś krytyczna: od „działa u mnie” do incydentu o 2:00
Gdy użytkownicy raportują błędy w środku nocy, konsola SSH często milczy na temat przyczyny.
W takim scenariuszu standardowe narzędzia jak top czy df -h rzadko wystarczają. Potrzebujesz danych, które odpowiadają na trzy pytania: co się dzieje, dlaczego i gdzie w systemie.
Metryczne sygnały pokazują wzrost błędów i spadek wydajności zanim napłyną masowe zgłoszenia. Logi wskazują konkretne operacje, użytkowników i typy błędów — np. timeouty czy błędy walidacji.
Śledzenie ścieżki żądania pozwala wskazać, w którym mikroserwisie pojawiło się wąskie gardło i jakie zewnętrzne zależności zawiodły. Dzięki temu skracasz dochodzenie z godzin do minut.
- W środowiskach cloud restart nie rozwiązuje problemu bez danych kontekstowych.
- Centralizacja telemetryczna obniża MTTR i poprawia decyzje o rollbacku.
- Wspólne dane skracają komunikację pomiędzy dev, SRE i supportem.
| Objaw | Dowód | Co sprawdzić najpierw |
|---|---|---|
| Spike błędów | Wzrost kodów 5xx | Metryki usług i p95 |
| Opóźnienia | Wzrost latencji | Ścieżka żądań między serwisami |
| Błędy użytkowników | Szczegółowe wpisy operacji | Logi z RequestId i kontekst |
Trzy filary obserwowalności: metryki, logi i trace w praktyce
Sygnały metryczne pokazują, kiedy system zaczyna odbiegać od normy i skąd warto zaczynać śledztwo.
Metryki odpowiadają na pytanie „co” i „kiedy”: liczby w czasie, jak requests_per_minute, response_time_ms czy failed_requests_percent, wskazują moment startu anomalii.
Log wyjaśnia „dlaczego”: ustrukturalizowany zapis (JSON: timestamp, level, service, message, user_id, reason) odsłania wyjątki i parametry żądania.
Trace pokazuje „gdzie”: mapa end-to-end z TraceId i spanami lokalizuje mikroserwis lub zewnętrzną bramkę, która wydłuża czas obsługi.
„Najlepsze dochodzenia zaczynają się od sygnału w dashboardzie, a kończą pełnym śladem żądania.”
- Najpierw obserwuj monitoring, potem sięgnij po logi i na końcu użyj trace.
- Powiązanie TraceId z wpisami logów daje kompletny obraz bez ręcznego dopasowywania czasów.
- Spójna data wymaga propagacji RequestId i ujednolicenia kluczy korelacyjnych.
| Filar | Co dostarcza | Przykładowy sygnał |
|---|---|---|
| Metryki | Zmiany w czasie, alerty | Wzrost failed_requests_percent o 9:00 |
| Logi | Kontekst operacji, wyjątki | Timeout z AuthService, RequestId=abc123 |
| Trace | Ścieżka żądania, wąskie gardła | Opóźnienie przy bramce płatności |
Log Aggregation w środowiskach cloud i mikrousług
Agregacja wpisów z wielu serwisów pozwala jednym filtrem prześledzić pełną ścieżkę żądania.
RequestId/MDC i logi strukturalne
Włącz RequestId przez MDC i zapisuj go w każdym rekordzie. Dzięki temu pojedynczym filtrem odtworzysz całą ścieżkę żądania.
Preferuj JSON z polami: timestamp, level, service, request_id, user_id, endpoint, status_code, duration_ms.
Agenci i sidecar w kontenerach
Wysyłka bezpośrednio z aplikacji (np. Logback → GELF) działa szybko, ale obciąża runtime przy problemach agregatora.
Lepszym wzorcem jest agent/collector (np. Beats, Fluentd) lub sidecar, który czyta pliki i wysyła dane niezależnie od aplikacji.

Wyzwania efemeryczności i autoskalowania
Instancje znikają — centralne przechowywanie gwarantuje dostęp do wpisów po skali down.
Dodaj etykiety: service, version, environment, region, instance_id dla lepszej filtracji.
Stacki i wzorce wysyłki
Popularne stacki: ELK, Graylog, Fluentd jako collector, Splunk oraz usługi typu google cloud (GCP Cloud Logging).
| Wzorzec | Plusy | Minusy |
|---|---|---|
| Wysyłka z aplikacji | Szybkie, proste | Ryzyko buforowania, wzrost pamięci i utrata wpisów |
| Agent / sidecar | Odporne, retry, backpressure | Więcej komponentów do utrzymania |
„Centralizacja i struktura logów skracają czas dochodzenia i zmniejszają koszt indeksowania.”
Distributed Tracing: śledzenie żądania przez usługi i sieć
Śledzenie end-to-end ujawnia, gdzie żądanie traci czas między usługami i w sieci. Dzięki temu szybciej znajdziesz komponenty odpowiadające za opóźnienia.
TraceId identyfikuje całą podróż żądania. Span to pojedynczy odcinek pracy z czasem start/stop i tagami. ParentSpan określa relację hierarchiczną, a eventy i tagi (key-value) opisują kontekst operacji.
Propagacja kontekstu między procesami powinna używać standardu B3 (nagłówki HTTP, RPC, JMS), by nie tracić powiązań. Ustal sampling: stały, probabilistyczny lub dynamiczny, by kontrolować koszty i zachować reprezentatywność data.
Automatyczna instrumentacja przyspiesza wdrożenie. Spring Cloud Sleuth dodaje adnotacje (@NewSpan) i obsługuje @Scheduled oraz @Async. Brave rozszerza to na klienty HTTP i sterowniki baz danych.
- Zdefiniuj TraceId, Span, ParentSpan oraz standard nazw.
- Taguj: service, rpc.method, db.system, http.url, status oraz atrybuty biznesowe.
- Włącz B3 w bramie, klientach HTTP i kolejce.
- Analizuj ślady w Zipkin/Jaeger i eksportuj dane do google cloud lub lokalnego kolektora.
Praktyczna wskazówka: skoreluj TraceId z RequestId w logach, aby błyskawicznie przejść od wąskiego gardła do pełnego kontekstu.
Monitoring metryk: od kondycji całego systemu po pojedynczą instancję
Dobry widok na metryki pozwala ocenić zdrowie systemu zarówno na poziomie całego klastra, jak i pojedynczej maszyny. Najpierw zdefiniuj dwa główne panele: ogólny i per‑instancja.
Dashboardy ogólne
Panel ogólny powinien zawierać: liczbę instancji, liczbę żądań, czasy odpowiedzi (ms), czasy zależności (baza, serwisy), iops oraz cache hit/miss. Ten widok wspiera SLA/SLO, alerty na latency i error rate oraz szybkie porównanie przed i po wdrożeniu.
Dashboardy per instancja
Widoki per‑instancja pokazują CPU, pamięć, dysk, file descriptors oraz czasy odpowiedzi konkretnego procesu. Dzięki temu łatwiej wykryć lokalne problemy, np. wysoką utylizację CPU lub długi GC.
Percentyle zamiast średnich
Stosuj P95/P99/P999 zamiast średniej. Percentyle ujawniają outliery, które mogą niszczyć doświadczenie użytkownika, mimo że średnia wygląda dobrze.
- Ustal etykiety: service, instance, version, env, region — dla szybkiego drill‑down.
- Mierz czasy do bazy, kolejki i zewnętrznych API — to częste źródła degradacji.
- Stosuj retencję i downsampling historycznych danych, by kontrolować koszty bez utraty trendów.
- Łącz panele z logami i trace, by skrócić ścieżkę dochodzenia.
Jak łączyć metryki, logi i trace w czasie incydentu
Podczas incydentu najważniejsze jest szybkie przejście od sygnału do dowodu, by zredukować wpływ na klientów.
Scenariusz: Black Friday. Panel pokazuje nagły skok P99 i error rate podczas piku ruchu.

Scenariusz „Black Friday”: korelacja spike’ów metryk z timeoutami i trace
Pierwszy krok: alert z panelu (P99 latency, error rate). To start śledztwa.
Następnie szybki pivot do log: filtruj po service=Payment i error=timeout, by zidentyfikować zawodzące wywołania.
Trace pokazuje, że opóźnienia >10 s występują tylko dla zamówień powyżej $500. Ślad wskazuje zewnętrzny check antyfraudowy.
Zintegrowane podejście skróciło dochodzenie z ~30 minut do kilku minut.
- Skok metryk → alert.
- Filtracja logów → lista błędnych żądań.
- Analiza trace → lokalizacja przyczyny (fraud check).
- Korekta reguł lub skalowanie zależności → obserwacja normalizacji percentyli.
Praktyka: w środowiskach cloud run koreluj RequestId/TraceId w panelach i wpisach, aby z jednego widoku przejść do konkretnego żądania.
| Etap | Cel | Efekt |
|---|---|---|
| Alert metryk | Wykrycie degradacji | Szybkie wskazanie okna czasowego |
| Filtracja logów | Identyfikacja błędnych wywołań | Lista konkretnych RequestId |
| Analiza trace | Ustalenie „gdzie” i „dlaczego” | Wskaźnik komponentu (fraud) jako przyczyna |
Data z trzech filarów tworzy pełny obraz incydentu i eliminuje zgadywanie.
Po zdarzeniu: zapisz runbook (dashboard → query logów → trace), dostosuj alerty, popraw sampling i wzbogacanie logów. Dokumentuj progi skalowania, aby unikać powtórki przy kolejnym cloud run.
Praktyczne wdrożenie w chmurze: Google Cloud, Cloud Run i GCP Cloud Logging
Implementacja w środowisku GCP powinna skupić się na prostych zasadach: struktura, etykiety, korelacja.
Cloud Run: sidecar/agent, etykiety i korelacja
cloud run warto skonfigurować tak, by aplikacje pisały strukturalne zapisy z requestId/TraceId.
Gdy aplikacja loguje do pliku, rozważ uruchomienie sidecar jako collector, który parsuje i wzbogaca wpisy metadanymi.
Zdefiniuj etykiety: service, version, environment, region — skrócą drogę od alertu do zdarzenia.
GCP Cloud Logging i Cloud Monitoring
google cloud oferuje natywne narzędzia do dashboardów i alertów.
Utwórz panele SLO z percentylami oraz log‑based metrics, a w alertach wstaw linki do zapytań w Cloud Logging i do trace viewer.
Retencja i kontrola kosztów
Wprowadź polityki retencji: krótsza dla verbose/debug, dłuższa dla audit/error.
Włącz sampling trace (np. 5–10% normalnie, 100% dla błędów) i filtruj logi o niskiej wartości, aby ograniczyć koszty cloud run.
Praktyczne: dokumentuj konfiguracje IaC (np. Terraform) dla dashboardów, alertów i log‑based metrics — łatwiej odtworzysz obserwalność w kolejnych projektach.
| Obszar | Rekomendacja | Efekt |
|---|---|---|
| Logi w cloud run | Struktura + requestId | Szybkie filtry w GCP Cloud Logging |
| Agent/collector | Sidecar do parsowania | Wzbogacone dane bez obciążania aplikacji |
| Retencja | Split na poziomy | Kontrola kosztów i dostępność ważnych danych |
Observability: logging, metrics, tracing — jak to zorganizować
Najlepsza strategia zaczyna się od minimalnego zestawu sygnałów, które szybko wskażą regresję.
Mapa decyzji — najpierw uruchom podstawowy monitoring SLO (latency, error rate, availability) i proste dashboardy zespołowe.
Minimalny zestaw na start
Co wdrożyć od razu:
- Metryki SLO: P95/P99 latencji i error rate.
- Strukturalne logi z RequestId/MDC i standardowymi etykietami (service, version, env).
- Podstawowy trace z propagacją B3 i samplingiem, wystarczy dla krytycznych ścieżek.
Checklist wdrożeniowy
- Instrumentacja: Spring Cloud Sleuth, Brave, interceptory HTTP/DB.
- Propagacja nagłówków i korelacja RequestId ↔ TraceId.
- Dashboardy: ogólne i per‑instancja; alerty na P95/P99 oraz error rate.
- Polityki retencji i sampling trace, by kontrolować koszty w google cloud run i cloud run.
- Decyzja: wysyłać logi z aplikacji czy przez agent/sidecar — oceniaj wpływ na wydajność.
Praktyczne: automatyzuj konfiguracje IaC i wersjonuj panele, by łatwo odtwarzać setup w google cloud.
| Etap | Kluczowe kroki | Efekt |
|---|---|---|
| Start | SLO + strukturalne logi | Szybkie wykrycie regresji |
| Środek | Podstawowy trace z B3 | Identyfikacja wąskich gardeł |
| Utrzymanie | Retencja, sampling, IaC | Kontrola kosztów i powtarzalność |
Wniosek
Połączenie centralnej agregacji, śledzenia żądań i monitoringu daje zespołom wyraźną przewagę przy diagnozie awarii.
Fundamentem są trzy skorelowane sygnały oraz wspólne klucze (MDC/RequestId, B3). Dzięki temu przechodzenie od alertu do konkretnego żądania trwa minuty, nie godziny.
Stosuj percentyle (P95/P99), dashboardy ogólne i per‑instancja, agentów/sidecar w kontenerach oraz sampling i selektywne logowanie. To równoważy widoczność z kosztami.
W ekosystemie google cloud oraz przy wdrożeniach cloud run integracja z natywnymi usługami przyspiesza uruchomienie i skraca MTTR.
Startuj od minimalnego zestawu, iteruj po postmortemach i rozwijaj tylko elementy, które realnie zmniejszają liczbę nocnych interwencji i poprawiają SLO.
Czytaj także: Licencje open-source i podstawy ochrony danych (RODO/GDPR) dla devów