一笔支付请求跨十几个微服务,超时到底卡在哪一跳?结合金融场景,讲链路追踪采样策略、TraceID 透传规范,以及一次真实故障的定位过程。
金融核心交易系统对可观测性的要求比普通业务严得多:一笔请求跨越十几个微服务,涉及账户、清算、风控、渠道多个系统;监管要求关键交易可审计、可回溯;故障的每一秒都是真金白银。普通系统的“概率采样 + 事后翻日志”在这里不够用。
全量采集所有 trace 成本太高,但金融系统必须保证关键交易一笔不漏。炬鲸 OBSERVE 支持按规则采样:
sampling:
- name: critical-tx
match: attributes["tx_type"] in ("transfer", "settlement")
rate: 1.0
- name: default
rate: 0.1
这样既保证监管审计需要的关键交易全量留痕,又把存储成本控制在可接受范围。
金融系统常见“半截链路”:前端到网关有 trace,网关往后就断了。根因是中间件没透传 trace 上下文。落地时要把 TraceID 透传写进接入规范:
traceparent / X-B3-TraceId 头;规范要在代码评审里强制检查,光靠自觉一定会断。
某天 14:03,支付成功率从 99.7% 掉到 96%,告警触发。值班同学在炬鲸 OBSERVE 里按“支付失败”筛选 trace,按耗时排序,发现超时集中在 settlement-service 调用 ledger-service 这一跳:
ledger-service 的 DB 查询从 8ms 涨到 900ms;从告警到定位根因,用时 6 分钟。事后把这条慢 SQL 对应的告警规则补上,同类问题下次直接自动告警。
金融系统的可观测性目标不是“好看的大屏”,而是“下次故障,一分钟内知道卡在哪一跳”。