复盘某券商交易系统微服务化后的可观测性建设:如何用统一 traceId 打通网关、订单、清算全链路,如何在开盘高峰保证告警不误报,以及如何设计交易链路的 SLO,定位时间从 40 分钟降到 5 分钟。
某券商把核心交易从单体拆成网关、订单、撮合、清算等十几个微服务后,故障定位时间从分钟级恶化到小时级。一个订单失败,可能是网关超时、订单服务限流、还是撮合拒绝,靠人肉翻日志根本查不过来。更麻烦的是开盘前 30 分钟是全天的关键窗口,任何抖动都会被放大成事故。
第一步是把 traceId 贯穿所有服务。网关在入口生成 traceId,通过 HTTP Header 透传,各服务日志统一打印 traceId 和 spanId。这样任意一笔委托都能用订单号反查到 traceId,再定位到具体服务和调用段。
炬鲸 OBSERVE 支持用业务字段(orderNo)关联 trace:排查时先按 orderNo 检索日志拿到 traceId,再下钻整条链路。上线后平均定位时间从 40 分钟降到 5 分钟以内,大部分问题在第一个 span 就能看出是超时还是被拒。
开盘瞬间委托量是平时的 10 倍,直接按静态阈值告警会疯狂误报。我们做了三件事:
告警分级也很关键:P1 直接电话 + 短信,P2 走企业微信,P3 进邮件。否则开盘高峰一旦触发告警风暴,值班人员会直接静音群,真正严重的告警反而被淹没。
对交易链路定义三个 SLO:下单接口 P99 延迟 ≤ 200ms、订单成功率 ≥ 99.99%、撮合确认时延 ≤ 1s。SLO 用 28 天滚动窗口计算,误差预算不足时先暂停非紧急发布,而不是等问题爆发。这套指标让开发和运维第一次用同一把尺子说话,发布前能预估"这次改动会不会烧预算"。
SLO 还有一个配套动作:烧毁率告警。误差预算在短时间内被快速消耗(比如 1 小时烧掉 10%),比事后看成功率下跌更早暴露问题,能抢在用户投诉前介入。