nginx 使用 $request_id 实现链路追踪

5 min read

在 nginx 中,$request_id 是一个系统变量,它可以用来唯一地标识一个请求。通过使用$request_id,可以方便快捷地实现链路追踪。

要启用$request_id,需要在 nginx 配置文件中添加以下配置:

http {
    log_format main '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" '
                    '"$request_id"';
    ...
    server {
        ...
        location / {
            ...
            set $request_id $request_id-$server_name-$request_time;
            ...
        }
    }
}

上述配置中,log_format 中包含了$request_id,用于记录日志,以便追踪请求的状态。

在 location 中,通过 set 命令设置$request_id的值。这里使用了以下变量来生成唯一的请求 ID:

  • $request_id:系统变量,它的值在每个请求中都会被赋予一个唯一的标识符。
  • $server_name:该变量表示当前请求所匹配的 server 块的 server_name,用于区分不同的服务。
  • $request_time:该变量用于生成时间戳,在同一秒内的请求将被区分开来。

通过以上配置,每个请求都将被赋予一个唯一的$request_id,我们可以使用这个 ID 进行链路追踪。