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.
- 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.
- 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»