Поиск…


Вступление

Заголовок 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

Значение не несет какого-либо неотъемлемого значения, но является лишь символическим признаком для корреляции запросов и ответов.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow