可觀察性和遙測
(部分: 技術和基礎設施)
簡短摘要
可觀察性是回答「為什麼如此有效?」的能力?"沒有發布新法案。在iGaming中,這是至關重要的:高峰錦標賽,支付高峰,多區域性和負責任的賭博/PII要求。Basis是由通用ID和標準(OpenTelemetry)結合在一起的度量,徽標,跟蹤和SLO合同,防噪和成本控制。
1)可觀察性框架: 它由什麼組成
度量(按時間計數):RED/USE,商業KPI,SLI。它存儲在TSDB中。
Logi (文本/JSON中的事件):審計、錯誤、業務事實、安全。
跟蹤:通過服務查詢路徑、潛伏期、延遲原因。
配置文件:CPU/內存/eBPF流,heap/lock扭曲。
RUM和合成:實際用戶(web/app)+機器人驗證。
遙測目錄:電路,PII策略,保留時間,成本標簽。
2)信號分類學和原理
RED для API: Rate, Errors, Duration.
用於基礎架構的USE: Utilization, Saturation, Errors (CPU、磁盤、網絡、隊列)。
SLI/SLO:可測量的指標(例如,成功查詢/全部,p95 latency),可訪問性目標(例如,"99。9%在30天內"),錯誤預算→過程觸發器。
高密度:標簽應該在切口(區域/tenant/提供商)中有用,但不要爆炸TSDB。
3)標準與端到端相關性
OpenTelemetry (OTel):用於度量、日誌和跟蹤的單個SDK/協議。
標識符為:'trace_id','span_id','correlation_id','player_id'(化名),'payment_route'。
ID流量:輸入網關→所有微服務→ 付款/PSP → 隊列/jobs → logi/度量/span。
示例: 相關標題
traceparent: 00-<trace_id>-<span_id>-01 x-request-id: <correlation_id>
4)度量: 什麼以及如何衡量
命名/標簽
`service="payments-api"`, `env="prod"`, `region="eu-west"`, `tenant`, `provider="pspX"`.
Prometheus示例
prometheus
RED http_requests_total{service="api",route="/deposit",method="POST",status="200"}
http_request_duration_seconds_bucket{service="api",le="0. 25",route="/deposit"} 1234 http_request_errors_total{service="api",route="/deposit"}
USE cpu_utilization_ratio{node="n1"} 0. 71 queue_depth{queue="withdrawals"} 128
Бизнес payments_success_total{psp="X",currency="EUR"} 4521 payment_conversion_ratio{route="pspX"} 0. 948
直方圖和exemplars
存儲潛伏直方圖(native-histograms/ β uckets),並用「trace_id」 綁定exemplar以從「慢速垃圾桶」跳到特定軌道。
5) Logi: 結構化和安全
只有JSON(銷售中沒有「自由形式」)。
Поля: `timestamp`, `severity`, `service`, `trace_id`, `correlation_id`, `player_id_hash`, `event`, `amount`, `currency`, `ip_hash`.
PII掩蔽/哈希,敏感性的單獨索引/保留。
Logs piplines:解析→規範化→富集(geo/ASN) → PII編輯→索引。
JSON事件的示例
json
{
"ts":"2025-11-05T10:42:31Z",
"sev":"ERROR",
"service":"payments-api",
"event":"psp_timeout",
"trace_id":"9c5e...e2",
"route":"pspX",
"duration_ms": 3100,
"attempt":2,
"player_id_hash":"p:1b7f...",
"pii_redacted":true
}
6)跟蹤: 時間丟失的地方
Spains:輸入請求,提供商呼叫(PSP/遊戲提供商),DB/緩存,服務間RPC。
屬性: 'db。system`, `net.peer.name`, `messaging.system`, `psp.route`, `game.provider`.
Sampling:- 基於音量的頭(概率),
- 基於tail(根據條件:錯誤,p95+,VIP段),
- guaranteed-keep 用於支付/PII關鍵。
7)前部和移動的可觀察性
RUM:TTFB,FCP/LCP/CLS/INP,JS錯誤,網絡和SPA漫遊。
碰撞報告:符號,去混音,法案版本,設備/OS。
合成:入場/存款/投註方案;地理分布式檢查。
8) SLO、SLI和錯誤預算
SLO示例(偽YAML)
yaml service: payments-api sli:
- name: availability expr: sum(rate(http_requests_total{status=~"2.. 3.."}[5m]))
/ sum(rate(http_requests_total[5m]))
- name: latency_p95 expr: histogram_quantile(0. 95, rate(http_request_duration_seconds_bucket[5m]))
targets:
availability: "99. 9%/30d"
latency_p95: "<=250ms/30d"
error_budget_policy:
fast_burn: 5% for 1h -> page, freeze deploy slow_burn: 20% for 24h -> incident, improvement plan
根據錯誤預算而不是「每個指標」進行排序。
預算燒毀時的凍結程序:限制發行/金絲雀。
9)無噪音的Alerting
多窗口、多燃燒規則:短/長窗口。
重復數據消除/旋轉:按服務/區域/臨界值在呼叫中。
Runbook URL和上下文autobor(最新的deploi,config更改,依賴圖)。
計劃工作期間的安靜時鐘和抑制。
規則示例(PromQL的想法)
promql alert: PaymentsSLOFastBurn expr: slo_error_rate_5m > 2 slo_budget_rate for: 15m labels: { severity="page", service="payments-api" }
annotations:
summary: "SLO fast burn"
runbook: "https://runbooks/payments/slo"
10) Profailing和eBPF
eBPF/profiler: flame graphs CPU/alloc, I/O潛伏期,network drops, Syscall異常。
在p99瓶頸,「jitter」和罕見的懸停中很有用。
11)業務可觀察性(產品和風險)
金融/貨幣化:存款轉換,TTW(時間到錢包),作者./settle,取消/charjbacks。
遊戲活動:重播/剪輯,現場投註份額,提供商的「粘性」。
Antifrod/Abuse:動作速度,設備/IP匹配,相關性。
RG指標:長時間,「dogon」,牛排生長。
業務指標與Technometrics和發行版(annotation events)相關。
12)安全,PII和合規性
數據區:dataset/Logs標簽(「pii=true」,「region=EU」)。
在索引前掩蔽,別名ID。
用於審計的WORM存儲;角色訪問登錄。
保留時間:技術人員/審計/業務不同。
禁止邏輯中的原始秘密;CI中的掃描檢查。
13)成本管理(FinOps)
基數限制:謹慎使用「user_id」,「session_id」。
聚會/重建:熱(7-14天)、溫暖(30-90天)、冷(檔案)。
Sampling Trass(基於尾巴)和downsampling度量。
按標簽「team」,「service」,「tenant」計費:報告「誰在燃燒觀察力」。
14)工具箱(參考堆棧)
度量:度量的Prometheus/lake,Grafana dashbords。
Logi:Loki/ELK;引導規則,引導/解析。
步道:Tempo/Jaeger/OTel收集器;exemplars links by metrics。
合成:Blackbox出口商,瀏覽器機器人。
警報:Alertmanager/聊天集成,呼叫旋轉。
配置文件:eBPF/連續配置文件。
15)示例: 快速實施框架
(a) API的RED出口商(偽代碼):python from prometheus_client import Counter, Histogram, start_http_server reqs = Counter('http_requests_total','', ['route','method','status'])
lat = Histogram('http_request_duration_seconds','', ['route'])
def handle(req):
with lat. labels(route=req. route). time():
status = app(req)
reqs. labels(route=req. route,method=req. method,status=str(status)). inc()
(b)將trace_id嵌入邏輯中(middleware想法):
go tid:= ctx. Value("trace_id")
logger = logger. With("trace_id", tid)
logger. Info("deposit-accepted", "amount", amt, "route", route)
(c)度量標準中的實例(exemplars):
prometheus http_request_duration_seconds_bucket{..., le="0. 25"} 1023 # exemplar: trace_id=9c5e...
16)流程和操作
單個度量/標簽字典(命名指南)和行車記錄模板。
圖中的自動機釋放註釋。
事件:卡片、時間線、RCA無罪、行動項目。
訓練警報(「遊戲日」):模擬跌落,PSP延遲,緩存過熱。
Runbooks:分步指令和Alert自動通訊。
17)成熟度清單
1.OTel SDK/收集器 →單一的指標/標誌/跟蹤導出。
2.RED/USE通過關鍵API覆蓋所有+SLI/SLO服務。
3.「Trace_id」相關性⇄ ⇄度量(exemplars,jump-links)的邏輯。
4.Alerts使用多重燃燒和符文參考的錯誤預算。
5.RUM+合成「存款/出價/出價」。
6.Profyling(eBPF)在白名單上出售。
7.PII策略:掩蔽、區域、訪問、保留時間。
8.遙測成本財務報告(「團隊/服務」標簽)。
9.「峰值負載準備」:測試計劃,緩存加熱,警報模式。
10.定期進行RCA並修訂SLO/閾值。
18)反模式
沒有結構的「床單」和「trace_id」的日誌。
每個指標的Alerta → alert-fetIg。
沒有正確罐子的直方圖→「扁平」p95。
標簽的無限基數→價值爆炸。
沒有RUM/合成劑是「全部」,用戶則沒有。
將PII與Technologs混合,永久回避。
遙測與商業KPI的隔離是「潛伏期正在下降,收入也在下降」。
結果
強大的可觀察性是產品,SRE,安全性和支付之間的通用語言。通過將OTel之下的度量標準,徽標和軌跡連接起來,引入具有錯誤預算的SLO,使警報智能且成本可管理,您可以獲得一個以前註意到問題的系統,恢復速度更快,並且可以預測地通過流量峰值和錦標賽負載。