http-headers
X-Request-ID
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.