GH GambleHub

Observability и trace sampling

1) Perché Osservability

Osservabilità (O11y) risponde a tre domande: cosa succede, perché, come sistemarlo. Si basa sulla 4 del segnale:
  • Metriche (aggregazioni, reazioni rapide);
  • Fogli (parti e forensica);
  • Trailer (causali complete);
  • Profili (CPU/heap/lock content in modalità prod).

La chiave è la correlazione tra segnali + economia della telemetria (sampling, retenze, compressione).

2) Mappa dei segnali e dei principi

2. 1 RED/USE

RED (per API): Rate (RPS), Errors (% 5xx/4xx importanti), Duration (p50/p95/p99).
USA (per le risorse): Utilization, Saturation, Errors (NIC, CPU, disco, code).

2. 2 Invarianti del prodotto

Definisci SLO (ad esempio "p95 latitanza "/v1/payments", 300 ms, budget 0 errato. 5% in 30 giorni"). Gli Alert dovrebbero urlare solo se lo SLO è compromesso o bruciato.

2. 3 Contesto

Implementare W3C Trace Text («traceparent», «tracestate») e baggage per trasferire in modo sicuro gli attributi aziendali (ad esempio, «tenant», «region», senza PII).

3) Architettura di osservabilità

SDK/automazione: OpenTelemetry (OTel) nei servizi (HTTP/gRPC/DB/client).
OTEL RACCOGLITORE COME PNEUMATICO: RICEZIONE E ARRICCHIMENTO DI ESPORTAZIONE (PROMETHEUS, TEMPO/JAEGER, LOKI/ELK, ).

Storage:
  • Metriche: Prometheus/Mimir/VictoriaMetrics;
  • Trainer: Tempo/Jaeger/Zipkin;

Profili: Pyroscope/Parca.
Correlazione: grafici di servizi, exemplars, passare da grafica p99 a particolare trance.

4) Sampling tracking: strategie

4. 1 Head-based sampling (all'ingresso, prima della conoscenza dell'esito)

Implementazione semplice ed economica (SDK/ingress).
Contro: può ignorare errori rari o query lente.

Quando: RPS elevati, budget rigorosi, è necessaria una quota prevedibile (ad esempio 1-5%).

4. 2 Tail-based sampling (all'uscita, conoscendo l'esito)

La decisione viene presa al Collettore dopo il completamento dello span.
È possibile selezionare le anomalie: errori, p99, rotiti/tenenti specifici.
Contro - buffering, più complicato e costoso.

Quando le: hanno bisogno di roulotte «significative» a un costo moderato.

4. 3 Modello combinato

Globale head 1-5%, più le regole tail: «salvare sempre gli errori/slow-span», «condurre il 50% del traffico canary», «salvare tutte le rotaie di pagamento in caso di incidente».

5) Programmazione dinamica e budget della telemetria

Budget-aware - Trattenere il volume di ≤ N di roulotte/min; se superata - Aumenta le soglie (ad esempio, seleziona solo p99). 5+, error-only).
Rule by route/tenant: endpoint/tenanti importanti - con una quota maggiore.
Schermate adattive: i picchi aumentano temporaneamente la percentuale di errori/lenti.
Riduzione della radicalità: normalizza l'utente-agente, IP/ASN, squash stack traces, maschera i segreti.

6) Confighi (pareri)

6. 1 OpenTelemetry Raccoglitore - tail-sampling (yaml-frammento)

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 (frammento)

In un'applicazione di scrittura di istogrammi, aggiungete explars con'trace _ id '. Al Grafana, i click sugli aghi vanno in trance.

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

6. 3 Loki - Riduzione del costo dei loghi

Le etichette sono solo stabili ("service", "eng", "region", "route _ class').
Alta cardinalità (richiest _ id, user _ id) - in payload, ma con redaction.
Sempre'corretti di successo ', salvare tutti gli errori/avvisi.

6. 4 Jaeger/Tempo - Riscossione e indice

Conservare le roulotte crude 3-7 giorni, le unità/simmetrie più a lungo.
Includere parquet/blocks in uno storage a basso costo (S3-compatibile) e gli indici sono compatti.

7) Simulazione di tracking

7. 1 Denominazione e attributi

`service. name`, `service. version`, `deployment. environment`.
`http. method`, `http. route`, `http. target`, `http. status_code`, `net. peer. name`.
Attributi aziendali senza PII: «tenant», «region», «payment _ provider», «game _ id».

7. 2 Eventi e collegamenti

Span events: punti importanti (inizio transazione DB, retrai, circuito aperto, cache miss).
Links: comunicazione zapros→vebkhuk/sobytiye; utile per EDA e outbox/inbox.

7. 3 Varianti (exemplars)

Aggiungi agli istogrammi latency/size esempi con'trace _ id ': navigazione "dalla metrica" alla trace "in un clic.

8) Metriche: quali e come

8. 1 Tecnica

RED per percorsi/tenenti/provider (PSP, KYC).
Пулы: `db_connections_in_use`, `http_client_in_flight`, `queue_depth`.
Stabilizzazione: retries, timeouts, circuito open/half-open, rate-limit hits.
Go/Java/Python runtime: pausa GC, heap, safepoint, ritardi GIL.

8. 2 Metriche aziendali

Registrazione/login/depositi/conclusioni, conversione, fallimenti 3DS/KYC, conformeback-ratio.
File importanti: time-to-wallet, success-rate payout.

8. 3 Cardinalità e conservazione

Istogrammi con buckets evidenti (ad esempio, '[50,100,200,300,500,1000,2000] ms').
Evitare etichette ad alta cardinalità (raw user _ id, sollest _ id) - Porta nei fogli/roulotte.

9) Loghi: standard e correlazione

Formato: JSON + chiavi necessarie («timestamp», «level», «messaggistica», «trace _ id», «span _ id», «service», «env»).
Modifica: maschera PAN, token, PII.
Sempling: 100% per «errore/warn», 5-20% per «info» su percorsi «rumorosi».
Aggancia i trailer attraverso trace _ id. Le righe di → sono «pivot» in trance e viceversa.

10) Profiling in vendita

Abilita continuous profiling (Pyroscope/Parca) per CPU/heap/alloc/locks.
Correlare i picchi p99 con i vetri caldi; Conserva 7-14 giorni.

11) Alerting SLO/bilancio sbagliato

«Budget errato più veloce di X %/ora».
Sintomi, non cause: alerti al livello del cliente (RUM/edge o per-rout) piuttosto che alla CPU.
Multi-window, multi-burn rate: 2% in 1 ora e 5% in 6 ore - due condizioni.
Silenzio in caso di degradazione pianificata: spostamento delle soglie con flag fit/canarino.

12) Costo e ritocco

Quote per volumi: N TB/mes, logi - caldo 3-7 giorni, freddo S3 30-90 giorni, metriche - downsampling (1 min-5 min-1 h).
Tail-rule riducono il volume x 10-x 100, mantenendo errori/lenti.
I segnali a minor costo sono le metriche; il valore più alto è quello delle roulotte e dei profili.

13) Antipattern

«Il 100% delle roulotte» → l'esplosione del costo, il rumore e i freni.
Fogli in formato libero senza chiave/maschera.
Metriche con etichette infinite (user _ id/ip/full UA).
No 'traceparent'/' baggage' - non è possibile una corellazione.
Alert su CPU/heap invece di una chat SLO che brucia senza alcun beneficio.
Samplace «rand 1%» senza priorità di errori/slow - perde valige preziose.

14) Esempi di dashboard (scheletri)

API Overview: RPS, errato-rate per classe, latency p95/p99 (explars cliccabili), top root.
Release/Canary - Confronta le metriche della vecchia/nuova versione, outlier-rate, open-circuits, retries.
PSP/KYC: success-rate per provider, latency e guasti, correlazione con errori payout.
Infra: USE risorse, code saturation, network drops.

15) Specificità iGaming/finanza

Percorsi critici (depositi/conclusioni): trailing 100% solo in caso di incidenti o finestre limitate; in modalità regolare - tail «tutti con un errore/latenza prolungata».
Regione/tenant: aggiungi «tenant», «jurisdiction», «brand» al baggage; costruite un SLO di giurisdizione.
Antifrod/bot-filtro: metriche e trailer delle soluzioni Risk API (allow/deny/challenge), challenge-pass-rate, velocity-hits.
Controllo/compilazione: conservare il minimo necessario, senza PII; registri invariati - in un tracciato separato.

16) Assegno-foglio prod-pronto

  • Segnalazione completa ('traceparent', 'baggage'), correlazione logi/metriche/trailer.
  • OTTEL Raccoglitore con tail-sampling (errors/slow/root importanti) + probilistic default.
  • RED/USE metriche, buckets evidenti, exemplars → il passaggio al trance.
  • SLO e alerting con budget errato (due linee temporali).
  • Regolamenti di reticenza e budget della telemetria; downsampling metriche; cold storage per i logi.
  • Loga JSON standardizzato, redazione PII/segreti.
  • Profiling in vendita incluso; I dashboard degli stakeholder per l'incidente.
  • Canaretti e paragoni delle versioni; rilascio senza «zone cieche».
  • Runbook: come aumentare temporaneamente la quota di sampling durante l'incidente.
  • Documentazione di Nayming attributi/etichette e proibizione high-cardinality.

17) TL; DR

Costruisci un'osservazione intorno alla correlazione: le metriche RED/USE → exemplars → le roulotte del →/profile. Gestisci il costo attraverso la simulazione combinata: piccole regole head% + tail (errori, lenti, importanti percorsi/tenenti). Alert è sulla SLO e sul budget degli errori. Tenete la reticenza e la cardinalità sotto controllo, usate OTel raccoglitore come «sistema nervoso centrale». Per le vie di pagamento/giurisdizione - telemetria prioritaria e rigorosa igiene dei dati.

Contact

Mettiti in contatto

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

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