可观察性和遥测
(部分: 技术和基础设施)
简短摘要
可观察性是回答"为什么如此有效?"的能力?"没有发布新法桉。在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,使警报智能且成本可管理,您可以获得一个以前注意到问题的系统,恢复速度更快,并且可以预测地通过流量峰值和锦标赛负载。