Observability и trace sampling
1) Observability näme üçin
Observability (O11y) üç soraga jogap berýär: näme bolýar, näme üçin, ony nädip düzetmeli? Ol 4 signala daýanýar:- Metrikler (agregatlar, çalt reaksiýa bildirýärler);
- Loglar (jikme-jiklikler we forensika);
- Traýslar (ahyrky sebäpler);
- Profiller (CPU/heap/lock contention prod modunda).
Açar: signallaryň arasyndaky baglanyşyk + telemetriýa ykdysadyýeti (sample, retens, gysyş).
2) Signallaryň kartasy we ýörelgeleri
2. 1 RED/USE
RED (API üçin): Rate (RPS), Errors (% 5xx/4xx möhüm), Duration (p50/p95/p99).
USE (çeşmeler üçin): Utilization, Saturation, Errors (NIC, CPU, disk, nobatlar).
2. 2 Önümiň üýtgemegi
SLO kesgitläň (mysal üçin "p95 gizlinlik "/v1/payments '≤ 300 ms, nädogry býudjet 0. 30 günde 5%"). Alertler diňe SLO bozulanda ýa-da ýakylanda "gygyrmaly".
2. 3 Kontekst
Şol/iş atributlaryny howpsuz geçirmek üçin W3C Trace Context ('traceparent', 'tracestate') we baggage (mysal üçin 'tenant', 'region', PII-siz) giriziň.
3) Gözegçilik arhitekturasy
SDK/awtoinstrumentation: OpenTelemetry (OTel) hyzmatlarda (HTTP/gRPC/DB/müşderiler).
OTel Collector teker hökmünde: kabul → baýlaşdyrmak → sampling → eksport (Prometheus, Tempo/Jaeger, Loki/ELK, ClickHouse).
- Metrikler: Prometheus/Mimir/VictoriaMetrics;
- Söwda: Tempo/Jaeger/Zipkin;
- Logi: Loki/ELK/Vector → S3 + arzan ammar;
- Profiller: Pyroscope/Parca.
- Korrelýasiýa: hyzmatlar sütünleri, exemplars, p99 grafikden belli bir trasa geçmek.
4) Treýsingiň amala aşyrylmagy: strategiýalar
4. 1 Head-based sampling (girelgede, netijeden öň)
Ýönekeý we arzan satuw (SDK/ingress).
Minuslar: seýrek ýalňyşlyklary/haýal haýyşlary sypdyryp biler.
Haçan: ýokary RPS, berk býudjetler, öňünden aýdylýan paý talap edilýär (mysal üçin 1-5%).
4. 2 Tail-based sampling (netijäni bilip, çykyşda)
Karar span tamamlanandan soň Collector-da kabul edilýär.
Anomaliýalary: ýalňyşlyklary, p99, anyk marşrutlary/tenantlary saýlamak kepillendirilip bilner.
Minuslar: buferizasiýa, has çylşyrymly we gymmat.
Haçan: orta bahadan "möhüm" söwdalar gerek.
4. 3 Birleşdirilen model
Global head 1-5%, üstesine-de tail-düzgünler: "hemişe ýalňyşlyklary/slow-spanlary saklamak", "canary-traffigiň 50% -ini sample etmek", "waka bolan ýagdaýynda töleg ýollarynyň ähli söwdalaryny saklamak".
5) Dinamiki semplirlemek we telemetriýanyň býujeti
Budget-aware: göwrümi saklamak ≤ N söwda/min; geçende - çäkleri ýokarlandyrmak (mysal üçin, diňe p99 almak. 5+, error-only).
Rules by route/tenant: möhüm endpointler/tenantlar - has köp paý bilen.
Uýgunlaşdyrylan penjireler: partlamalar → ýalňyşlyklaryň/haýal paýyny wagtlaýyn artdyrmak.
Kardinallygy peseltmek: ulanyjy-agenti, IP/ASN, squash stack traces, syrlary gizläň.
6) Konfigi (salgylanmalar)
6. 1 OpenTelemetry Collector - tail-sampling (ýama-bölek)
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 (bölek)
Programmada gistogrammalary ýazanyňyzda 'trace _ id' bilen exemplars goşuň. Grafana-da "iňňeler" boýunça basmalar trasa eltýär.
yaml scrape_configs:
- job_name: api scrape_interval: 10s honor_labels: true static_configs: [{ targets: ["api:9100"] }]
exemplar_limit: 10
6. 3 Loki - loglaryň bahasynyň peselmegi
Bellikler diňe durnukly ('service', 'env', 'region', 'route _ class').
Ýokary kardinallyk (request_id, user_id) - payload-da, ýöne redaction bilen.
"Üstünlikli" maglumat ýazgylaryny ýazyň, ähli ýalňyşlyklary/duýduryşlary saklaň.
6. 4 Jaeger/Tempo - retenşn we indeks
Çig söwdalary 3-7 gün, agregatlary/simmetriýalary has uzak saklaň.
Arzan ammarda (S3-gabat) parquet/blocks goşuň, indeksler ykjam.
7) Treýsingiň modellenmegi
7. 1 Atlary we atributlary
`service. name`, `service. version`, `deployment. environment`.
`http. method`, `http. route`, `http. target`, `http. status_code`, `net. peer. name`.
PII-siz iş atributlary: 'tenant', 'region', 'payment _ provider', 'game _ id'.
7. 2 Wakalar we aragatnaşyklar
Span events: möhüm nokatlar (DB amallarynyň başlangyjy, retrai, circuit open, cache miss).
Baglanyşyklar: habarlaşmak → webhuk/waka; EDA we outbox/inbox üçin peýdalydyr.
7. 3 Nusgalar (exemplars)
latency/size gistogrammalaryna 'trace _ id' bilen mysallar goşuň: bir gezek basylanda 'metrikadan → trasa' nawigasiýa.
8) Metrikler: haýsy we nädip
8. 1 Tehniki
RED marşrutlar/tenantlar/üpjün edijiler boýunça (PSP, KYC).
Пулы: `db_connections_in_use`, `http_client_in_flight`, `queue_depth`.
Durnuklaşdyryş: retries, timeouts, circuit open/half-open, rate-limit hits.
Go/Java/Python runtime: GC arakesmeleri, heap, safepoints, GIL gijikdirmeleri.
8. 2 Iş metrikleri
Hasaba alyş/giriş/goýumlar/netijeler, öwrülişik, 3DS/KYC şowsuzlyklary, chargeback-ratio.
Möhüm hileler: time-to-wallet, success-rate payout.
8. 3 Kardinallyk we saklamak
Açyk buckets bilen gistogrammalar (mysal üçin, '[50,100,200,300,500,1000,2000] ms').
Ýokary kardinally belliklerden gaça duruň (raw user_id, request_id) - girelgeleriňize/söwdalaryňyza getiriň.
9) Logi: standartlar we korrelýasiýa
Format: JSON + zerur açarlar ('timestamp', 'level', 'message', 'trace _ id', 'span _ id', 'service', 'env').
Redaktirlemek: PAN-lary, bellikleri, PII-leri gizläň.
Sempling: 'error/warn' üçin 100%, 'gürleýän' ýollarda 'info' üçin 5-20%.
Traillere baglanyşyk - 'trace _ id' arkaly. Log-setirler → "pivot" -da we tersine.
10) Önümdäki profil
CPU/heap/alloc/locks üçin continuous profiling (Pyroscope/Parca) -ni açyň.
p99 piklerini gyzgyn aýna bilen baglanyşdyryň; 7-14 gün saklaň.
11) SLO/nädogry býudjet boýunça alerting
SLO-alertler: "nädogry býudjet X %/sagatdan has çalt sarp edilýär" (çaklaýjy alertler).
Alamatlar, sebäpler däl: CPU-da däl-de, müşderi derejesine (RUM/edge ýa-da per-rout) alertite.
Multi-window, multi-burn rate: 1 sagat üçin 2% we 6 sagat üçin 5% - iki şert.
Meýilleşdirilen pese gaçmakda dymmak: fiç-baýdaklarda/kanareýkada bosagalaryň süýşmegi.
12) Bahasy we retenşn
Göwrümler üçin kwotalar: söwda ≤ N TB/aý, logi - gyzgyn 3-7 gün, sowuk S3 30-90 gün, metrikler - downsampling (1 minut → 5 minut → 1 sagat).
Tail-rules nädogry/haýal saklap, 10- × 100 × göwrümini peseldýär.
Iň pes bahasy bolan signallar - metrika; iň ýokary gymmatlyk bilen - "dogry" treýsler we profiller.
13) Antipatternler
"100% söwda hemişe" → çykdajy partlamasy, ses we tormoz.
Açarsyz/gizlenmedik erkin formatda girelgeler.
Tükeniksiz bellikli metrikler (user_id/ip/full UA).
Ýok 'traceparent '/' baggage' - korelýasiýa mümkin däl.
SLO ýerine CPU/heap alertleri - söhbetdeşlik peýdasyz "ýakylýar".
Hatalar/slow ileri tutulmazdan "1% rand" bilen sample etmek - gymmatly ýagdaýlaryňyzy ýitirýärsiňiz.
14) Daşbordlaryň mysallary (skeletler)
API Overview: RPS, synplar boýunça error-rate, latency p95/p99 (exemplars clickable), top-routs.
Release/Canary: köne/täze wersiýanyň metriklerini deňeşdirmek, outlier-rate, open-circuits, retries.
PSP/KYC: üpjün edijiler boýunça success-rate, latency we ret, payout-hatalar bilen baglanyşyk.
Infra: USE resurs, saturation очередей, network drops.
15) iGaming/Maliýe aýratynlyklary
Möhüm ýollar (goýumlar/netijeler): 100% söwda diňe hadysalarda ýa-da çäkli penjirelerde; adaty tertipde - tail "hemme zat ýalňyşlyk/uzak gizlinlik bilen".
Sebit/tenant: baggage 'tenant', 'jurisdiction', 'brand' goşuň; ýurisdiksiýa boýunça SLO guruň.
Antifrod/bot-süzgüç: metrikler we çözgütleriň treýsleri Risk API (allow/deny/challenge), challenge-pass-rate, velocity-hits.
Audit/komplayens: PII bolmasa, iň az zerur zady saklamak; üýtgemeýän magazinesurnallar - aýratyn konturda.
16) Prod-taýynlyk çek-sanawy
- Geçiş propagandasy ('traceparent', 'baggage'), bloglaryň/metrikleriň/söwdalaryň baglanyşygy.
- Tail-sampling (errors/slow/möhüm ýollar) + probabilistic default bilen OTel Collector.
- RED/USE metrikleri, açyk buckets, exemplars → trade geçişi.
- SLO we ýalňyş býudjet boýunça alerting (iki wagt şkalasy).
- Retensiýanyň düzgünleri we telemetriýanyň býudjeti; downsampling metrik; loglar üçin cold storage.
- Standartlaşdyrylan JSON-log, redaction PII/syrlar.
- Önümdäki profil goşuldy; waka üçin "gyzgyn" stekleriň daşbordlary.
- Kanar daşbordlary we wersiýalary deňeşdirmek; "kör zolaksyz" çykmak.
- Runbook: waka ýüze çykan halatynda sampleň paýyny wagtlaýyn nädip ýokarlandyrmaly.
- Atributlar/bellikler neýminginiň resminamalary we ýokary-cardinality gadaganlygy.
17) TL; DR
Baglanyşygyň töwereginde syn ediň: RED/USE → exemplars → tracs → logs/profiller. Gymmaty birleşdirilen samplirlemek arkaly dolandyryň: kiçi head% + tail-düzgünler (ýalňyşlyklar, haýal, möhüm ugurlar/tenantlar). Alertler - SLO we ýalňyşlyklaryň býudjeti boýunça. Retensiýaňyzy we kardinallygyňyzy gözegçilikde saklaň, OTel Collector-y "merkezi nerw ulgamy" hökmünde ulanyň. Töleg/ýurisdiksiýa ýollary üçin - ileri tutulýan telemetriýa we maglumatlaryň berk arassaçylygy.