GH GambleHub

Observability и trace sampling

1) Por que o Observabilidade

Observabilidade (O11y) responde a três perguntas: o que acontece, o porquê, como corrigir isso. Baseia-se no sinal:
  • Métricas (unidades, reagem rápida);
  • Logi (detalhes e forense);
  • Trailers (relações de causa e efeito de passagem);
  • Os ficheiros (CPU/heap/lock contence em modo prod).

Chave: correlação entre sinais + economia de telemetria (samplicação, reticências, compressão).

2) Mapa de sinais e princípios

2. 1 RED/USE

RED (para API): Rate (RPS), Errors (% 5xx/4xx importantes), Duration (p50/p95/p99).
USE (para recursos): Usilization, Saturation, Errors (NIC, CPU, disco, filas).

2. 2 Invariantes do produto

Defina o SLO (por exemplo, "p95 latência '/v1/payments '≤ 300 ms, orçamento errado 0. 5% em 30 dias"). Os Alerts só devem gritar quando o SLO estiver perturbado ou queimado.

2. 3 Contexto

Implemente o W3C Trace Context ('traceparent', 'tracestate') e o baggage para transferir os atributos/negócios com segurança (como 'tenant', 'region', sem PII).

3) Arquitetura de observabilidade

SDK/instalação automática: OpenTelemetry (OTel) em serviços (HTTP/gRPC/DB/clientes).
OTel Colector como pneu: recepção → enriquecimento → samplicação → exportação (Prometheus, Tempo/Jaeger, Loki/ELK, ClickHouse).

Armazéns:
  • Métricas: Prometheus/Mimir/VictoriaMetrics;
  • Trailers: Tempo/Jaeger/Zipkin;
  • Logi: Armazenamento Loki/ELK/Vector→S3+deshevoye;
  • Perfil: Pyroscope/Parca.
  • Correlação: gráficos de serviços, exemplars, transição do gráfico p99 para um trade específico.

4) Sampling trailing: estratégias

4. 1 Head-based sampling (na entrada, antes do conhecimento do resultado)

Implementação simples e barata (em SDK/ingress).
Contras: pode omitir erros raros ou consultas lentas.

Quando: RPS alto, orçamentos rigorosos, é necessária uma proporção previsível (por exemplo, 1% a 5%).

4. 2 Tail-based sampling (na saída, sabendo o resultado)

A decisão é tomada no Colector após a conclusão do span.
É possível selecionar as anomalias, como erros, p99, rotas e tenentes específicos.
Contras: tampão, mais difícil e mais caro.

Precisamos de trailers «significativos» a um custo moderado.

4. 3 Modelo combinado

Head global 1-5%, além de regras tail: «manter sempre erros/slow-span», «samplicar 50% do tráfego canary», «salvar todos os trailers de rotas de pagamento em um incidente».

5) Samplicação dinâmica e orçamento de telemetria

Budet-aware: reter o volume de ≤ N trails/min; quando excedido - aumentar liminares (por exemplo, selecionar apenas p99. 5+, error-only).
Rulas by rota/tenant: endpoint/tenentes importantes - com maior proporção.
Janelas adaptativas: Os saltos → aumentar temporariamente a proporção de erros/lentidão.
Redução da radicalidade: normalize o usuário-agente, IP/ASN, squash stack traces, disfarce os segredos.

6) Configs (Arbitragens)

6. 1 OpenTelemetry Colector - tail-sampling (yaml-fragmento)

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

processors:
batch: { send_batch_size: 8192, timeout: 2s }
tail_sampling:
decision_wait: 5s num_traces: 100000 expected_new_traces_per_sec: 5000 policies:
- name: always-error type: status_code status_code: { status_codes: [ERROR] }
- name: slow-endpoints type: latency latency: { threshold_ms: 300 }      # p95 цель
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/v1/payments", "/v1/payouts"] }
- name: tenant-eu1 type: string_attribute string_attribute: { key: tenant, values: ["eu-1"] }
- name: probabilistic-default type: probabilistic probabilistic: { sampling_percentage: 5. 0 }

exporters:
otlphttp/tempo: { endpoint: http://tempo:4318 }
prometheus: { endpoint: "0. 0. 0. 0:9464" }

service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tail_sampling]
exporters: [otlphttp/tempo]

6. 2 Prometheus - exemplars (fatia)

No aplicativo ao gravar histogramas, adicione exemplars com 'trace _ id'. No Grafana, os cliques de agulhas são conduzidos a trens.

yaml scrape_configs:
- job_name: api scrape_interval: 10s honor_labels: true static_configs: [{ targets: ["api:9100"] }]
exemplar_limit: 10

6. 3 Loki - redução do custo dos logs

As marcas são apenas estáveis ('service', 'eng', 'region', 'road _ class').
Alta cardealidade (request _ id, user _ id) - em payload, mas com redação.
Sempre em informações de sucesso, guarde todos os erros/avisos.

6. 4 Jaeger/Tempo - Retensio e índice

Guarde trailers crus de 3 a 7 dias, equipamentos/simetria por mais tempo.
Inclua parquet/blocks em armazenamento barato (S3-compatível) e os índices são compactos.

7) Simulação de trailing

7. 1 Denominação e atributos

`service. name`, `service. version`, `deployment. environment`.
`http. method`, `http. route`, `http. target`, `http. status_code`, `net. peer. name`.
Atributos empresariais sem PII: 'tenant', 'region', 'payment _ provider', 'game _ id'.

7. 2 Eventos e ligações

Span events: pontos importantes (início da transação DB, retrai, circuito aberto, cachê miss).
Links: comunicação zapros→vebkhuk/sobytiye; útil para EDA e outbox/inbox.

7. 3 Instâncias (exemplars)

Adicione a histogramas latency/size exemplos com 'trace _ id': navegação «de métrica → para trace» em um clique.

8) Métricas: quais e como

8. 1 Técnico

RED para roteiros/tenantes/provedores (PSP, KYC).
Пулы: `db_connections_in_use`, `http_client_in_flight`, `queue_depth`.
Estabilização: retries, timeouts, circuito open/half-open, rate-limit hits.
Go/Java/Python runtime: pares GC, heap, safepoants, atrasos GIL.

8. 2 Métricas de negócios

Registros/logins/depósitos/conclusões, conversões, falhas 3DS/KYC, chargeback-ratio.
Fichas importantes: time-to-wallet, sucess-rate payout.

8. 3 Cardinalidade e armazenamento

Histogramas com buckets explícitos (por exemplo, '[50,100,200,300,500,1000,2000] ms').
Evite marcas de alta vitalidade (raw user _ id, request _ id) - levar para os logs/trailers.

9) Logs: padrões e correlação

Formato: JSON + chaves necessárias ('timestamp', 'level', 'mensagem', 'trace _ id', 'span _ id', 'service', 'eng').
Editar: disfarce PAN, tokens, PII.
Sempling: 100% para 'erro/warn', 5-20% para 'info' em caminhos 'ruidosos'.
A ligação aos trailers é através de 'trace _ id'. Linhas de logos → «pivot» em trade e vice-versa.

10) Profiling em venda

Inclua o continuous profiling (Pyroscope/Parca) para CPU/heap/alloc/locks.
Correlacione os picos p99 com vidros quentes; Guardem 7-14 dias.

11) Alerting SLO/orçamento errado

Alertas SLO: «Orçamento errado gasto mais rápido que X %/hora» (alertas de previsão).
Sintomas, não razões: alerte para o nível do cliente (RUM/edge ou para-rout), não para o CPU.
Multi-window, multi-burn rate: 2% por 1h e 5% por 6h - duas condições.
Silêncio em degradações programadas - mudança de liminares em bandeiras de fiche/canário.

12) Custo e retenção

Quotas de volume: trailers ≤ N TB/mes, logs - quente 3-7 dias, frio S3 30-90 dias, métricas - downsampling (1 min → 5 min → 1 h).
Tail-rulas reduzem o volume x 10- x 100, mantendo erros/lentos.
Os sinais de menor custo são métricas; Os trailers «certos» e os perfis são os mais valiosos.

13) Antipattern

«100% de trailers sempre» → explosão de custo, barulho e freios.
Logs em formato livre sem chave/disfarce.
Métricas com editoras infinitas (user _ id/ip/full UA).
Não 'traceparent '/' baggage' - a corelação não é possível.
Alertas para CPU/heap em vez de SLO - bate-papo «queimado» sem utilidade.
Samplear «rand 1%» sem prioridade de erro/slow - perde valiosas malas.

14) Exemplos de dashboards (esqueletos)

API Overview: RPS, erro-rate por classe, latency p95/p99 (exemplars clicáveis), top routs.
Release/Canary: comparação entre as métricas da versão antiga/nova, outlier-rate, open-circuits, retries.
PSP/KYC: sucess-rate por provedores, latency e falha, correlação com erros payout.
Infra: USE em recursos, fila de saturação, rede drops.

15) Especificidades do iGaming/Finanças

Caminhos críticos (depósitos/conclusões): Trailing 100% somente em casos de incidentes ou janelas limitadas; em tempo integral - tail «tudo com erro/latência prolongada».
Região/tenante: adicione «tenant», «jurisdicção», «brand» ao baggage; construa o SLO sob jurisdição.
Antifrod/bot filtro: métricas e trailers de soluções Risk API (allow/deny/challenge), challenge-pass-rate, velocity-hits.
Auditoria/Complacência: armazenar o mínimo necessário, sem PII; os registros imutáveis estão em um circuito separado.

16) Folha de cheque pró-prontidão

  • Enaltecimento completo ('traceparent', 'baggage'), correlação de logs/métricas/trailers.
  • OtTel Captor com tail-sampling (errors/slow/rots importantes) + protabilistic default.
  • RED/USE métricas, buckets explícitos, exemplars → transição para trance.
  • SLO e alerting de orçamento errado (duas linhas de tempo).
  • Regulamentos de retenção e orçamento de telemetria; downsampling métricas; cold armazenamento para logs.
  • Logos JSON padrão, redação PII/segredos.
  • O perfil da venda está incluído; dashboards de estagiários quentes para o incidente.
  • Canários e comparações de versões; uma edição sem «zonas cegas».
  • Runbook: como elevar temporariamente a participação do sampleamento no incidente.
  • Documentação de naiming atributos/marcas e proibição de high-cardinality.

17) TL; DR

Construa a observabilidade em torno da correlação: métricas RED/USE → exemplars → trails → logs/perfis. Gerencie o custo através do sampleamento combinado: um pequeno head% + regras tail (erros, lentidão, rotas importantes/tenentes). As alertas são para o SLO e para o orçamento dos erros. Mantenha a reticência e a cardinalidade sob controle, use OTel Colector como «sistema nervoso central». Para os caminhos de pagamento/jurisdição - telemetria prioritária e higiene de dados rigorosa.

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.