http-headers
X-Request-ID
Поиск…
Вступление
Заголовок X-Request-ID может использоваться для отслеживания отдельных запросов к веб-службе (например, REST API) от клиента к серверу и его серверам.
Синтаксис
- X-Request-ID: <значение>
замечания
Клиент может отправлять HTTP-заголовок X-Request-ID: some-value . Сервер должен использовать предоставленное значение и предоставлять его в любых запросах, которые он делает для бэкэнд-услуг, для обслуживания первоначального запроса. При отправке ответа сервер вернет тот же заголовок обратно клиенту. Для целей трассировки сервер будет включать значение в свои журналы, чтобы включить корреляцию запросов и ответов с соответствующими журналами.
Nginx
Обратные прокси-серверы могут определить, содержит ли клиент заголовок X-Request-ID и передает его на сервер. Если такой заголовок не предоставлен, он может предоставить случайное значение.
map $http_x_request_id $reqid {
default $http_x_request_id;
"" $request_id;
}
В приведенном выше коде хранится идентификатор запроса в переменной $reqid откуда он может впоследствии использоваться в журналах.
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
Heroku всегда будет передавать заголовок X-Request-ID отправленный клиентом, или генерировать его.
См. Документацию по идентификаторам запроса HTTP .
Джанго
При использовании Django в качестве структуры веб-сервиса, django-log-request-id пакета django-log-request-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,
},
}
}
Идентификатор запроса (запрос / ответ)
Тот же заголовок X-Request-ID может быть отправлен клиентом в запросе или сервером в ответе.
X-Request-ID: f9ed4675f1c53513c61a3b3b4e25b4c0
Значение не несет какого-либо неотъемлемого значения, но является лишь символическим признаком для корреляции запросов и ответов.