TOC

Nginx Request ID 实现链路追踪

https://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_id

server {
    listen 80;
    server_name example.com;

    log_format main '$remote_addr - $remote_user [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent" '
                'Request-ID: $request_id';

    add_header X-Request-ID $request_id;

    location / {
        proxy_pass http://backend_server;
        proxy_set_header X-Request-ID $request_id;
    }
}

后台服务接收到 X-Request-ID 头信息,并记录到日志中。
可以放到线程上下文,或者协程上下文中,在所有相关日志打印时都带上 X-Request-ID。

from flask import Flask, request
import logging

app = Flask(__name__)
logging.basicConfig(level=logging.INFO)

@app.route('/')
def hello():
    request_id = request.headers.get('X-Request-ID')
    logging.info(f"Request ID: {request_id} - Processing request...")
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()
如果你有魔法,你可以看到一个评论框~