GH GambleHub

Observabilitate и prelevarea de probe

1) De ce observabilitatea

Observabilitatea (O11y) răspunde la trei întrebări: ce se întâmplă, de ce, cum să o remediați. Se bazează pe 4 semnale:
  • Metrica (agregate, reacționează rapid);
  • Jurnale (detalii și criminalistică);
  • Urme (relații transversale cauză-efect);
  • Profiluri (CPU/heap/lock contention in prod mode).

Cheie: corelație între semnale + economie telemetrică (eșantionare, retenție, compresie).

2) Harta semnalului și principiile

2. 1 RED/UTILIZARE

RED (pentru API): Rată (SPR), Erori (% 5xx/4xx important), Durată (p50/p95/p99).
UTILIZARE (pentru resurse): Utilizare, saturație, erori (NIC, CPU, disc, cozi).

2. 2 Invarianți de produs

Definirea unui SLO (ex. "p95 latență "/v1/plăți" ≤ 300ms, buget eronat 0. 5% în 30 de zile"). Alertele ar trebui să „țipe” numai atunci când SLO este încălcat sau ars.

2. 3 Context

Implementarea contextului de urmărire W3C („traceparent”, „tracestate”) și a bagajelor pentru a transfera în siguranță aceste atribute/atribute de afaceri (de ex. „Ten”, „regiune”, nu PII).

3) Arhitectura de observabilitate

SDK/auto-instrumentare: OpenTelemetry (OTel) în servicii (HTTP/gRPC/DB/clienți).
OTel Collector ca autobuz: recepție → îmbogățire → eșantionare → export (Prometheus, Tempo/Jaeger, Loki/ELK, ClickHouse).

Seifuri:
  • Metrics: Prometheus/Mimir/VictoriaMetrics;
  • Trasee: Tempo/Jaeger/Zipkin;
  • Busteni: stocare Loki/ELK/Vector→S3+deshevoye;
  • Profile: Piroscop/Parca.
  • Corelație: grafice de serviciu, exemplare, trecerea de la graficul p99 la o anumită urmă.

4) Urmărirea eșantionării: Strategii

4. 1 Prelevare de probe pe bază de cap

Implementare simplă și ieftină (în SDK/ingress).
Contra: Poate pierde erori rare/interogări lente.

Când: SPR ridicat, bugete stricte, este necesară o cotă previzibilă (de exemplu, 1-5%).

4. 2 Prelevarea de probe pe bază de coadă

Decizia este luată în Collector după sfârșitul intervalului.
Anomalii pot fi garantate pentru a fi selectate: erori, p99, rutele specifice/chiriași.
Contra: tamponare, mai greu și mai scump.

Când: trasee „semnificative” sunt necesare la costuri moderate.

4. 3 Modelul combinat

Capul global 1-5%, plus regulile cozii: „salvați întotdeauna erori/deschideri lente”, „eșantion 50% din traficul canar”, „salvați toate urmele căilor de plată într-un incident”.

5) Buget dinamic de eșantionare și telemetrie

Conștient de buget: volum de menținere ≤ N trasee/min; dacă este depășit, ridicați pragurile (de exemplu, selectați numai p99. 5 +, numai eroare).
Reguli după rută/chiriaș: puncte finale importante/chiriași - cu o pondere mai mare.
Ferestre adaptive: explozii → crește temporar rata de eroare/lent.
Reducerea cardinalității: normalizarea utilizatorului-agent, IP/ASN, urme de stivă de squash, secrete de mască.

6) Configurații (referințe)

6. 1 OpenTelemetry Colector - prelevarea de probe (yaml-fragment)

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 Prometeu - exemplare (fragment)

În aplicație, atunci când înregistrați histograme, adăugați exemplare cu 'trace _ id'. În Grafana, clicurile pe „ace” duc la o urmă.

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

6. 3 Loki - reducerea costului jurnalelor

Etichetele sunt stabile ("service", "env", "region", "route _ class').
Cardinalitate ridicată (request_id, user_id) - în sarcină utilă, dar cu redactare.
Eșantion „de succes” InfoLogs, salvați orice erori/avertismente.

6. 4 Jaeger/Tempo - retenție și indice

Depozitați trasee brute timp de 3-7 zile, agregate/simetrii pentru mai mult timp.
Activați parchet/blocuri în stocare ieftină (S3-compatibil), indicii sunt compacte.

7) Simulare urmărire

7. 1 Denumire și atribute

"service. nume „,” serviciu. versiune ',' implementare. mediu ".
'http. metoda „,” http. ruta ',' http. țintă „,” http. status_code', "net. peer. nume ".
Atribute de afaceri fără PII: 'chiriaș', 'regiune', 'payment _ provider', 'game _ id'.

7. 2 Evenimente și conexiuni

Evenimente Span: puncte importante (începutul tranzacției DB, retray, circuit deschis, cache miss).
Link-uri: comunicare zapros→vebkhuk/sobytiye; util pentru EDA și outbox/inbox.

7. 3 Instanțe

Adăugați exemple cu 'trace _ id' la histograme de latență/dimensiune: navigare de la → urmă la urme metrice într-un singur clic.

8) Metrics: ce și cum

8. 1 Tehnic

RED pe rută/chiriaș/furnizor (PSP, KYC).
Пулы: 'db _ connections _ in _ use', 'http _ client _ in _ flight',' coadă _ adâncime '.
Stabilizare: retries, timeout, circuit deschis/semi-deschis, rata-limită hit-uri.
Go/Java/Python runtime: pauze GC, heap, safepoints, întârzieri GIL.

8. 2 Măsurători de afaceri

Înregistrare/login/a depozite/concluzii, conversie, eșecuri 3DS/KYC, chargeback-ratio.
Caracteristici importante: time-to-wallet, plata ratei de succes.

8. 3 Cardinalitate și depozitare

Histograme cu găleți explicite (de ex. "[50,100,200,300,500,1000,2000 ms').
Evitați marcajele cu cardinalitate ridicată (user_id brută, request_id) - duceți-le la bușteni/trasee.

9) Jurnale: standarde și corelație

Format: JSON + cheile necesare ('timestamp', 'level', 'message', 'trace _ id',' span _ id', 'service', 'env').
Editare: masca PAN, jetoane, PII.

Eșantionare: 100% pentru „eroare/avertizare”, 5-20% pentru „informații” pe căi „zgomotoase”

Legarea la urme - prin "trace _ id'. Log siruri de caractere → „pivot” pentru a urmări și invers.

10) Profilarea în vânzări

Activați profilarea continuă (Piroscop/Parca) pentru procesor/heap/allock/locks.
Corelați vârfurile p99 cu stive fierbinți; păstrați timp de 7-14 zile.

11) Alertă privind bugetul SLO/defectuos

Alerte SLO: „Bugetul eronat este cheltuit mai repede decât X %/oră” (alerte de prognoză).
Simptome, nu cauze: alertă la nivelul clientului (ROM/edge sau per-route), nu la CPU.
Multi-fereastră, multi-arde rata: 2% în 1 oră și 5% în 6 ore - două condiții.
Liniște în timpul degradării planificate: schimbare de prag în timpul steagurilor/canarului.

12) Cost și retenție

Cote de volum: trasee ≤ N TB/lună, busteni - fierbinte 3-7 zile, rece S3 30-90 zile, metrici - sub-eșantionare (1 min → 5 min → 1 h).
Regulile de coadă reduc volumul de × 10- × 100, păstrând eronată/lentă.
Cele mai mici semnale de cost - valori; cu cea mai mare valoare - trasee și profiluri „corecte”.

13) Antipattern

„100% trasee întotdeauna” → o explozie de costuri, zgomot și frâne.
Jurnalele în format gratuit, fără chei/mascare.
Valori infinite ale etichetelor (user_id/ip/full UA).
Nici un „traceparent ”/„ bagaj” - nu poate fi corelat.
Alerte pe CPU/heap în loc de SLO - chat-ul „arde” fără beneficii.
Eșantionarea „aleatoare 1%” fără prioritate de eroare/lent - pierde cazuri valoroase.

14) Exemple de tablouri de bord (schelete)

Prezentare generală API: RPS, rata de eroare în funcție de clasă, latența p95/p99 (exemplarele sunt clicabile), rutele de top.
Release/Canary: compararea metricii versiunii vechi/noi, outlier-rate, open-circuite, retries.
PSP/KYC: rata de succes de către furnizori, latență și eșec, corelație cu erorile de plată.
Infra: UTILIZARE prin resurse, saturație coadă, picături de rețea.

15) Specificul iGaming/Finanțe

Căi critice (depozite/concluzii): 100% urmărire numai pentru incidente sau ferestre limitate; în modul normal - coada „toate cu eroare/latență lungă”.
Regiune/chiriaș: adăugați „chiriaș”, „jurisdicție”, „marcă” la bagaj; construi SLOs de jurisdicție.
Filtru antifrod/bot: valori și urme de soluții API de risc (permite/nega/provocare), challenge-pass-rate, viteza-hit-uri.
Audit/conformitate: păstrați minimul necesar, fără PII; jurnale fixe - într-un circuit separat.

16) Lista de verificare Prod Readiness

  • Propagare end-to-end („traceparent”, „bagaj”), corelație jurnal/metric/urmă.
  • OTel Collector cu prelevare de probe (erori/rutele lente/importante) + implicit probabilistic.
  • RED/UTILIZAȚI măsurători, găleți explicite, exemplare → tranziția la traseu.
  • SLO și alertă bugetară eronată (două termene).
  • Reglementări de telemetrie și buget; downsampling metrics; depozitare la rece pentru bușteni.
  • Jurnal standardizat JSON, PII/secrete de redactare.
  • Profilarea în vânzări incluse; tablouri de bord de „fierbinte” stive pentru incident.
  • Tablouri de bord canare și compararea versiunii; eliberarea fără „pete oarbe”.
  • Runbook: Cum de a crește temporar cota de eșantionare a unui incident.
  • Atribute/documentație de denumire a etichetei și inhibarea cardinalității ridicate.

17) TL; DR

Construiți observabilitatea în jurul corelației: RED/USE → exemplarizează valorile → traseele → jurnalele/profilurile. Gestionați costul prin eșantionare combinată: reguli de cap mic% + coadă (erori, rute lente, importante/chiriași). Alerte - pe SLO și bugetul de eroare. Păstrați retențiile și cardinalitatea sub control, utilizați OTel Collector ca „sistem nervos central”. "Pentru modalități de plată/jurisdicționale - telemetrie prioritară și igienă strictă a datelor.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Telegram
@Gamble_GC
Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.