Obserwowalność: kłody, mierniki, ślady
Obserwowalność: kłody, mierniki, ślady
1) Dlaczego go potrzebujesz
Obserwowalność - zdolność systemu do odpowiedzi na nieplanowane pytania dotyczące jego stanu. Opiera się na trzech głównych sygnałach:- Metryka to zwarte agregaty do SLI/SLO i ostrzegania o objawach.
- Ślady - łańcuchy zapytań typu end-to-end.
- Dzienniki - szczegółowe wydarzenia dotyczące dochodzeń i audytów.
Cel: szybki RCA, alerty zapobiegawcze i zarządzana niezawodność w ramach budżetu błędu.
2) Zasady architektury
Pojedynczy kontekst: wszędzie rzucamy 'trace _ id',' span _ id', 'tenant _ id',' request _ id', 'user _ agent', 'client _ ip _ hash'.
Standardy: OpenTelemetry (OTel) dla SDK/agentów, format dziennika JSON (kanoniczny, z schematem).
Objawy> przyczyny: alert przez objawy użytkownika (opóźnienie/błędy), a nie przez procesor.
Komunikacja sygnału: od → metryki do przykładów → do konkretnych kłód przez 'trace _ id'.
Bezpieczeństwo i prywatność: maskowanie PII w dziennikach, szyfrowanie w tranzycie/w spoczynku, niezmienne dzienniki audytu.
Wielopoziomowość: rozdzielenie obszarów nazw/kluczy/zasad.
3) Taksonomia sygnału i schematy
3. 1 Metryka
RED (Wskaźnik, Błędy, Czas trwania) dla usług i UŻYTKOWANIA (Wykorzystanie, Nasycenie, Błędy) dla infrastruktury.
Тила: licznik, skrajnia, histogram/streszczenie. Dla opóźnienia, histogram ze stałymi wiadrami.
Przykłady: odniesienie do 'śladu _ id' w' gorących 'pojemnikach histogramu.
name: http_server_duration_seconds labels: {service, route, method, code, tenant}
type: histogram buckets: [0. 01, 0. 025, 0. 05, 0. 1, 0. 25, 0. 5, 1, 2, 5]
exemplar: trace_id
3. 2 Ślady
Span = operacja z 'name', 'start/end', 'atrybuty', 'events', 'status'.
Kontekst śladowy W3C dla tolerancji.
Pobieranie próbek: podstawowy (głowa) + dynamiczny (ogon) + zasady „znaczenia” (błędy, wysoki p95).
3. 3 Dzienniki
Tylko JSON o strukturze; poziomy: DEBUG/INFO/WARN/ERROR.
Wymagane pola to 'ts _ utc',' level ',' message ',' trace _ id', 'span _ id',' lokator _ id', 'na', 'service', 'region', 'host', 'labels {}'.
Zabronione: sekrety, żetony, PAN, hasła. PII - tylko tokenizowane/zamaskowane.
json
{"ts":"2025-10-31T12:05:42. 123Z","level":"ERROR","service":"checkout","env":"prod",
"trace_id":"c03c...","span_id":"9ab1...","tenant_id":"t-42","route":"/pay",
"code":502,"msg":"payment gateway timeout","retry":true}
4) Zbieranie i transport
Agenci/eksporterzy (daemonset/sidecar) → bufor na → węzeł autobusowy/ingest (TLS/mTLS) → sklep z sygnałami.
Wymagania: ciśnienie wsteczne, przekładki, deduplikacja, ograniczenie kardynalności (etykiety!), ochrona przed „burzami dziennika”.
Metryka: pociągnąć (kompatybilny z Prometeusem) lub wcisnąć przez OTLP.
Ślady: OTLP/HTTP (gRPC), próbniki ogona na kolektorze.
Dzienniki: kolekcja lokalna (journal/docker/stdout) → parser → normalizator.
5) Przechowywanie i zatrzymywanie (wielopoziomowe)
Metryka: gorący TSDB 7-30 dni (z obniżeniem), kruszywa na dłuższy okres (90-365 dni).
Ślady: 1-7 dni pełne, a następnie agregaty/przęsła „ważnych” usług; przechowywać indeksy w 'service', 'status', 'error'.
Dzienniki: gorący wskaźnik 7-14 dni, ciepły 3-6 miesięcy, archiwum do 1-7 lat (zgodność). Audyt - WORM.
Optymalizacja kosztów: downsampling, filtrowanie DEBUG w sprzedaży, kontyngenty etykiet, pobieranie próbek dla utworów.
6) SLI/SLO, alert i obowiązek
SLI: dostępność (% udanych wniosków), opóźnienia (p95/p99), 5xx share, świeżość danych, udział udanych miejsc pracy.
SLO: cel na SLI (np. 99. 9% powodzenia ≤ 400 ms).
Budżet błędu: 0. 1% „margines błędu” → zasady fantastyki/eksperymentów.
- 'ALERT HighLatency' есла 'p99 (http_server_duration_seconds{route="/pay"})> 1s' 5мий.
- 'ALERT ErrorRate' есла '(http_requests_total{code=~"5.."}[5m] )/rate (http_requests_total[5m])> 0. 02`.
- Silo alerty (CPU/Disk) - tylko jako pomocnicze, bez przywoływania.
7) Korelacja sygnału
Metryka jest „czerwona” → kliknij na przykładowym → konkretny 'trace _ id' → spojrzenie na' slow 'span → otwórz dzienniki za pomocą tego samego' trace _ id'.
Korelacja z wersjami: atrybuty 'version', 'image _ sha', 'feature _ flag'.
Dla danych/ETL: 'dataset _ urn',' run _ id', link do lineage (patrz odpowiedni artykuł).
8) Pobieranie próbek i kardynalność
Metryki: etykiety ograniczające (bez 'user _ id',' session _ id'); kontyngenty/walidacja przy rejestracji.
Ślady: połączyć próbkę głowy (przy wejściu) i próbkę ogona (przy kolektorze) z zasadami: „wszystko, co jest 5xx, p99, błędy - 100%”.
Kłody: poziomy i przepuszczanie; dla częstych powtarzających się błędów - zagregowanie zdarzeń (klucz dedupe).
yaml processors:
tailsampling:
decision_wait: 2s policies:
- type: status_code status_code: ERROR rate_allocation: 1. 0
- type: latency threshold_ms: 900 rate_allocation: 1. 0
- type: probabilistic hash_seed: 42 sampling_percentage: 10
9) Bezpieczeństwo i prywatność
In Transit/At Rest: szyfrowanie (TLS 1. 3, AEAD, KMS/HSM).
PII/sekrety: środki sanitarne przed wysyłką, tokenizacja, maskowanie.
Dostęp: ABAC/RBAC do odczytu; rozdzielenie ról producentów/czytników/administratorów.
Audyt: niezmienny dziennik dostępu do kłód/śladów; eksport - w formie zaszyfrowanej.
Wielopoziomowe: obszary nazw/etykiety najemców z polityką; izolacja klucza szyfrowania.
10) Profile konfiguracyjne (fragmenty)
Prometeusz (mierniki HTTP + ostrzeganie):yaml global: { scrape_interval: 15s, evaluation_interval: 30s }
scrape_configs:
- job_name: 'app'
static_configs: [{ targets: ['app-1:8080','app-2:8080'] }]
rule_files: ['slo. rules. yaml']
slo. zasady. yaml (przykład RED):
yaml groups:
- name: http_slo rules:
- record: job:http_request_duration_seconds:p99 expr: histogram_quantile(0. 99, sum(rate(http_server_duration_seconds_bucket[5m])) by (le,route))
- alert: HighLatencyP99 expr: job:http_request_duration_seconds:p99{route="/pay"} > 1 for: 5m
OpenTelemetry SDK (pseudokoda):
python provider = TracerProvider(resource=Resource. create({"service. name":"checkout","service. version":"1. 8. 3"}))
provider. add_span_processor(BatchSpanProcessor(OTLPExporter(endpoint="otel-collector:4317")))
set_tracer_provider(provider)
with tracer. start_as_current_span("pay", attributes={"route":"/pay","tenant":"t-42"}):
business logic pass
Dzienniki aplikacji (stdout JSON):
python log. info("gw_timeout", extra={"route":"/pay","code":502,"trace_id":get_trace_id()})
11) Dane/ETL i streaming
SLI dla danych: świeżość (max lag), kompletność (wiersze i oczekiwania), „jakość” (walidatory/duplikaty).
Wpisy: pomijanie okien, opóźnienie konsumentów, wzrost DLQ.
Korelacja: 'run _ id',' dataset _ urn', zdarzenia lineage; śladowe ilości rurociągów (rozpiętość na partię/przegrodę).
Kafka/NATS: metryka producenta/konsumenta, opóźnienie/awaria; ślady według nagłówków (w tym „traceparent”).
12) Profilowanie i eBPF (sygnał dodatkowy)
Niskopoziomowe gorące ścieżki CPU/alloc/IO; profile na jeden incydent.
Telemetria eBPF (opóźnienia sieciowe, DNS, połączenia systemowe) powiązana z 'trace _ id'/PID.
13) Badanie obserwowalności
Kontrakt na sygnał - Sprawdzenie wywozu metryk/etykiet/histogramów do CI.
Sondy syntetyczne: scenariusze RUM/symulowane klienci dla zewnętrznych SLIs.
Ćwiczenia chaosu/ognia: wyłączanie zależności, degradacja - patrzymy na reakcje alarmów i pracowników.
Dym w Prod: Po wdrożeniu sprawdź, czy nowe punkty końcowe mają metryki i ślady.
14) Kontrola kosztów i głośności
budżety według sygnału/polecenia; deska rozdzielcza „koszt za sygnał”.
Kardynalność w ramach budżetu (SLO dla kardynalności), ograniczenia dotyczące nowych etykiet.
Downsampling, prezentacje klasy danych, zimne archiwa i WORM do audytu.
15) Działanie i SLO platformy obserwacyjnej
Platforma SLO: 99. 9% udanych połknięć; opóźnienie do wskaźnika metrycznego ≤ 30 s, kłody ≤ 2 min, ślady ≤ 1 min.
Alerty platformy: opóźnienie wtrysku, wzrost spadku, błąd podpisu/szyfrowania, przepełnienie bufora.
DR/HA: kopie zapasowe dla wielu obszarów, replikacja, konfiguracja/reguła.
16) Listy kontrolne
Przed sprzedażą:- Wszędzie rzucane jest 'trace _ id'/' span _ id'; Dzienniki JSON z diagramem.
- Wskaźniki RED/USE z histogramami; przykładowy → wyrównanie.
- Włączone pobieranie próbek ogonowych; 5xx/p99 reguły = 100%.
- Ostrzeżenia przez objawy + Runybooks; ciche godziny/anty-klapa.
- Urządzenia sanitarne PII; Szyfrowanie w czasie odpoczynku/tranzytu WORM do audytu.
- Zatrzymania i budżety na wolumeny/kardynalność.
- Miesięczny przegląd ostrzegawczy (hałas/dokładność), progi dostrajające.
- Sprawozdanie z budżetu za błędy i podjęte działania (fichfreeze, hartowanie).
- Sprawdzenie deski rozdzielczej/kłody/powłok śladowych pod kątem ścieżek krytycznych.
- Incydenty szkoleniowe i aktualizacje książek startowych.
17) Runbook 'а
RCA: p99/podwyżka wynagrodzenia
1. Otwórz deskę rozdzielczą RED do 'checkout'.
2. Przejdź do przykładowego → powolny tor → ujawnić „wąską rozpiętość” (np. 'Droga dojazdowa. połączenie ").
3. Otwórz dzienniki przez 'trace _ id' → view timeouts/retrays.
4. Włącz funkcję rollback/limit RPS, powiadom właścicieli zależności.
5. Po stabilizacji - RCA, bilety optymalizacji, test odtwarzania.
1. SLI „świeżość” czerwony → utwór → upadek boisko.
2. Sprawdź dziennik brokera/DLQ, błędy złącza.
3. Rozpocznij ponowne przetwarzanie, powiadom konsumentów (BI/produkt) za pośrednictwem kanału statusu.
18) Częste błędy
Dzienniki bez schematu i bez 'trace _ id'. Śledztwo jest czasem opóźnione.
Ostrzeżenia o infrastrukturze zamiast o objawach. Przysięganie trafia do mleka.
Bezgraniczna kardynalność metryk. Eksplozja kosztowa i niestabilność.
Wszystkie utwory w 100%. Drogie i niepotrzebne; umożliwia inteligentne pobieranie próbek.
PII/sekrety w dziennikach. Zawiera sanitarniki i czerwone listy.
Funkcje „niemego”. Nowy kod bez mierników/śladów/dzienników.
19) FAQ
P: Czy muszę przechowywać surowy tekst dzienników?
Odp.: Tak, ale z zachowaniem i archiwami; w przypadku wpisów i układów SLO wystarczające są kruszywa. Audyt - w WORM.
P: Co wybrać dla utworów - próbkowanie głowy lub ogona?
Odp.: Połączyć: head-probabilistic dla basecoat + ogon-rules for errors and anomalies.
P: Jak połączyć mierniki użytkownika i metryki techniczne?
Odp.: Poprzez ogólne 'trace _ id' i etykiety firmowe (' trasa ',' najemca ',' plan '), a także poprzez imprezy produktowe (konwersje) z korelacją z torami.
P: Jak nie utopić się w wpisach?
Odp.: Pokonaj objawy, wprowadź ciche godziny, deduplikację, grupowanie, priorytetyzację SLO i domyślnie właściciela na ostrzeżenie.
- „Audyt i niezmienne kłody”
- „W tranzycie/w odpoczynku szyfrowanie”
- „Tajne zarządzanie”
- „Pochodzenie danych (rodowód)”
- „Prywatność według projektu (RODO)”
- „Webhook gwarancji dostawy”