交易系统对低延迟、强一致和合规留存要求苛刻,本文给出链路追踪与日志关联的排查方案,以及告警分级的落地实践。
交易系统难排查,难在三个地方:
这三条决定了金融场景的可观测方案不能照搬互联网大厂的「全量采集、事后分析」,而要做取舍。目标不是堆最多的遥测数据,而是用最短路径回答「这笔交易为什么失败」,同时不拖慢交易、不撑爆存储。
落地的关键是统一 trace_id。在网关入口生成 trace_id,通过 HTTP 头、消息队列 header 层层传递,保证一笔交易在所有系统里是同一个 id。炬鲸 OBSERVE 支持 OTLP 协议,Java/Go 服务用 SDK 或 Agent 自动接入,老系统通过日志采集端(如 Vector)从日志里解析 trace_id 补全链路。
链路断裂最常见的地方是协议边界:HTTP 转消息队列、消息队列到批处理、批处理再回调,任何一跳忘了透传 trace context,链路就断在那一层。排查时先审计这些边界,因为被遗忘的跳往往正是最先出问题的地方。
针对时延敏感,建议:
金融场景还有个特殊点:异步结算、对账这类批处理任务没有实时请求上下文可继承,需要单独建立链路关联。批处理任务从队列里取到一笔交易时,把该交易的 trace_id 记为 span 属性,异步这条腿才能在链路视图里挂回原始交易。
故障发生时,标准动作是三步:
这个流程的关键是日志和 trace 的双向关联都通畅:日志能跳链路,链路里的 span 能反查日志。少了任何一边,排查就得靠人肉 grep。在交易系统里,这个差距是用钱衡量的——每多花一分钟人工排查,就是渠道多一分钟不可用或降级。这套动作要在演练环境反复练习,而不是等故障了才第一次上手。
交易日志留存时间长,建议冷热分层:近 7 天热数据可秒级检索,7 天到 2 年转温存储,2 年以上归档到对象存储,需要时再恢复检索。归档前做索引快照,保证取证时能还原给监管。
告警要分级,避免告警疲劳:
告警规则要挂在服务维度而非机器维度,否则扩缩容后规则容易失效。这套方案在多家券商和支付机构的交易线路上验证过,核心是「快定位、轻打扰、能留证」。