GH GambleHub

Observability и trace sampling

1)為什麼觀察力

Observability(O11y)回答了三個問題:發生了什麼,為什麼,如何解決。它依賴於4個信號:
  • 度量(聚合,反應迅速);
  • Logi(零件和偽裝);
  • Traces(端到端因果關系);
  • Profile (prod模式下的CPU/heap/lock contention)。

關鍵:信號之間的相關性+遙測經濟學(采樣、回避、壓縮)。

2)信號圖和原理

2.1 RED/USE

RED(用於API): Rate (RPS), Errors(%5xx/4xx重要),Duration (p50/p95/p99)。
USE(用於資源):Utilization, Saturation, Errors (NIC、CPU、磁盤、隊列)。

2.2產品不變量

定義SLO(例如"p95 latents"/v1/payments "≤ 300毫秒,預算錯誤0。5%在30天內)。Alerts只有在違反SLO或其燃燒時「尖叫」。

2.3個背景

實施W3C Trace Context(「traceparent」,「tracestate」)和baggage,以安全地傳輸那些/業務屬性(例如「tenant」,「region」,沒有PII)。

3)可觀察性架構

SDK/自動工具:服務中的OpenTelemetry(OTel)(HTTP/gRPC/DB/客戶端)。
OTel Collector作為總線:接收→濃縮→采樣→出口(Prometheus,Tempo/Jaeger,Loki/ELK,ClickHouse)。

存儲設施:
  • 度量:Prometheus/Mimir/VictoriaMetrics;
  • 步道:Tempo/Jaeger/Zipkin;
  • Logs:Loki/ELK/Vector→S3+deshevoye存儲;
  • Profyles:Pyroscope/Parca。
  • 相關:服務圖,exemplars,從p99圖到特定軌跡的過渡。

4)示蹤劑: 策略

4.1基於頭部的采樣(在入口處,直到知道結果)

簡單而便宜的實現(在SDK/ingress中)。
缺點:可能會錯過罕見的錯誤/緩慢查詢。

當:高的RPS,嚴格的預算,需要可預測的份額(例如1-5%)。

4.2基於尾巴的采樣(出口,知道結果)

Span完成後,將在Collector中做出決定。
可以保證選擇異常:錯誤,p99,特定路由器/tenant。
缺點:緩沖更復雜,更昂貴。

何時:需要「有意義的」步道,成本適中。

4.3組合模型

全球頭部1-5%,加上尾巴規則:「始終保存錯誤/慢速播放」,「采樣50%的金絲雀流量」,「在事件發生時保留所有支付路徑跟蹤」。

5)動態采樣和遙測預算

Budget-aware: 保持≤ N Trays/Min的體積;超過時-提高閾值(例如,僅選擇p99。5+, error-only).

Route/tenant規則:重要的終端/tenant-具有更大的份額。
自適應窗口:爆發→暫時增加錯誤/緩慢的百分比。
降低基數:規範化用戶代理、IP/ASN、squash堆棧跟蹤,掩蓋秘密。

6)Configa(裁判)

6.1 OpenTelemetry Collector-tail-sampling (yaml片段)

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(片段)

在應用程序中,寫直方圖時,請使用「trace_id」添加exemplars。在格拉法納(Grafana),「針頭」的點擊導致步道。

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

6.3 Loki-降低日誌成本

標簽僅穩定(「服務」,「env」,「區域」,「route_class」)。
高基數(request_id,user_id)-在付費中,但帶有redaction。
采樣「成功」信息日誌,保存所有錯誤/警告。

6.4 Jaeger/Tempo-重建和指數

保存3-7天的原始步道,聚合/對稱性更長。
在便宜的存儲(S3兼容)中啟用parquet/blocks,索引是緊湊的。

7)跟蹤模擬

7.1命名和屬性

`service.name`, `service.version`, `deployment.environment`.

`http.method`, `http.route`, `http.target`, `http.status_code`, `net.peer.name`.

沒有PII的業務屬性:「tenant」,「region」,「payment_provider」,「game_id」。

7.2事件和聯系

Span events:重要點(DB事務開始、轉發、電路打開、小姐小姐)。
Links:zapros→vebkhuk/sobytiye聯系;對EDA和outbox/inbox有用。

7.3個實例(exemplars)

在直方圖中添加帶有"trace_id"的latency/size示例:從度量→到跟蹤"單次單擊。

8)度量: 哪些和如何

8.1個技術

路線/tenant/提供商(PSP,KYC)上的RED。

Пулы: `db_connections_in_use`, `http_client_in_flight`, `queue_depth`.

穩定:retries、timeouts、circuit open/half open、rate-limit hits。
Go/Java/Python運行時:GC暫停,重播,safepoints,GIL延遲。

8.2個業務指標

註冊/登錄/存款/結算,轉換,3DS/KYC失敗,收費率。
重要的fici:時間到錢包,成功率付款。

8.3基數和存儲

帶有顯式桶的直方圖(例如「[50.100.200.300.500.1000.000] ms」)。

避免使用高基數標記(raw user_id, request_id)-將標記傳遞到logi/traces.

9) Logi: 標準與相關性

格式:JSON+必需的密鑰(「timestamp」,「level」,「message」,「trace_id」,「span_id」,「service」,「env」)。
編輯:偽裝PAN、令牌、PII。
采樣:100% for 'error/warn'、5-20% for 'info' on「嘈雜」的路徑。
綁定到traces-通過「trace_id」。Log字符串在Trace中→ 「pivot」,反之亦然。

10) Profailing在銷售

為CPU/heap/alloc/locks啟用連續分析(Pyroscope/Parca)。
將p99峰與熱堆棧相關聯;保存7-14天。

11) Alerting on SLO/預算錯誤

SLO-alerta:「錯誤的預算花費速度快於X%/小時」(預測Alerta)。
癥狀,不是原因:在客戶級別(RUM/edge或per-rout)上而不是在CPU上。
多窗口、多燃燒率:1小時2%,6小時5%-兩個條件。
計劃退化的沈默:菲奇旗/金絲雀的閾值變化。

12)成本和重置

數量配額:Trains ≤ N TB/mes,logi-熱3-7天,冷S3 30-90天,指標-downsampling(1分鐘→ 5分鐘→ 1小時)。
Tail-rules將體積降低× 10-× 100,同時保持錯誤/緩慢。
成本最低的信號是度量;最有價值的是「正確」的預告片和專業文件。

13)反模式

「100% treas」 →成本爆炸、噪音和剎車。
沒有密鑰/掩碼的免費格式的日誌。
具有無限標簽的度量(user_id/ip/full UA)。
沒有「traceparent」/「baggage」-無法進行聯合。
Alerts on CPU/heap而不是SLO-聊天「燃燒」沒有好處。
沒有錯誤/慢速優先級的「random 1%」采樣-失去了寶貴的案例。

14)dashbords的示例(骨架)

API綜述:RPS,按類別排列的error-rate,latency p95/p99(exemplars clickable),頂級路由。

Release/Canary: 比較舊版/新版,outlier-rate, open-circuits, retries.

PSP/KYC:提供商的成功率,後退和失敗,與付款錯誤相關。
Infra: USE按資源、排隊、網絡下降。

15) iGaming/財務細節

關鍵途徑(存款/結論):僅在事件或受限窗口中進行100%的跟蹤;在正常模式下-「一切都有錯誤/長期潛伏」。
區域/tenant:在baggage中添加「tenant」,「jurisdiction」,「brand」;根據管轄權構建SLO。
Antifrod/bot過濾器:Risk API (allow/deny/challenge)、challenge-pass-rate、velocity-hits解決方案指標和預告片。
審計/合規性:存儲最低要求,不含PII;不變的日誌-在單獨的輪廓中。

16)準備就緒支票清單

  • 端到端宣傳(「traceparent」,「baggage」),博客/度量/跟蹤相關性。
  • OTel Collector with tail-sampling (errors/slow/重要路由)+probabilistic default。
  • RED/USE度量標準,顯式桶,exemplars →過渡到軌跡。
  • SLO和差額預算(兩個時間尺度)。
  • 遙測規章和預算;downsampling指標;用於登錄的冷庫。
  • 標準化的JSON-log, redaction PII/secrets。
  • Profailing包含在銷售中;事件中的「熱」堆棧。
  • 金絲雀行車記錄和版本比較;沒有「盲點」的問題。
  • Runbook:如何暫時提高事件中的采樣比例。
  • 屬性/標簽的神經元文檔和禁止高堿性。

17) TL;DR

圍繞相關性構建可觀察性:RED/USE → exemplars度量→預告片→ 徽標/profyles。通過組合采樣管理成本:小頭數%+尾數規則(錯誤、慢速、重要路線/tenants)。Alerta-通過SLO和錯誤預算。保持謹慎和基本控制,使用OTel Collector作為「中樞神經系統」。對於支付/管轄途徑-優先遙測和嚴格的數據衛生。

Contact

與我們聯繫

如有任何問題或支援需求,歡迎隨時聯絡我們。我們隨時樂意提供協助!

Telegram
@Gamble_GC
開始整合

Email 為 必填。Telegram 或 WhatsApp 為 選填

您的姓名 選填
Email 選填
主旨 選填
訊息內容 選填
Telegram 選填
@
若您填寫 Telegram,我們將在 Email 之外,同步於 Telegram 回覆您。
WhatsApp 選填
格式:國碼 + 電話號碼(例如:+886XXXXXXXXX)。

按下此按鈕即表示您同意我們處理您的資料。