一笔支付从下单到回调要经过几十个服务,任何一环出错都会变成客诉。本文讲金融行业如何用可观测平台做交易级链路追踪、灰度监控与审计合规。
金融系统的可观测,和互联网公司不一样:流量没那么大,但对「每一笔」都较真。一笔支付失败,不是看整体错误率,而是要精确到「这笔订单在哪一步、哪个服务、因为什么失败」。同时,金融有强审计要求,谁在什么时候查过哪条日志,都要留痕。
普通链路追踪以请求为单位,金融场景要以「交易」为单位。做法是在入口给每笔交易打一个 transaction_id,贯穿下单、风控、扣款、回调全链路:
span.SetAttribute("transaction.id", txnID)
span.SetAttribute("transaction.amount", amount)
这样一笔交易的所有 span 通过 transaction_id 串起来。排查时输入订单号,就能还原这笔钱走过的完整路径,定位到具体服务和方法。
举一个典型故障:用户支付后回调迟迟不来。按 transaction_id 一查,发现扣款服务返回成功,但回调服务在解析通知报文时抛了序列化异常,重试三次都失败。没有交易级追踪时,这条线索要翻十几个服务的日志;有了它,一分钟就能定位到回调服务的那段异常栈。
金融系统发版风险高,灰度是标配。可观测平台要能按「版本」维度对比:
把版本号打进 span 属性(service.version),就能按版本聚合对比。灰度窗口里要盯的不只是错误率,还有「新版本独有的异常」——同一类报错在旧版本从未出现过,说明问题大概率出在本次改动。
脱敏要放在采集端或写入前,而不是只在展示层做——否则原始敏感字段已经落库,等于没脱。
transaction_id、service.version、脱敏规则作为接入标准,写进团队规范。金融可观测的验收标准很朴素:任何一笔交易出问题,五分钟内能定位到具体服务和方法。