GH GambleHub

Tracciati distribuiti

Traccia distribuita

1) Perché e cos'è questo?

Il tracciamento distribuito è un modo per collegare le operazioni lungo tutto il percorso di query: il fronte del gateway API microservizi BD/cache, broker di jobs/pipline.
Il risultato è un trace span in cui ogni span registra il funzionamento di un componente con attributi, eventi e stato. Questo accelera la RCA, aiuta a mantenere la SLO e riduce la MTTR.

Obiettivi chiave:
  • Visibilità del percorso critico e dei colli di bottiglia.
  • Correlazione dei sintomi (metriche) con cause (span) e dettagli (login).
  • Analisi di retrai, code, DLQ, fan-out, seghe di latitanza.

2) Modello di dati di traccia

Trace è il grafico delle chiamate con'trace _ id '.
Span — операция: `name`, `kind` (SERVER/CLIENT/PRODUCER/CONSUMER/INTERNAL), `start/end`, `status`, `attributes`, `events`, `links[]`.
Attribute - Chiave-valore (route, db. system, messaging. system, cloud. region, ecc.).
Events è un'etichetta istantanea all'interno dello span (ad esempio, «retry», «cache _ miss»).
Span Links - connessioni fuori «genitore-figlio» (batch, retrai, fan-in/out).
Resource - I metadati del processo/servizio ('service. name ', versione, ambiente).

3) Contesto e portabilità

3. 1 W3C Trace Context

Intestazioni:
  • «traceparent»: «variante-traceid-spanid-flags» (i flag includono sampling).
  • «tracestate» è uno stato vendor-specifico (minimo).
  • Baggage è la chiave per il contesto aziendale (limitatamente, senza PII/segreti).

3. 2 Scorrere il contesto

HTTP: `traceparent`/`tracestate`; gRPC: metadati WebSocket: in caso di upgrade e messaggi;

Messaggi: headers (Kafka/NATS/RabbitMQ) - Memorizziamo il contesto originale in PRODUCER e lo spostiamo in CONSUMER.
Basi: non «porta» il contesto - Logifichiamo gli attributi in span (query, rows, db. system), ma non il valore.

4) Semilibertà: come non rovinare

Head sampling (in entrata): probabile/secondo le regole (route, tenant, endpoint).
Tail sampling (sul raccoglitore): conserviamo le roulotte «interessanti» - errori, lunghi p95/p99, percorsi rari.
Explars: le metriche dell'istogramma memorizzano i riferimenti a specifici «trace _ id».
Raccomandazione: combinare - head 5-20% + regole tail 100% per 5xx/timeout/p99.

5) Attributi e tassonomia (minimo obbligatorio)

Comuni:
  • `service. name`, `service. version`, `deployment. environment`, `cloud. region`, `http. route`, `http. method`, `http. status_code`, `db. system`, `db. statement '(ridotto/senza dati),' messaging. system`, `messaging. operation`, `peer. service`, `net. peer. name`, `tenant. id`, `request. id`.

Etichette aziendali, con attenzione, senza PII. Esempio: 'order. segment`, `plan. tier`.

6) Script asincroni, code e batch

PRODUCER → CONSUMER: creiamo span PRODUCER con un contesto nel messaggio - headers (traceparent, baggage). CONSUMER avvia SERVER/CONSUMER-SPAN da link a PRODUCER (a meno che non ci sia una gerarchia rigorosa).
Fan-out: un solo ingresso: molti outpoint, span o links secondari.
Batch: CONSUMER legge il pacchetto N dei messaggi con uno span con «events» per ogni o «links» per N dei singoli contesti.
DLQ: span'messagging separato. dlq. publish` с reason и count.
Retrai: "event: retry" + "retry. count'attributo; preferibilmente un nuovo CHILD-span da provare.

7) Integrazione con fogli e metriche

Scriviamo JSON con'trace _ id '/' span _ id 'da span con un click.
Le metriche RED/USE contengono gli → s da picchi p99 vanno a «cattivi» span.
Le piste generano i dispositivi (errori di dipendenza) e i segnali aziendali (conversione) attraverso gli eventi.

8) Prestazioni e costi

Trottling e trottling degli eventi.
Riduce la radicalità degli attributi (nessun «user _ id »/« sessions _ id» come label!).
Compressione/batch da parte dell'esportatore I limiti dei timeout dell'esportazione.
Stoccaggio: hot 1-7 giorni, più avanti le unità/solo le roulotte «problematiche».
Categorie di sprechi: raccoglitori, indici, deposito, egress.

9) Sicurezza e privacy

In Transit: TLS 1. 3/mTLS kollektor↔agenty; At Rest: crittografia, chiavi personalizzate (vedere Crittografia In Transit/At Rest).
PII e segreti: non scriviamo in attributi/eventi; Tornizzazione/occultamento sul produttore.
Multiforme: 'tenant. id "come risorsa discografica e isolamento degli spazi, criteri di lettura Controllo dell'accesso alle tracce (vedere Controllo e registri invariati).

10) Diagrammi di implementazione

10. 1 OpenTelemetry SDK (pseudocode)

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 OTel raccoglitore - tail sampling (sezione)

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 - Migrazione contesto (concetto)

PRODUCER - Aggiungiamo headers'traceparent ',' baggage '.
CONSUMER - Se il messaggio avvia un nuovo thread, il nuovo SERVER/CONSUMER-SPAN c link al contesto degli headers.

11) Data/ETL и ML

Per i batch-pipline: span per batch/partition con'dataset. urn`, `run. id`, `rows. in/out`, `freshness. lag`.
Per ML: allenamento span/infernale, versione modello, latency, feature store.
Collegamento con Lineage: 'run. id` и `dataset. urn'permettono di passare dal trailer al grafico di origine dei dati.

12) SLO piattaforme di tracciamento

Disponibile ingestione: ≥ 99. 9%

Ritardo di indicizzazione: 60 da p95

Copertura head-sample: 5-10% percorsi chiave

100% di salvataggio dei trailer con stato di ERRORE e latency> soglia di directory dei percorsi critici

Gli alert della piattaforma sono la crescita dei drop, i timeout delle esportazioni, la lega dell'indice, il surriscaldamento della cardinalità.

13) Test e verifica

Contratto di traccia CI: presenza di span sugli endpoint chiave, attributi obbligatori, 'traceparent'corretto passa attraverso il gateway/proxy.
Sintetic/rum-campioni - Raccoglie le roulotte dall'esterno.
Chaos/incidenti: disattivazione delle dipendenze, verifica che il tail-semper «seleziona» gli errori.
Smoke in vendita, dopo la release, «se ci sono gli spans» e l'excempolare →.

14) Assegno fogli

Prima di vendere

  • W3C Trace Text ovunque; per i messaggi - headers.
  • Head-sempling di base abilitato; le regole tail per 5xx/p99 sono configurate.
  • Attributi obbligatori: route, method, status, service. version, tenant. id.
  • Logi JSON con'trace _ id '/' span _ id ', metriche con exemplars.
  • Igiene PII; crittografia nel percorso/in pace; Criteri di accesso.
  • Dashboard: percorso critico, errori di dipendenze, ritai/timeout.

Utilizzo

  • Panoramica mensile della radicalità degli attributi; quote.
  • Sintonizzatore tail-spling SLO (meno rumore, tutto caldo).
  • RCA di apprendimento con la transizione di metrico a exemplar a trace di .
  • Verifica delle coperture per code, DLQ, ETL-jobs.

15) Runbook’и

RCA: p99 su/pay

1. Aprire RED-dashboard; da bin p99 andare su exemprar a trance.
2. Trova un client span «stretto» (ad esempio, «gateway». call '), controllare "retry. count, timeout.
3. Confronta le versioni del servizio/dipendenza, regione/zona.
4. Attiva il degrado (risposta cache/limite RPS) e avvisa i proprietari della dipendenza.
5. Dopo la fix, RCA e ticket per l'ottimizzazione.

Spin DLQ

1. Filtro di scorciatoie per 'messaging'. dlq. publish`.
2. Verifica cause (events), correlazione con il rilascio.
3. Esegui reprocess, allunga temporaneamente il timeout di CONSUMER e avvisa i proprietari di downstream.

16) Errori frequenti

Nessun percorso di contesto tramite gateway/broker. Soluzione: middleware/intersettori, librerie unificate.
Tutte le roulotte al 100 . Costoso e inutile: usa il tail-sempling.
Loghi senza «trace _ id». La correlazione tra MTTR è .
PII negli attributi. Maschera/tornizza; memorizzare solo il contesto tecnico.
«Muti» di fondo. Aggiungi gli span su batch/partition e 'run. id`.
Etereboy di denominazione. Immettere un dizionario di nomi span e chiavi attributi.

17) FAQ

Head o tail sempling sono migliori?
La combinazione. Head fornisce un livello di base, tail garantisce che le anomalie/errori siano conservate.

C: Come seguire Kafka senza una gerarchia rigida?
O: Utilizzare span links tra PRODUCER e CONSUMER; contesto - headers.

C: Cosa fare con SQL sensibili?
Oh, 'db. statement 'abbreviato/normalizzato (senza valori) ó db. operazion' + dimensioni/tempo.

C: Come collegare le metriche aziendali?
O: Aggiungere attributi di dominio senza PII (plan/segment), utilizzare gli eventi «fase aziendale» all'interno dello span e passare dalle metriche di conversione a excemprar.

Materiali correlati:
  • Osservabilità: fogli, metriche, tracciabili
  • Controllo e registri invariati
  • Crittografia In Transit/At Rest'
  • Origine dati
  • «Privacy by Design (GDPR)»
  • «Gestione dei segreti»
Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.