GH GambleHub

Traçados distribuídos

Traçados distribuídos

1) Por que e o que é isso?

O rastreamento distribuído é uma forma de interligar as operações em todo o caminho de consulta, como a frente → a entrada de API → microsserviços → BD/cachês → corretores de → jobs/pipline.
O resultado é um trace de span, onde cada span registra o funcionamento de um componente com atributos, eventos e status. Isso acelera o RCA, ajuda a manter o SLO e reduz o MTTR.

Objetivos essenciais:
  • Visibilidade do caminho crítico e dos «estreitos».
  • Correlação de sintomas (métricas) com causas (spans) e detalhes (logs).
  • Analista de retrações, filas, DLQ, fãs-outs, serras de latência.

2) Modelo de dados de rastreamento

Trace é um gráfico de chamadas com 'trace _ id'.
Span — операция: `name`, `kind` (SERVER/CLIENT/PRODUCER/CONSUMER/INTERNAL), `start/end`, `status`, `attributes`, `events`, `links[]`.
Atributes - valor-chave (rota, db. system, messaging. system, cloud. region etc.).
Events - marcas instantâneas dentro do span (por exemplo, «retry», «cachê _ miss»).
Span Links - ligações fora «pai-filho» (batchi, retrai, fan-in/out).
Resource - metadados de processo/serviço ('service. name ', versão, ambiente).

3) Contexto e portabilidade

3. 1 W3C Trace Context

Títulos:
  • 'traceparent': 'versão-traceid-spanid-flags' (as bandeiras incluem sampling).
  • 'tracestate': estado vendedor-específico (mínimo).
  • Baggage - chaves para o contexto de negócios (limitado, sem PII/segredos).

3. 2 Cadastro de contexto

HTTP: `traceparent`/`tracestate`; gRPC: metadados; WebSocket: No upgrade e nas mensagens;

Mensagens: em headers (Kafka/NATS/RabbitMQ) - Preservando o contexto original do PRODUCER e transferindo para CONSUMER.
Bases: não «carregam» contexto - logando atributos em span (query, rows, db. system), mas não o valor.

4) Semente: como não ruir

Head sampling (entrada): provável/de acordo com as regras (rota, tenant, endpoint).
Tail sampling (no coletor): Preservamos trailers «interessantes» - erros, longos p95/p99, caminhos raros.
Exemplars: métricas de histograma armazenam links para «trace _ id» específicos.
Recomendação: combinar - head 5-20% + regras tail 100% para 5xx/timeout/p99.

5) Atributos e taxonomia (mínimo obrigatório)

Geral:
  • `service. name`, `service. version`, `deployment. environment`, `cloud. region`, `http. route`, `http. method`, `http. status_code`, `db. system`, `db. statement '(encurtado/sem dados),' mensagens. system`, `messaging. operation`, `peer. service`, `net. peer. name`, `tenant. id`, `request. id`.

Editoras de negócios, com cuidado, sem PII. Exemplo: 'order. segment`, `plan. tier`.

6) Cenários assincrônicos, filas e batches

PRODUIR → CONSUMER: Criamos span PRODUCER com contexto; na mensagem, headers (traceparent, baggage). O CONSUMER começa o SERVER/CONSUMER span com link para o PRODUCER (se não houver hierarquia rigorosa).
Fan-out: uma entrada - muitos outpouts → spans filho ou links.
Batch: O CONSUMER lê um pacote N de mensagens → um span com 'events' para cada messageId ou 'links' em n contextos individuais.
DLQ: span 'mensaging separado. dlq. publish` с reason и count.
Retrai: 'event: retry' + 'retry. count 'atributo; de preferência, um novo CHILD-span para tentar.

7) Integração com logs e métricas

Logi escrevendo JSON com 'trace _ id '/' span _ id' → de span click para os logs.
As métricas RED/USE contêm exemplars → dos picos p99 vão para os «maus» spans.
As pistas geram técnicas (erros de dependência) e sinais de negócios (conversão) através de eventos.

8) Desempenho e custo

Semente e trottling de eventos.
Abreviando a radicalidade dos atributos (sem «user _ id »/' sessions _ id 'como label!).
Compactação/batucação pelo exportador; os limites dos horários de exportação.
Armazenamento: quentes de 1 a 7 dias, mais longe, máquinas/apenas trailers «problemáticos».
As categorias de desperdício são coletores, índices, armazenamento, egress.

9) Segurança e privacidade

In Transit: TLS 1. 3/mTLS kollektor↔agenty; At Rest: criptografia, chaves próprias (consulte Criptografia In Transit/At Rest).
PII e segredos: não escrevemos em atributos/eventos; Tocinização/camuflagem no projector.
Multiplicidade de 'tenant. id 'como recurso discográfico e isolamento de espaços, políticas de leitura; Auditar o acesso a vestígios (consulte Auditoria e registros imutáveis).

10) Esquemas de implementação (arbitragem)

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 Colector - tail sampling (fatia)

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ência de contexto (conceito)

PRODUIR: Adicionando headers 'traceparent', 'baggage'.
CONSUMER: Se a mensagem iniciar um novo fluxo - um novo SERVER/CONSUMER-span c link para um contexto de headers.

11) Data/ETL и ML

Para os batch piplins: span por batch/partition com 'datapós. urn`, `run. id`, `rows. in/out`, `freshness. lag`.
Para ML: treino span/inferência, versão modelo, latency, função store.
Ligação com Lineage: 'run. id` и `dataset. urn' permitem que o trailer passe para o gráfico de origem dos dados.

12) Plataforma de rastreamento SLO

Disponibilidade ingestão: ≥ 99. 9%

Atraso de indexação: ≤ 60 com p95

Revestimento head-sample: ≥ 5-10% rotas-chave

100% de preservação de trailers com status de ERRO e latency> limiar do diretório «caminhos críticos»

Alertas da plataforma: crescimento de dropas, temporizações de exportação, ligas de indexador, superaquecimento da radicalidade.

13) Testes e verificação

Contrato de rastreamento CI: disponibilidade de spans em endpoentes-chave, atributos obrigatórios, o 'traceparent' correto passa por uma passarela/proxy.
Sintético/rum-amostras: Coletam trailers do lado de fora.
Chaos/incidentes: desligamento de dependências, verificação de que o tail-sempler «seleciona» erros.
Smoke em venda: após o lançamento - «se há spans» e exemprar → trace.

14) Folhas de cheque

Antes de vender

  • O W3C Trace Context será introduzido em todo o lado; para mensagens - headers.
  • O head-semente básico está incluído; as regras tail para 5xx/p99 estão configuradas.
  • Atributos obrigatórios: road, method, status, service. version, tenant. id.
  • Logi JSON com 'trace _ id '/' span _ id', métricas com exemplars.
  • Agentes de saúde PII; encriptação no caminho/em paz; Políticas de acesso.
  • Dashboards: «caminho crítico», «erros de dependência», «retais/temporizações».

Operação

  • Revisão mensal da radicalidade dos atributos; quotas.
  • Sintonizar tail-sempling por SLO (menos ruído, todos quentes).
  • RCA de treinamento com transição de métrica → exemprar → trade → logs.
  • Verificação de revestimentos de filas, DLQ, ETL-jobs.

15) Runbook’и

RCA: p99 por/pay

1. Abra RED-dashboard; do p99 bin ir para o exemplar para o trace.
2. Encontrar um cliente span «estreito» (por exemplo, 'gateway. call'), verificar 'retry. count ', temporizadores.
3. Comparar versões de serviço/dependência, região/zona.
4. Incluir a degradação (resposta de armazenamento/limite de RPS), notificar os proprietários do vício.
5. Após a fix, RCA e tíquetes para otimização.

DLQ saliência

1. Filtro de trilhas por 'mensaging. dlq. publish`.
2. Verificar razões (events), correlacionar com o lançamento.
3. Executar reprocess, aumentar temporariamente o tempo do CONSUMER, notificar os donos do downstream.

16) Erros frequentes

Não há vislumbre de contexto através de gateways/corretores. Solução: middleware/intersectores, bibliotecas unificadas.
Todos os trailers são 100%. Caro e sem sentido - use tail-sempling.
Logs sem 'trace _ id'. Perde a correlação → MTTR ↑.
PII em atributos. Disfarce/torneie; guarde apenas o contexto técnico.
Os «mudos» de fundo. Adicione spans em batch/partition e 'run. id`.
Heterogéneo de denominação. Digite um dicionário de nomes e chaves de atributos.

17) FAQ

«Head» ou «tail sempling» é melhor?
Combinação. Head dá camada básica, tail garante que as anomalias/erros são preservadas.

Em: Como traçar através do Kafka sem uma hierarquia rígida?
O: Use span links entre o PRODUCER e o CONSUMER; contexto - em headers.

Em: O que fazer com SQL sensível?
O 'db. statement 'encurtado/normalizado (sem valores) ou' db. operation '+ dimensões/tempo.

Como se relaciona com métricas de negócios?
Ah: Adicione atributos de domínio sem PII (plano/segment), use eventos de «fases de negócios» dentro do span e passe das métricas de conversão para o exemprar.

Matérias relacionadas:
  • Observabilidade: logs, métricas, traçados
  • «Auditar e Registos Imutáveis»
  • Criptografia In Transit/At Rest
  • Origem dos dados
  • «Privacy by Design (GDPR)»
  • «Gestão de segredos»
Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.