http-headers
X-Request-ID
Recherche…
Introduction
L'en X-Request-ID tête X-Request-ID peut être utilisé pour tracer des requêtes individuelles vers un service Web (tel qu'une API REST) du client vers le serveur et ses backends.
Syntaxe
- ID de demande X: <valeur>
Remarques
Un client peut envoyer un en-tête HTTP X-Request-ID: some-value . Le serveur doit utiliser la valeur fournie et la fournir dans toutes les demandes qu’il fait aux services principaux afin de servir la requête initiale. Lors de l'envoi de la réponse, le serveur renvoie le même en-tête au client. Aux fins du suivi, le serveur inclura la valeur dans ses journaux pour permettre la corrélation des requêtes et des réponses avec les journaux correspondants.
nginx
Les proxys inverses peuvent détecter si un client fournit un en-tête X-Request-ID et le transmettre au serveur principal. Si aucun en-tête n'est fourni, il peut fournir une valeur aléatoire.
map $http_x_request_id $reqid {
default $http_x_request_id;
"" $request_id;
}
Le code ci-dessus stocke l'ID de demande dans la variable $reqid partir de laquelle il peut être utilisé ultérieurement dans les journaux.
log_format trace '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" $reqid';
Il devrait également être transmis aux services backend
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 transmettra toujours un en X-Request-ID tête X-Request-ID envoyé par le client ou générera son propre.
Voir la documentation sur les ID de requête HTTP .
Django
Lorsque vous utilisez Django comme django-log-request-id service Web, le package django-log-request-id peut être utilisé pour analyser et consigner les ID de demande.
Paramètres
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 de demande (demande / réponse)
Le même en X-Request-ID tête X-Request-ID peut être envoyé par un client dans une requête ou par un serveur dans une réponse.
X-Request-ID: f9ed4675f1c53513c61a3b3b4e25b4c0
La valeur ne comporte aucune signification intrinsèque, mais constitue simplement un jeton permettant d'identifier les demandes et les réponses corrélées.