GH GambleHub

Distributed Tracing

(Secção Tecnologia e Infraestrutura)

Resumo curto

Os traçados distribuídos respondem a uma pergunta sobre onde e por que é que se perde tempo no caminho de consulta através da entrada, API, filas, banco de dados, provedores externos (PSP/estúdios de jogos). OpenTelemetry (OTel) é um padrão aberto SDK/agentes/protocolo que reúne trailers, métricas e logs. Em iGaming é uma ferramenta básica para manter p95/p99, localizar rapidamente problemas de pagamento e identificar «estreitos» antes dos torneios de pico.

1) Conceitos OTel

Trace é o caminho completo da transação (depósito, taxa, conclusão).
Span é uma área de trabalho (HTTP-handler, consulta SQL, chamada de fila/provedor).
Atributes - valor-chave com detalhes ('net. peer. name`, `db. system`, `psp. route`).
Events - Eventos instantâneos (retrações, timeout, erro de dinheiro).
Links - conexão com outras pistas (importante para async/queue).
Resource - metadados de processo: 'service. name`, `service. version`, `deployment. environment`, `cloud. region`.

2) Divulgação do contexto

Use o W3C Trace Context:

traceparent: 00-<trace_id>-<span_id>-01 tracestate:...

Opcional - baggage para chaves seguras (por exemplo, 'tenant', 'road'), não coloque PII lá.

Onde derrubar o contexto: porta de API → RPC interno → produtor na fila → consoante → HTTP externo (PSP/Provedores).

3) Convenções semânticas (mínimo obrigatório)

HTTP/RPC: `http. method`, `http. route`, `http. status_code`.
DB/dinheiro: 'db. system` (`mysql`/`postgresql`/`redis`), `db. statement '(camuflado),' db. operation`.
Filas de espera: 'mensaging. system` (`kafka`/`rabbitmq`), `messaging. destination`, `messaging. operation` (`send`/`process`).
Pagamentos: 'psp. route`, `psp. provider`, `payment. id '(pseudónimo),' amount ',' currency '.
iGaming domínio é 'game. provider`, `game. session_id` (hash), `player. id_hash`.

Taxonomia unificada → comparabilidade de dashboards e rápida busca de causas.

4) Sampling: como não se afogar nos dados

Head-based (na entrada da consulta)

Simples, barato; adequado para o fluxo geral.
Menos - você pode perder «interessantes» pistas lentas/erradas.

Tail-based (в Collector)

A decisão é tomada após a conclusão dos spans, com apenas erros/segmentos lentos/importantes (pagamentos VIP/pagamentos).
Ideal para carga de prod, reduz muito o custo com alta informabilidade.

Híbrido recomendado:
  • Head: 5-10% para revestimento de fundo.
  • Tail: 100% erros + p95 + roteiros de pagamento/canários lentos.

5) Topologias OpenTelemetry Colector

Agente-saidcar (em cada nó/pod): recepção local, tampão mínimo, exportação para agregador.
Gateway (cluster): tail-sampling, roteiro, enriquecimento, exportação para Tempo/Jaeger/Zipkin/OTLP.

Exemplo: tail-sampling (fatia YAML)

yaml processors:
tailsampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code:
status_codes: [ ERROR ]
- name: slow_p95 type: latency latency:
threshold_ms: 250
- name: payments type: string_attribute string_attribute:
key: service. name values: [ "payments-api", "payments-worker" ]

6) Correlação com métricas e logs

Adicione 'trace _ id '/' span _ id' a cada entrada de logs.
Mantenha as métricas de latência como histogramas e inclua exemplars - referência ao representativo 'trace _ id' para «saltar» de um booket p95 para um traço específico.
Anotações de lançamento (Git SHA, versão do elenco) - como events/editoras.

7) Ferramentas (idiomas e agentes automáticos)

Go (manual + auto)

go tp:= sdktrace. NewTracerProvider(
sdktrace. WithBatcher(exporter),
sdktrace. WithResource(resource. NewWithAttributes(
semconv. SchemaURL,
semconv. ServiceName("payments-api"),
)),
)
otel. SetTracerProvider(tp)

ctx, span:= tracer. Start(ctx, "Deposit")
defer span. End()
span. SetAttributes(
attribute. String("psp. route","pspX"),
attribute. String("currency","EUR"),
)

Java

Agente automático '-javaagent: opentelemetry-javaagent. jar ', config por meio de env (' OTEL _ SERVICE _ NAME ',' OTEL _ EXPEDIR _ OTLP _ ENDPOINT ').
Manualmente - Anotações/ferramentas de localização de arco (pool JDBC, em dinheiro).

Node. js / Python

Ferramenta auto com SDK + plugins (Express/FastAPI/celery).
Para as filas, os embrulhos da produtora/consoante para colocar 'mensagens' e links.

8) Filas e async: spans corretos

Produtor ('send'): span para envio para top/fila.
Consumer ('processo'): novo span de processamento de mensagem com link para o produtor span (manter o causal sem 'trace _ id' geral).
Atributos: 'mensaging. kafka. partition`, `messaging. rabbitmq. routing_key`, `messaging. message_id`.
Em retraias, event 'retry', contador de tentativas.

9) BD/dinheiro e N + 1

Ative o driver de trailer do BD, agrupe as solicitações idênticas em batches.
Para Redis/cachê - atributos 'cachê. hit`/`cache. miss`.
Leve os pedidos pesados para spans individuais - vê onde está o p99.

10) Provedores externos: PSP/estúdios de jogos

Vire os clientes HTTP: 'psp. provider`, `psp. route`, `timeout_ms`, `attempt`.
Logue códigos/tipos de erro, mas não PII (número de cartão, tokens).
Compare os estúdios/rotas por 'duration', 'error-rate'.

11) Frontend e RUM

OTel Web SDK: `page_view`, `resource_load`, `xhr`.
Coloque 'traceparent' em um backend para guiar o caminho do usuário de UI → API → BD.
Segmentação por geo/provedor de rede - editoras opcionais.

12) Segurança e PII

Disfarce os campos ('db. statement 'com edição), hasteie' player _ id '.
Zonas de dados: 'pii = true', 'region = EU/TR/LATAM'.
Controle de acesso a trailers de pagamento (rol-baseado).
WORM/Retenção: prazo de armazenamento para vestígios sensíveis, remoção por política.

13) Desempenho e custo

Tail-sampling política: «erros + lentos + pagamentos + lançamentos canários».
Downsampling histograma métricas, dedução agressiva de logs.
Limite de radicalidade: não encaixar 'user _ id' como uma editora de métrica.
Tampões/batches em Colector, compressão OTLP.

14) Dashboards e análise

Serviço map: dependências de serviços, coloração por erro/latência.
Release compare: Revalidação de canário de vs estável (p95, error-rate, payments 1962).
Top slow traces: na rota '/deposit ', corte por PSP/região.
Queue lag: pistas com atraso profundo no consumo.

15) Exemplos de configuração do Captor

Pipelines (métricas/trens/logs, fatia)

yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }

processors:
batch:
memory_limiter:
limit_mib: 1024 spike_limit_mib: 256 attributes/payments:
actions:
- key: "psp. provider"
action: insert value: "pspX"

exporters:
otlp/traces: { endpoint: tempo:4317, tls: { insecure: true } }
otlp/metrics:{ endpoint: prometheus-otlp:4317, tls: { insecure: true } }
otlp/logs:  { endpoint: loki-otlp:4317, tls: { insecure: true } }

service:
pipelines:
traces:
receivers: [ otlp ]
processors: [ memory_limiter, batch, tailsampling ]
exporters: [ otlp/traces ]
metrics:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/metrics ]
logs:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/logs ]

16) Runbooks (cenários típicos)

A) Crescimento p99 em 'payments-api'

1. Abrir «Top slow traces» → cair em spans BD/PSP.
2. Se o problema PSP for traduzir a rota, ative os retais/temporizações.
3. Verificar a fila de 'withdrawals' (lag), aumentar os consoantes.

B) Erros 5xx após lançamento

1. Filtro por 'service. version`.
2. Comparar estável/canário; Encontrar espólios em 'psp. route`.
3. Congelar promoções, reverter (ver Estratégias de lançamento/Rolbacks).

C) Suspeita de N + 1

1. Trailers com um grande número de spans DB curtos.
2. Ativar agregação/joyne, adicionar camada de dinheiro.

17) Folha de cheque de implementação

1. Inclua OTel SDK e atributos de Resource unificados ('service. name`, `env`, `region`).
2. Acesse o W3C Trace Context através de todas as camadas e filas.
3. Conjunto mínimo de atributos semânticos (HTTP/DB/queue/PSP).
4. Tail-sampling: erros, p95 +, pagamentos, canhão.
5. Logs com 'trace _ id '/' span _ id', métricas com exemplars.
6. Dashboards: service map, release compare, payments flow.
7. Políticas PII: camuflagem, zonas, papéis, retenções.
8. Teste/carga: verificação de correlação e completeness training antes dos picos.
9. Geração automática de links runbook em alertas.
10. Um relatório sobre o custo da telemetria e da radicalidade.

18) Antipattern

Traçados «só na entrada» sem BB/filas → não são úteis.
A falta de instrução na async → «rompem» as cadeias de causalidade.
Sampling é aleatório 1% sem lógica tail → não apanhamos lentidão/erro.
Logs sem 'trace _ id' → não há correlação de passagem.
PII cru em atributos/logs → os riscos da complacência.
A cardinalidade «para o teto» (user/sessão como editoras métricas) → a explosão de valor.

Resumo

transforma a observabilidade a partir de um conjunto de ferramentas separadas em linguagem de desempenho. Quando o contexto é explorado corretamente, semântica cuidadosa, tail-sampling e ligando «métrica ↔ pista ↔ logi», o comando iGaming mantém o p95/p99 sob controle, isolando rapidamente os pontos estreitos (BD, filas, PSP) e soltando com segurança lançamentos mesmo em picos de tráfego.

Contact

Entrar em contacto

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

Telegram
@Gamble_GC
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.