Szukaj…


Wprowadzenie

Nagłówek X-Request-ID może być używany do śledzenia indywidualnych żądań do usługi internetowej (takiej jak REST API) od klienta do serwera i jego backendów.

Składnia

  • X-Request-ID: <wartość>

Uwagi

Klient może wysłać nagłówek HTTP X-Request-ID: some-value . Serwer powinien używać podanej wartości i podawać ją we wszelkich żądaniach wysyłanych do usług zaplecza w celu obsłużenia początkowego żądania. Podczas wysyłania odpowiedzi serwer zwróci klientowi ten sam nagłówek. W celu śledzenia serwer uwzględni wartość w swoich dziennikach, aby umożliwić korelowanie żądań i odpowiedzi z odpowiednimi dziennikami.

nginx

Odwrotne serwery proxy mogą wykryć, czy klient udostępnia nagłówek X-Request-ID, i przekazać je do serwera zaplecza. Jeśli taki nagłówek nie zostanie podany, może dostarczyć losową wartość.

map $http_x_request_id $reqid {                                                 
    default   $http_x_request_id;                                               
    ""        $request_id;                                                      
}                                                                               

Powyższy kod przechowuje identyfikator żądania w zmiennej $reqid skąd można go później wykorzystać w logach.

log_format trace '$remote_addr - $remote_user [$time_local] "$request" '        
                 '$status $body_bytes_sent "$http_referer" "$http_user_agent" ' 
                 '"$http_x_forwarded_for" $reqid';                              

Należy go również przekazać usługom zaplecza

    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 zawsze przekaże nagłówek X-Request-ID wysłany przez klienta lub wygeneruje własny.

Zobacz dokumentację w Identyfikatorach żądań HTTP .

Django

Podczas korzystania z Django jako środowiska usług WWW pakiet django-log-request-id może być używany do analizowania i rejestrowania identyfikatorów żądań.

Ustawienia

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,
        },
    }
}

Identyfikator żądania (żądanie / odpowiedź)

Ten sam nagłówek X-Request-ID może zostać wysłany przez klienta w żądaniu lub przez serwer w odpowiedzi.

X-Request-ID: f9ed4675f1c53513c61a3b3b4e25b4c0

Wartość nie ma żadnego wewnętrznego znaczenia, ale jest tylko tokenem identyfikującym powiązane żądania i odpowiedzi.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow