Dystrybuowane ślady
Dystrybuowane ślady
1) Dlaczego i co to jest
Dystrybuowane śledzenie jest sposobem na połączenie operacji wzdłuż całej ścieżki żądania: front → brama API → mikroservices → bazy danych/bufory → brokery → jabs/rurociągi.
Rezultatem jest ślad z przęseł (rozpiętości), gdzie każda rozpiętość przechwytuje działanie komponentu z atrybutami, zdarzeniami i statusem. To przyspiesza RCA, pomaga utrzymać SLO i zmniejsza MTTR.
- Widoczność ścieżki krytycznej i wąskich gardeł.
- Korelacja objawów (metryka) z przyczynami (przęsła) i szczegółami (dzienniki).
- Analityka retras, kolejek, DLQ, wentylatorów, „piły” opóźnień.
2) Model danych śladowych
Ślad - wykres wywoławczy z 'trace _ id'.
Span - оверавий: „nazwa”, „rodzaj” (SERVER/CLIENT/PRODUCER/CONSUMER/INTERNAL), „start/end”, „status”, „atrybuty”, „wydarzenia”, „linki []”.
Atrybuty - klucz wartości (trasa, db. system, komunikatory. system, chmura. region itd.).
Zdarzenia - znaczniki błyskawiczne wewnątrz przęsła (na przykład 'retry', 'cache _ miss').
Span Links - połączenia poza „parent-child” (batchi, retrai, fan-in/out).
Resource - metadane procesu/usługi ('service. nazwa ", wersja, środowisko).
3) Kontekst i tolerancja
3. 1 Kontekst śladowy W3C
Tytuły:- „traceparent”: „wersja-traceid-spanid-flag” (flagi obejmują pobieranie próbek).
- „państwo handlowe”: państwo specyficzne dla dostawcy (minimum).
- Bagaż - klucze do kontekstu biznesowego (ograniczony, bez PII/tajemnic).
3. 2 Kontekst rzucania
HTTP: "traceparent'/" tracestate"; gRPC: metadane; WebSocket: podczas aktualizacji i w wiadomościach;
Wiadomości: w nagłówkach (Kafka/NATS/RabbitMQ) - zapisz oryginalny kontekst z PRODUCENTEM i przelew z KONSUMENTEM.
Podstawy: nie „nosić” kontekstu - logujemy atrybuty do przęsła (zapytanie, wiersze, db. system), ale nie wartości.
4) Pobieranie próbek: Jak nie pójść złamane
Pobieranie próbek głowy: probabilistyczne/według zasad (trasa, najemca, punkt końcowy).
Próbkowanie ogona (na kolektorze): zapisać „ciekawe” szlaki - błędy, długie p95/p99, rzadkie ścieżki.
Przykłady: Metryka histogramu przechowuje odniesienia do określonego 'trace _ id'.
Zalecenie: połączyć - głowica 5-20% + reguły ogona 100% dla 5xx/timeout/p99.
5) Atrybuty i taksonomia (wymagane minimum)
Ogólne:- "służba publiczna. nazwa „,” usługi. wersja „,” wdrożenie. środowisko „,” chmura. region „,” http. trasa ',' http. metoda „,” http. status_code', db. system „,” db. oświadczenie „(skrócone/bez danych),” wiadomości. system „,” wiadomości. operacja „,” peer. serwis', "net. peer. nazwisko „,” najemca. id', "żądanie. id'.
Etykiety firmowe: schludne, bez PII. Przykład: 'order. segment ',' plan. poziom ".
6) Asynchroniczne skrypty, kolejki i partie
PRODUCENT → KONSUMENT: stworzenie PRODUCENTA przęseł z kontekstem; w wiadomości - nagłówki (traceparent, bagaż). KONSUMENT uruchamia SERVER/CONSUMER-span z linku do PRODUCENTA (jeśli nie ma ścisłej hierarchii).
Wentylator: jedno wejście - wiele wyjść → przęsła dziecka lub linki.
Partia: KONSUMENT czyta pęknięcie wiadomości N → jedno przęsło z 'eventami' dla każdego 'Id' lub 'linki' dla N oddzielnych kontekstów.
DLQ: oddzielne rozpiętość. dlq. publikować 'powód policzyć.
Retrai: 'event: retry' + 'retry. count' atrybut; najlepiej nowa rozpiętość CHILD, aby spróbować.
7) Integracja z dziennikami i metrykami
Piszemy dzienniki JSON z 'trace _ id'/' span _ id' → z przęsła idziemy do dzienników klikając.
Wskaźniki RED/USE zawierają przykłady → z pików p99 idziemy na „złe” przęsła.
Ślady generują sygnały techniczne (błędy zależności) i sygnały biznesowe (konwersja) poprzez zdarzenia.
8) Wydajność i koszt
Pobieranie próbek i rozdrabnianie zdarzeń.
Zmniejszenie kardynalności atrybutów (no 'user _ id'/' session _ id' as label!).
Kompresja/masowanie przez eksportera; eksportować granice czasowe.
Przechowywanie: gorące 1-7 dni, następnie - jednostki/tylko „problem” szlaki.
Kategorie wydatków: kolektory, indeksy, przechowywanie, wyjście.
9) Bezpieczeństwo i prywatność
W tranzycie: TLS 1. 3/mTLS kollektor wokół agenty; W spoczynku: szyfrowanie, klucze prywatne (patrz „Szyfrowanie w tranzycie/w spoczynku”).
PII i tajemnice: nie zapisywać w atrybutach/zdarzeniach; tokenizacja/maskowanie na producenta.
Wielozadaniowość: "najemca. identyfikator "jako etykieta zasobów i izolacja przestrzeni, polityka czytania; audyt dostępu do śladu (patrz Audyt i niezmodyfikowane dzienniki).
10) Systemy wdrażania (odniesienie)
10. 1 OpenTelemetry SDK (pseudokoda)
python from opentelemetry import trace from opentelemetry. sdk. trace import TracerProvider from opentelemetry. sdk. resources import Resource from opentelemetry. sdk. trace. export import BatchSpanProcessor from opentelemetry. exporter. otlp. proto. grpc. trace_exporter import OTLPSpanExporter
provider = TracerProvider(resource=Resource. create({
"service. name":"checkout","service. version":"1. 12. 0","deployment. environment":"prod"
}))
provider. add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="otel-collector:4317", insecure=True)))
trace. set_tracer_provider(provider)
tr = trace. get_tracer("checkout")
with tr. start_as_current_span("POST /pay", attributes={
"http. route":"/pay","http. method":"POST","tenant. id":"t-42"
}):
business logic, external API call and pass DB
10. 2 Kolektor OTel - pobieranie próbek ogona (fragment)
yaml processors:
tailsampling:
decision_wait: 2s policies:
- type: status_code status_codes: [ERROR]
- type: latency threshold_ms: 900
- type: probabilistic sampling_percentage: 10 exporters:
otlphttp: { endpoint: http://trace-backend:4318 }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tailsampling]
exporters: [otlphttp]
10. 3 Kafka - transfer kontekstu (koncepcja)
PRODUCENT: dodać nagłówki "traceparent'," bagaż ".
KONSUMENT: jeśli komunikat zainicjuje nowy strumień - nowa rozpiętość SERWERA/KONSUMENTA od linku do kontekstu z nagłówków.
11) Dane/ETL (ML)
Dla rurociągów serii: rozpiętość partii/przegrody z 'datą. urn ',' run. id ',' wiersze. w/out ',' świeżość. lag '.
Dla ML: przęsła treningu/wnioskowania, wersja modelu, opóźnienie, sklep funkcyjny.
Link do Lineage: 'run. id 'а' dataset. urn 'allow skakać z śladu do wykresu pochodzenia danych.
12) Platforma śladowa SLO
Spożycie: ≥ 99. 9%
Opóźnienie w indeksowaniu: ≤ 60 s p95
Zasięg próbki głowy: ≥ 5-10% tras kluczowych
100% zapisywanie tras z błędem stanu i opóźnieniem> progiem zgodnie z katalogiem „ścieżki krytyczne”
Alerty platformowe: wzrost spadków, terminy eksportu, opóźnienie indeksowania, przegrzanie kardynalności.
13) Badanie i weryfikacja
Kontrakt śladowy w CI: obecność przęseł na kluczowych punktach końcowych, obowiązkowe atrybuty, prawidłowe "traceparent' muchy przez bramę/proxy.
Próbki syntetyczne/rumowe: zbierać ślady z zewnątrz.
Chaos/incydenty: wyłączanie zależności, sprawdzanie, czy próbnik ogona „odbiera” błędy.
Dym w sprzedaży: po wydaniu - „są jakieś przęsła” i przykładowy → ślad.
14) Listy kontrolne
Przed sprzedażą
- W3C Trace Context jest rzucany wszędzie; dla wiadomości - nagłówki.
- Umożliwia się podstawowe pobieranie próbek głowicy; reguły ogonowe dla 5xx/p99 są skonfigurowane.
- Obowiązkowe atrybuty to trasa, metoda, status, usługa. wersja, najemca. id.
- Dzienniki JSON z 'trace _ id'/' span _ id', mierniki z wzorcami.
- Urządzenia sanitarne PII; Szyfrowanie zasad dostępu do go/rest.
- Deski rozdzielcze: „ścieżka krytyczna”, „błędy zależności”, „retras/timeouts”.
Operacja
- Miesięczny przegląd kardynalności atrybutów; kontyngenty.
- Pobieranie próbek ogona przez SLO (mniej hałasu, wszystkie „gorące” - w próbce).
- Szkolenia RCA z metryki przejściowej → przykładowy → ślad → dzienniki.
- Sprawdzanie okładek dla kolejek, DLQ, ETL.
15) Runbook 'а
RCA: p99 wzrost/wynagrodzenie
1. Otwórz deskę rozdzielczą RED; od bin p99 iść na przykład do śledzenia.
2. Znajdź „wąską” rozpiętość klienta (na przykład 'gateway. call '), check' retry. count ', timeouts.
3. Porównaj wersje usług/zależności, region/strefa.
4. Włącz degradację (limit odpowiedzi buforowania/RPS), powiadom właścicieli zależności.
5. Po naprawie - RCA i bilety optymalizacji.
Przepięcie DLQ
1. Filtr śladowy przez 'messing. dlq. publikuje ".
2. Sprawdź przyczyny (wydarzenia), koreluj z wydaniem.
3. Rozpocząć ponowne przetwarzanie, tymczasowo zwiększyć czas dla KONSUMENTA, powiadomić właścicieli niższego szczebla.
16) Częste błędy
Brak prognoz kontekstowych za pośrednictwem bram/brokerów. Rozwiązanie: oprogramowanie pośrednie/interseptory, pojedyncze biblioteki.
Wszystkie szlaki w 100%. Drogie i bezsensowne - użyj próbkowania ogona.
Dzienniki bez 'trace _ id'. Korelacja → MTTR, jest stracona.
PII w atrybutach. Maska/tokenizacja; zachować tylko kontekst techniczny.
„Mute” tło jabs. Dodaj przęsła do partii/partycji i 'run. id'.
Nazywanie rozbieżności. Wprowadź słownik przęseł i klawiszy atrybutów.
17) FAQ
P: Czy próbkowanie głowy czy ogona jest lepsze?
Odp.: Kombinacja. Głowa daje warstwę podstawową, ogon gwarantuje zachowanie anomalii/błędów.
P: Jak prześledzić Kafkę bez sztywnej hierarchii?
A: Wykorzystaj powiązania między PRODUCENTEM a KONSUMENTEM; kontekst - w nagłówkach.
P: Co zrobić z wrażliwym SQL?
A: 'db. oświadczenie „skrócone/znormalizowane (bez wartości) lub” db. działanie "+ wymiary/czas.
P: Jak odnosisz się do wskaźników biznesowych?
Odp.: Dodaj atrybuty domeny bez PII (plan/segment), użyj zdarzeń z „etapów biznesowych” w rozpiętości i przejdź od metryki konwersji do wzorca.
- „Obserwowalność: kłody, mierniki, ślady”
- „Audyt i niezmienne kłody”
- „W tranzycie/w odpoczynku szyfrowanie”
- „Pochodzenie danych (rodowód)”
- „Prywatność według projektu (RODO)”
- „Tajne zarządzanie”