http-headers
X-Request-ID
Suche…
Einführung
Mit dem X-Request-ID Header können einzelne Anforderungen an einen Webdienst (z. B. eine REST-API) vom Client an den Server und dessen Backends verfolgt werden.
Syntax
- X-Request-ID: <Wert>
Bemerkungen
Ein Client kann einen HTTP-Header X-Request-ID: some-value senden. Der Server sollte den bereitgestellten Wert verwenden und diesen in allen Anforderungen bereitstellen, die er an Back-End-Dienste zum Zwecke der Erledigung der Anforderung stellt. Beim Senden der Antwort sendet der Server den gleichen Header an den Client zurück. Zum Zweck der Ablaufverfolgung nimmt der Server den Wert in seine Protokolle auf, um das Korrelieren von Anforderungen und Antworten mit den entsprechenden Protokollen zu ermöglichen.
nginx
Reverse-Proxys können erkennen, ob ein Client einen X-Request-ID-Header bereitstellt, und ihn an den Back-End-Server weiterleiten. Wenn kein solcher Header bereitgestellt wird, kann ein zufälliger Wert angegeben werden.
map $http_x_request_id $reqid {
default $http_x_request_id;
"" $request_id;
}
Der obige Code speichert die Anforderungs-ID in der Variablen $reqid aus sie anschließend in Protokollen verwendet werden kann.
log_format trace '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" $reqid';
Es sollte auch an die Backend-Dienste weitergeleitet werden
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 wird immer einen vom Client gesendeten X-Request-ID Header weiterleiten oder einen eigenen generieren.
Siehe Dokumentation unter HTTP Request IDs .
Django
Wenn Sie Django als Webservice-Framework verwenden, können Sie mit dem Paket django-log-request-id Anforderungs-IDs analysieren und protokollieren.
die Einstellungen
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,
},
}
}
Anforderungs-ID (Anfrage / Antwort)
Derselbe X-Request-ID Header kann von einem Client in einer Anfrage oder von einem Server in einer Antwort gesendet werden.
X-Request-ID: f9ed4675f1c53513c61a3b3b4e25b4c0
Der Wert hat keine inhärente Bedeutung, sondern ist lediglich ein Token zum Identifizieren von korrelierenden Anforderungen und Antworten.