504 timeout del gateway dal server di backend

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

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 dal 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 Timeout

Questo codice può essere seguito da un messaggio di errore simile a quello riportato di seguito:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

Che cosa causa i timeout del gateway?

Il percorso tipico per una richiesta API effettuata tramite Apigee Edge è Client -> Router -> Processore di messaggi -> Server di backend , come mostrato nella figura seguente:

Percorso della richiesta API

L'applicazione client, i router e i processori di messaggi sono configurati con valori di timeout appropriati. Apigee Edge prevede una risposta per ogni richiesta API entro un periodo di tempo basato sui valori di timeout. Se la risposta non viene ricevuta entro il periodo di tempo specificato, viene restituita una risposta 504 Gateway Timeout.

Possibili cause

In Apigee Edge, la causa tipica di una risposta 504 Gateway Timeout dal server di backend è:

Causa Descrizione Istruzioni per la risoluzione dei problemi per
Il server di backend risponde con 504 Gateway Timeout Il server di backend va in timeout e restituisce una risposta 504 Gateway Timeout al processore di messaggi. Utenti di Edge Private e Public Cloud

Il server di backend risponde con 504 Gateway Timeout

Il server di backend può rispondere con un codice di risposta HTTP 504 Gateway Timeout.

Diagnosi

Questa sezione spiega come diagnosticare correttamente un errore 504 Gateway Timeout. Sono elencate le procedure per gli utenti di Private e Public Cloud.

Procedura 1: utilizzo di Trace (utenti di Private e Public Cloud)

  1. Attiva Trace nell'UI Apigee per l'API interessata.
  2. Invia una richiesta al server di backend.
  3. Se la richiesta API non riuscita mostra una risposta 504 dal server di backend in Trace, la causa del timeout del gateway 504 è il server di backend.
  4. Per determinare il tempo di risposta, fai clic sulla fase Risposta ricevuta dal server di destinazione in Trace. Nell'esempio mostrato, il tempo trascorso è di 60004 ms:

    dettagli della fase dall'UI

    La sezione Dettagli fase fornisce ulteriori informazioni:

    • Evidenzia la risposta 504 Gateway Timeout ricevuta dal server di backend.
    • La sezione Contenuto della risposta mostra il corpo completo della risposta del server di backend. Come indicato in precedenza, il formato e il contenuto del payload della risposta possono variare a seconda dell'implementazione del server di backend.
    • La sezione Intestazione della risposta > Server può indicare l'origine della risposta.
  5. Per visualizzare i dati di Analytics e confermare la diagnosi, fai clic sulla fase Dati di Analytics registrati in Trace, come mostrato nella figura seguente:

    Dettagli dell'analisi dalla traccia

    La sezione Intestazioni delle risposte di Dettagli fase mostra i valori di X-Apigee-fault-code e X-Apigee-fault-source, come mostrato nella figura seguente:

    dettagli della fase di analisi dall'interfaccia utente

    Se questi campi contengono i valori mostrati nella tabella seguente, la risposta di errore 504 proviene dal server di backend:

    Intestazioni delle risposte Valore
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Verifica la presenza di proxy chaining. Segui questi passaggi per determinare se il server di backend sta richiamando un altro proxy in Apigee:
    1. Torna alla fase Richiesta inviata al server di destinazione e fai clic sul pulsante Mostra curl per visualizzare l'alias dell'host del server di backend.
    2. Se l'alias dell'host del server di backend rimanda a un alias dell'host virtuale, è in atto il proxy chaining in place. Ripeti i passaggi precedenti per ogni proxy concatenato per diagnosticare la causa della risposta di errore 504 Gateway Timeout. I timeout del gateway 504 che si verificano nei proxy concatenati in altre fasi del ciclo richiesta/risposta possono essere diagnosticati utilizzando questa guida.
    3. Se l'alias dell'host del server di backend rimanda al server di backend, vai alla sezione Risoluzione.

Procedura 2: richiamare direttamente l'API del server di backend (utenti di Public e Private Cloud)

Chiama direttamente il server di backend per confermare lo stesso comportamento di risposta 504 Gateway Timeout riscontrato quando la richiesta viene effettuata tramite Apigee Edge.

  1. Assicurati di avere tutte le intestazioni, i parametri di query e le credenziali necessarie da passare al server di backend come parte della richiesta.
  2. Se il servizio di backend è accessibile pubblicamente, puoi utilizzare il curl comando, Postman o qualsiasi altro client REST e richiamare direttamente l'API del server di backend.
  3. Se il server di backend è accessibile solo dai processori di messaggi, utilizza il curl comando, Postman o qualsiasi altro client REST per richiamare direttamente l'API del server di backend dal processore di messaggi.
  4. Se il servizio di backend restituisce una risposta 504 Gateway Timeout, vai alla sezione Risoluzione.

Procedura 3: controllare i log degli accessi NGINX (solo utenti di Private Cloud)

I log degli accessi NGINX possono aiutarti a determinare se la risposta di errore 504 è stata inviata dal server di backend. Questa operazione è particolarmente utile se il problema si è verificato in passato, è intermittente o non può essere acquisito in Trace. Segui questi passaggi per controllare i log degli accessi NGINX:

  1. Visualizza i log degli accessi NGINX utilizzando questo comando:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. Controlla la presenza di risposte di errore 504 per il proxy API interessato. Puoi controllare un periodo di tempo specifico, se il problema si è verificato in passato, o determinare se le richieste non vanno ancora a buon fine con una risposta di errore 504.
  3. Se sono presenti risposte di errore 504, determina se la risposta di errore proviene dal server di backend.
  4. La figura seguente mostra un esempio di voce di log NGINX che mostra una risposta di errore 504 causata dal server di destinazione:

    log nginx di esempio

    Se i campi X-Apigee-fault-source e X-Apigee-fault-code contengono i valori mostrati nella tabella seguente, la risposta 504 proviene dal server di backend:

    Intestazioni delle risposte Valore
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Esamina il proxy API interessato per verificare la presenza di proxy chaining ovvero se il server di backend/endpoint di destinazione sta richiamando un altro proxy in Apigee. Se il proxy API utilizza il proxy chaining , ripeti i passaggi precedenti per ogni proxy concatenato per diagnosticare la causa della risposta di errore 504 Gateway Timeout. I timeout del gateway 504 che si verificano nei proxy concatenati in altre fasi possono essere diagnosticati utilizzando questa guida.
  6. Se non è presente proxy chaining e la risposta di errore 504 proviene dal server di backend, vai alla sezione Risoluzione.

Procedura 4: utilizzo di API Monitoring (solo utenti di Public Cloud)

API Monitoring ti consente di isolare rapidamente le aree problematiche per diagnosticare i problemi di errore, prestazioni e latenza e la loro origine, ad esempio app per sviluppatori, proxy API, target di backend o la piattaforma API.

Segui un esempio di scenario che mostra come risolvere i problemi 5xx con le API utilizzando API Monitoring. Ad esempio, configura un avviso per notificare agli amministratori quando il numero di codici di stato 504 supera una determinata soglia.

Risoluzione

Utilizzando le procedure di diagnostica descritte sopra, puoi collaborare con il team del server di backend per risolvere il problema nel server di backend. Ciò potrebbe includere la regolazione dei timeout nei server di backend o timeout nei bilanciatori del carico davanti ai server di destinazione.

Raccogliere informazioni di diagnostica

Se il problema persiste, condividi le seguenti informazioni di diagnostica con l'assistenza Apigee.

Se sei un utente di Public Cloud, fornisci le seguenti informazioni:

  • Nome dell'organizzazione
  • Nome ambiente
  • Nome del proxy API
  • Comando curl completo utilizzato per riprodurre la risposta di errore 504
  • File di traccia con richieste API che ricevono una risposta di errore 504 Gateway Timeout

Se sei un utente di Private Cloud, fornisci le seguenti informazioni:

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome ambiente
  • Bundle del proxy API
  • File di traccia con richieste API che ricevono una risposta di errore 504 Gateway Timeout
  • Log degli accessi NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • Log del processore di messaggi
    /opt/apigee/var/log/edge-message-processor/logs/system.log