http-headers
X-Request-ID
サーチ…
前書き
X-Request-IDヘッダーは、クライアントからサーバーおよびそのバックエンドへのWebサービス(REST APIなど)への個々の要求をトレースするために使用できます。
構文
- X-Request-ID:<値>
備考
クライアントは、HTTPヘッダーX-Request-ID: some-valueを送信できX-Request-ID: some-value 。サーバーは、提供された値を使用して、要求の最初を処理する目的でサービスをバックエンドするすべての要求にそれを提供する必要があります。応答を送信するとき、サーバーは同じヘッダーをクライアントに返します。トレースの目的のために、サーバーはログに値を含め、対応するログとの関連付け要求と応答を有効にします。
nginx
逆プロキシは、クライアントがX-Request-IDヘッダーを提供しているかどうかを検出し、それをバックエンドサーバーに渡すことができます。そのようなヘッダーが提供されていない場合は、ランダムな値を提供できます。
map $http_x_request_id $reqid {
default $http_x_request_id;
"" $request_id;
}
上記のコードでは、Request IDを$reqid変数に格納します。このIDは、後でログで使用できます。
log_format trace '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" $reqid';
また、バックエンドサービスに渡す必要があります
location @proxy_to_app {
proxy_set_header X-Request-ID $reqid;
proxy_pass http://backend;
access_log /var/log/nginx/access_trace.log trace;
}
ヘロク
Herokuは、クライアントが送信するX-Request-IDヘッダーを常に渡すか、独自のヘッダーを生成します。
HTTPリクエストIDのドキュメントを参照してください。
ジャンゴ
DjangoをWebサービスフレームワークとして使用する場合、パッケージdjango-log-request-idを使用して要求IDを解析してログに記録できます。
設定
MIDDLEWARE_CLASSES = (
'log_request_id.middleware.RequestIDMiddleware',
# ... other middleware goes here
)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'request_id': {
'()': 'log_request_id.filters.RequestIDFilter'
}
},
'formatters': {
'standard': {
'format': '%(levelname)-8s [%(asctime)s] [%(request_id)s] %(name)s: %(message)s'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'filters': ['request_id'],
'formatter': 'standard',
},
},
'loggers': {
'myapp': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
}
}
リクエストID(リクエスト/レスポンス)
同じX-Request-IDヘッダーは、要求のクライアントまたは応答のサーバーによって送信されます。
X-Request-ID: f9ed4675f1c53513c61a3b3b4e25b4c0
この値は、固有の意味を持ちませんが、相関する要求と応答を識別する単なるトークンです。