Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP 504
con il messaggio
Gateway Timeout
in risposta alle chiamate API.
Questa risposta di errore indica che il client non ha ricevuto una risposta tempestiva da Apigee Edge o il server di backend durante l'esecuzione di una chiamata API.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 504 Gateway Time-out
Quando chiami questo proxy utilizzando cURL o un browser web, potresti visualizzare il seguente errore:
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
Quali sono le cause dei timeout?
Il percorso tipico per una richiesta API tramite la piattaforma Edge è Client > Router > Messaggio Processore > Server di backend, come illustrato nella figura seguente:
Tutti i componenti del flusso di runtime Apigee Edge, inclusi client, router, messaggi
I processori e i server di backend sono configurati con valori di timeout predefiniti adeguati al fine di
garantire che il completamento delle richieste API non richieda troppo tempo. Se uno dei componenti della
non ricevono la risposta dal componente a monte entro il periodo di tempo specificato
configurazione di timeout, il componente specifico scade e solitamente restituisce un
504 Gateway Timeout
.
Questo playbook descrive come risolvere un errore 504
causato da
il timeout del router.
Timeout sul router
Il timeout predefinito configurato sui router in Apigee Edge è di 57 secondi. Questo è il numero massimo periodo di tempo in cui un proxy API può essere eseguito dal momento in cui la richiesta API viene ricevuta su Edge la risposta viene rinviata, inclusa la risposta del backend e tutti i criteri eseguiti. È possibile eseguire l'override del timeout predefinito sui router/host virtuali come spiegato in Configurazione del timeout di I/O sui router.
Possibili cause
In Edge, le cause tipiche dell'errore 504 Gateway Timeout
causato dall'errore
Il timeout del router è il seguente:
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
Configurazione del timeout non corretta sul router | Ciò accade se il router è configurato con un periodo di timeout I/O non corretto. | Utenti perimetrali di cloud pubblici e privati |
Passaggi diagnostici comuni
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
- Monitoraggio delle API
- Log di accesso NGINX
Monitoraggio delle API
Per diagnosticare l'errore utilizzando API Monitoring:
- Vai al menu Analizza > Monitoraggio delle API > Esamina.
- Filtra per
5xx
errori e seleziona il periodo di tempo. - Traccia il Codice di stato in base all'Ora.
-
Fai clic sulla cella specifica che mostra
504
errori per visualizzare ulteriori dettagli e visualizzare log relativi a questi errori, come illustrato di seguito:Esempio di errore 504
- Nel riquadro a destra, fai clic su Visualizza log.
Nella finestra Log del traffico, prendi nota dei seguenti dettagli per alcuni errori
504
:- Richiesta: fornisce il metodo di richiesta e l'URI utilizzati per effettuare le chiamate
- Tempo di risposta: fornisce il tempo totale trascorso per la richiesta.
Nell'esempio precedente,
- La richiesta rimanda a
GET /test-timeout
. - Il Tempo di risposta è pari a
57.001
secondi. Ciò indica che il router si è verificato un timeout prima che il processore di messaggi possa rispondere perché il valore è molto vicino al timeout I/O predefinito impostato sul router, che è 57 secondi.
Puoi inoltre ottenere tutti i log utilizzando lo strumento Monitoraggio API API GET logs. Ad esempio, eseguendo query sui log per
org
,env
,timeRange
, estatus
, potresti scaricare tutti i log per le transazioni in cui il timeout del client.Poiché il monitoraggio delle API imposta il proxy su
-
(non impostato) per questi504
errori, puoi usare l'API (Log API) per recuperare il proxy associato per l'host virtuale e il percorso.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Controlla il Tempo di risposta per verificare la presenza di altri
504
errori e controlla per vedere se il Tempo di risposta è coerente (il valore di timeout di I/O impostato sul router che è di 57 secondi) per tutti gli errori504
.
Log di accesso NGINX
Per diagnosticare l'errore utilizzando i log di accesso NGINX:
- Controlla i log di accesso NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Cerca per vedere se ci sono errori
504
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che non vanno a buon fine504
. - Prendi nota delle seguenti informazioni per alcuni errori di tipo
504
:- Tempo di risposta
- URI della richiesta
In questo esempio vediamo le seguenti informazioni:
-
Tempo di richiesta:
57.001
secondi. Ciò indica che Timeout del router dopo 57.001 secondi. - Richiesta:
GET /test-timeout
- Alias host:
myorg-test.apigee.net
-
Verifica che l'Ora della richiesta corrisponda al timeout di I/O configurato sul router/host virtuale. Se sì, significa che il router ha avuto un timeout prima della Il processore di messaggi non ha risposto entro questo periodo.
Nell'esempio di voce del log di accesso NGINX mostrato sopra, il campo Request Il tempo di
57.001
secondi è molto vicino al timeout di I/O predefinito impostato sul router. Questo indica chiaramente che il router ha avuto un timeout prima del messaggio Il processore potrebbe rispondere. - Determinare il proxy API per il quale è stata effettuata la richiesta utilizzando il percorso di base nella Campo Richiesta .
Causa: configurazione del timeout non corretta sul router
Diagnosi
- Determina se gli errori
504
sono causati da un timeout del router prima del giorno il processore di messaggi potrebbe rispondere. A questo scopo, controlla se Response Time (Tempo di risposta) in Monitoraggio API/Request Time (Ora della richiesta) nel router (entrambi i campi) rappresentano le stesse informazioni,ma sono chiamati con nomi diversi) corrisponde ai Timeout I/O configurato sul router/host virtuale e sui campi Origine errore, Errore Proxy e Fault Code sono impostati su-
tramite il monitoraggio delle API o l'accesso NGINX come spiegato in Passaggi di diagnostica comuni. -
Verifica che il valore di timeout di I/O configurato sul router o su un host virtuale specifico sia inferiore rispetto a quello configurato sul processore di messaggi o sul proxy API specifico.
A tale scopo, segui i passaggi descritti in questa sezione.
Verifica del timeout di I/O sugli host virtuali
UI Edge
Per verificare il timeout dell'host virtuale utilizzando la UI Edge:
- Accedi alla UI Edge.
- Vai ad Amministrazione > Host virtuali.
- Seleziona un ambiente specifico in cui si verifica il problema di timeout.
- Seleziona l'host virtuale specifico per il quale vuoi verificare il valore di timeout di I/O.
- In Proprietà, visualizza il valore Timeout lettura proxy in secondi.
Nell'esempio precedente, il Timeout lettura proxy è configurato con il valore
120
. Ciò significa che il timeout di I/O configurato su questo host virtuale è di 120 secondi.
API di gestione
Puoi anche verificare il Timeout lettura proxy utilizzando le seguenti API di gestione:
-
Esegui la Recupera l'API virtual host per ottenere la configurazione
virtualhost
come mostrato di seguito:Utente cloud pubblico
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Utente Private Cloud
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Dove:
ORGANIZATION_NAME è il nome dell'organizzazione
ENVIRONMENT_NAME è il nome dell'ambiente
VIRTUALHOST_NAME è il nome dell'host virtuale
-
Controlla il valore configurato per la proprietà
proxy_read_timeout
Esempio di definizione host virtuale
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }
Nell'esempio precedente,
proxy_read_timeout
è configurato con il valore120
. Ciò significa che il timeout di I/O configurato su questo host virtuale è 120 secondi.
Verifica del timeout di I/O sul file router.properties
- Accedi a un router.
- Cerca la proprietà
proxy_read_timeout
nel directory/opt/nginx/conf.d
e controllare se è stata impostata con il nuovo valore come segue:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Controlla il valore impostato per la proprietà
proxy_read_timeout
nello specifico di configurazione dell'host.Esempio di risultato del comando grep
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
Nell'output di esempio riportato sopra, puoi notare che la proprietà
proxy_read_timeout
ha è stato impostato con il nuovo valore57
in0-default.conf
, che è di configurazione predefinito per l'host virtuale predefinito. Questo indica che il timeout di I/O configurato su 57 secondi sul router per l'host virtuale predefinito. Se disponi se si tratta di più host virtuali, le informazioni verranno visualizzate per ognuno di essi. Ottieni il valore diproxy_read_timeout
per l'host virtuale specifico che hai utilizzato per creare l'API chiamate non riuscite con504
errori.
Verifica del timeout di I/O nel proxy API
Puoi visualizzare il timeout di I/O come segue:
- Endpoint di destinazione del proxy API
- Norme ServiceCallout del proxy API
Visualizza il timeout di I/O nell'endpoint di destinazione del proxy API
- Nella UI Edge, seleziona il proxy API specifico in cui desideri visualizzare l'I/O di timeout.
- Seleziona l'endpoint di destinazione specifico che vuoi controllare.
- Visualizza la proprietà
io.timeout.millis
con un valore appropriato sotto la Elemento<HTTPTargetConnection>
inTargetEndpoint
configurazione.Ad esempio, il timeout I/O nel codice che segue è impostato su 120 secondi:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
Visualizza il timeout I/O nel criterio ServiceCallout del proxy API
- Nella UI Edge, seleziona il proxy API specifico in cui desideri visualizzare il nuovo I/O di timeout per il criterio ServiceCallout.
- Seleziona lo specifico criterio ServiceCallout che vuoi controllare.
-
Visualizza l'elemento
<Timeout>
con un valore appropriato sotto la Configurazione di<ServiceCallout>
.Ad esempio, il timeout I/O del seguente codice sarà 120 secondi:
<Timeout>120000</Timeout>
Verifica del timeout di I/O sui processori di messaggi
- Accedi al computer del processore di messaggi.
-
Cerca la proprietà
HTTPTransport.io.timeout.millis
nel/opt/apigee/edge-message-processor/conf
utilizzando il comando seguente:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
Esempio di output
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- Nell'output di esempio precedente, nota che la proprietà
HTTPTransport.io.timeout.millis
è stato impostato con il valore55000
inhttp.properties
. Questo indica che il timeout di I/O è stato configurato correttamente 55 secondi sul processore di messaggi.
Una volta determinato il timeout configurato sul router e sul processore di messaggi, verifica se Il router/l'host virtuale è stato configurato con un valore di timeout inferiore rispetto a quello della Processore di messaggi/proxy API.
Prendi nota dei valori impostati su tutti i livelli, come illustrato nella tabella seguente:
Timeout sul router (secondi) | Timeout sull'host virtuale (secondi) | Timeout sul processore di messaggi (secondi) | Timeout sul proxy API (secondi) |
---|---|---|---|
57 | - | 55 | 120 |
In questo esempio,
- Il valore predefinito di 57 secondi è configurato sul router.
- Il valore di timeout non è impostato sull'host virtuale specifico. Ciò significa che utilizzerà il valore predefinito di 57 secondi configurato sul router stesso.
- Nel processore di messaggi viene configurato un valore predefinito di 55 secondi.
- Tuttavia, nel proxy API specifico viene configurato un valore di 120 secondi.
Tieni presente che il valore di timeout più alto è configurato solo sul proxy API, ma il router è ancora
configurato con 57 secondi. Di conseguenza, il router scade a 57 secondi mentre il
Il processore/backend sta ancora elaborando la tua richiesta. Questo fa sì che il router risponda con
504 Gateway Timeout
errore nell'applicazione client.
Risoluzione
Per configurare il timeout I/O corretto sul router e sul router, procedi nel seguente modo: Processore per risolvere questo problema.
- Consulta Best practice per la configurazione del timeout di I/O al fine di comprendere quali valori di timeout deve essere impostato su diversi componenti coinvolti nel flusso di richieste API attraverso Apigee Edge.
- Nell'esempio precedente, se ti rendi conto che è necessario impostare un valore di timeout più alto
perché il server di backend richiede più tempo e il timeout è stato aumentato
del processore di messaggi su 120 secondi, quindi imposta un valore di timeout più alto per
esempio:
123 seconds
sul router. Per evitare conseguenze su tutti i proxy API A causa del nuovo valore di timeout, imposta il valore di123 seconds
solo sulla un host virtuale specifico usato nel proxy API specifico. - Segui le istruzioni in Configurazione del timeout di I/O sui router per impostare il timeout sull'host virtuale.