网关全局请求 ID 生成:日志排查靠猜?X-Request-ID 统一注入 + 全链路透传!
公司线上出了个支付异常,三四个微服务都有日志,但各打各的,谁也不知道哪条日志和哪条日志是同一个请求。运维在 ELK 里翻了一个小时,靠着时间戳和 userId 硬猜,最后猜错了版本,回滚到错误的代码上又出了一波事故。要是每条日志头上都有一个贯穿全链路的请求 ID,一秒就能搜出这个请求的完整轨迹。 X-Request-ID 不是什么新技术,但落地起来细节不少。谁生成、怎么传、下游怎么接、日志怎么打,任何一个环节断了,链路就断了。今天把这些细节串起来。 谁负责生成 Request ID 生成责任只有一个:第一个接收到请求的网关。 客户端不生成,因为你不能信任客户端传上来的值——重复、太短、甚至包含注入字符。 如果客户端已经传了 X-Request-ID(比如从另一个系统透传过来的),网关应当尊重它,直接转发。但如果客户端没传,网关必须生成一个。 请求到达 Gateway │ ├─ 检查 Header: X-Request-ID │ ├─ 有值 → 直接用(跨系统透传) │ └─ 没值 → 生成新 ID │ └─ 写入 Header → 转发到下游微服务 ID 格式建议用 UUID 去横....