Ricerca…


introduzione

L'intestazione X-Request-ID può essere utilizzata per tracciare singole richieste a un servizio Web (come un'API REST) ​​dal client al server e ai relativi backend.

Sintassi

  • X-Request-ID: <valore>

Osservazioni

Un client può inviare un'intestazione HTTP X-Request-ID: some-value . Il server deve utilizzare il valore fornito e fornirlo in tutte le richieste che effettua ai servizi di back-end allo scopo di servire la richiesta iniziale. Quando si invia la risposta, il server restituirà la stessa intestazione al client. Ai fini della traccia, il server includerà il valore nei suoi registri, per abilitare le richieste e le risposte correlate con i registri corrispondenti.

nginx

I proxy inversi possono rilevare se un client fornisce un'intestazione X-Request-ID e trasmetterlo al server di back-end. Se non viene fornita alcuna intestazione, può fornire un valore casuale.

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

Il codice sopra memorizza l'ID richiesta nella variabile $reqid da dove può essere successivamente utilizzato nei log.

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

Dovrebbe anche essere trasmesso ai servizi di back-end

    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 trasmetterà sempre un header X-Request-ID inviato dal cliente, o genererà il proprio.

Vedere la documentazione su ID richiesta HTTP .

Django

Quando si utilizza Django come framework di servizi Web, è possibile utilizzare il pacchetto django-log-request-id per analizzare e registrare gli ID di richiesta.

impostazioni

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 richiesta (richiesta / risposta)

La stessa intestazione X-Request-ID può essere inviata da un client in una richiesta o da un server in una risposta.

X-Request-ID: f9ed4675f1c53513c61a3b3b4e25b4c0

Il valore non ha alcun significato intrinseco, ma è solo un token per identificare richieste e risposte correlate.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow