首页/安全/取证与溯源速查/用 trace/request id 串联跨服务日志
日志溯源53 条

用 trace/request id 串联跨服务日志

分布式系统里同一请求带相同的 trace id:从入口日志的 ID 出发,可把网关、应用、下游依赖的日志串成一条链。

取证与溯源速查安全更新于 2026-10-13

用请求 ID 串联日志是什么

分布式系统中,一次外部请求会穿过网关、应用集群、缓存、数据库与下游服务。在入口生成一个请求标识(trace id 或 request id)并逐跳透传、写进每条日志,就能把这个请求在各组件里的记录串成一条完整的链。它是应用层溯源的主线,能把「谁点了什么」还原成可读的调用路径。

基本信息

用途跨服务请求级溯源
载体trace_id / request_id / X-Request-Id 头
传播方式入口生成、下游透传、写入每条日志
前提各组件都记录该字段,链路才完整

典型使用场景

  • 排查一次异常操作对应的完整调用路径
  • 定位慢请求卡在哪个组件
  • 判断攻击请求是否真的到达业务逻辑,而不是停在前端
  • 把分散在各服务的日志整理成一条可读的请求链写进报告
  • 复盘时评估哪一段链路缺少可观测性
  • 检查定时作业与异步任务是否缺失请求标识,补齐链路空白

全栈检索

全栈检索
grep -r 'trace_id=7f3a' /var/log/app/                 # 应用目录按 trace id 检索
zgrep -h '7f3a' /var/log/nginx/access.log*              # 网关侧入口记录
grep '7f3a' /var/log/app/*.log | awk '{print $1,$2,$3,$NF}'  # 各服务记录按时间排列
# 网关侧回写 X-Request-Id 给客户端,便于事后对照与用户报障定位

常见字段名

字段出现位置注意
trace_id支持链路追踪的服务一次请求唯一,可跨异步任务传递
request_id应用与网关日志同一请求内唯一,异步场景可能丢失
X-Request-IdHTTP 头部客户端可预先传入伪造值,入口应重新生成
span_id链路追踪的跨度标识用于判断调用的父子嵌套关系
部分组件不传递头部(旧版本中间件、异步任务、定时作业),链会在中间断掉;这时按日志时间与请求路径就近补接,并注明该段为推断。
由客户端传入的标识不可全信:入口网关若直接沿用外部传入的请求 ID 而不重新生成,攻击者可以复用固定值污染日志关联。

易错点

  • 部分组件不传递头部,链断在中间,未做补接就声称链路完整
  • 请求 ID 由客户端传入且入口未重新生成,可被伪造造成关联污染
  • 各服务字段命名不统一(trace_id 与 requestId),检索时漏掉部分服务
  • 只看调用链不看响应内容,把「请求经过」当成「操作成功」

数据来源与参考

  • 分布式追踪通用实践(OpenTelemetry 语义约定)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌