Zoeken…


Invoering

De X-Request-ID header kan worden gebruikt om individuele aanvragen naar een webservice (zoals een REST API) van de client naar de server en de backends te traceren.

Syntaxis

  • X-Request-ID: <waarde>

Opmerkingen

Een client kan een HTTP-header X-Request-ID: some-value verzenden X-Request-ID: some-value . De server moet de opgegeven waarde gebruiken en deze opgeven in alle aanvragen die hij doet om services te back-uppen om de initiële aanvraag te dienen. Wanneer het antwoord wordt verzonden, retourneert de server dezelfde koptekst terug naar de client. Voor het traceren zal de server de waarde in zijn logboeken opnemen, zodat aanvragen en antwoorden met de bijbehorende logboeken kunnen worden gecorreleerd.

nginx

Omgekeerde proxy's kunnen detecteren of een client een X-Request-ID-header levert en deze doorgeven aan de backend-server. Als een dergelijke header niet wordt opgegeven, kan deze een willekeurige waarde opleveren.

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

De bovenstaande code slaat de aanvraag-ID op in de variabele $reqid van waaruit het vervolgens in logboeken kan worden gebruikt.

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

Het moet ook worden doorgegeven aan de backend-services

    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 geeft altijd een X-Request-ID header door die door de client is verzonden of genereert een eigen.

Zie documentatie bij HTTP Request ID's .

Django

Wanneer Django wordt gebruikt als een webserviceframework, kan het pakket django-log-request-id worden gebruikt om django-log-request-id 's te parseren en vast te leggen.

instellingen

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

Verzoek-ID (verzoek / antwoord)

Dezelfde X-Request-ID header kan worden verzonden door een client in een aanvraag, of door een server in een reactie.

X-Request-ID: f9ed4675f1c53513c61a3b3b4e25b4c0

De waarde heeft geen inherente betekenis, maar is slechts een token om samenhangende verzoeken en antwoorden te identificeren.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow