trace_id = request.headers.get('X-Trace-Id') or uuid4().hex
headers = {'X-Trace-Id': trace_id}
log.info('start', extra={'trace_id': trace_id})

排查一次下单失败,涉及三个服务,日志里每条请求的标识都不一样,无法串成一条链路。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,入口生成的请求标识没有随调用向下传递,各服务各自生成新的标识。

围绕「分布式链路 traceId」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:入口生成并写入上下文;出站请求带上该标识;日志格式统一输出。

改完只确认一件事:同一次请求在三个服务的日志里能按同一标识检索出来。

作者 9823189