504 timeout del gateway dal server di backend

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP 504 con il messaggio "Timeout gateway" 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 codice di risposta seguente:

HTTP/1.1 504 Gateway Timeout

Questo codice può essere seguito da un messaggio di errore simile al seguente:

<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 richiesta API

L'applicazione client, i router e i processori di messaggi sono configurati con valori di timeout adeguati. Apigee Edge prevede una risposta per ogni richiesta API entro un periodo di tempo in base ai valori di timeout. Se la risposta non viene ricevuta entro il periodo di tempo specificato, viene restituita una risposta 504 Gateway Timeout (Timeout del gateway).

Possibili cause

In Apigee Edge, la causa tipica di una risposta di timeout del gateway 504 dal server di backend è:

Causa Descrizione Istruzioni per la risoluzione dei problemi per
Il server di backend risponde con il timeout del gateway 504 Il server di backend scade e restituisce una risposta di timeout del gateway 504 al processore di messaggi. Utenti del cloud privato e pubblico Edge

Il server di backend risponde con un timeout del gateway 504

Il server di backend potrebbe rispondere con un codice di risposta HTTP 504 Timeout gateway.

Diagnostica

Questa sezione spiega come diagnosticare correttamente un timeout del gateway 504. Sono elencate le procedure per gli utenti di cloud privato e pubblico.

Procedura 1: utilizzo di Trace (utenti di cloud privato e pubblico)

  1. Abilita Trace nell'interfaccia utente di Apigee per l'API interessata.
  2. Invia una richiesta al server di backend.
  3. Se la richiesta API in errore mostra una risposta 504 del 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 è pari a 60.004 ms:

    i dettagli della fase dall&#39;interfaccia utente

    La sezione Dettagli fase fornisce ulteriori informazioni:

    • evidenzia la risposta 504 Gateway Timeout (Timeout gateway) 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 i contenuti del payload della risposta potrebbero variare in base all'implementazione del server di backend.
    • La sezione Intestazione della risposta > Server potrebbe indicare l'origine della risposta.
  5. Per visualizzare i dati di Analytics e confermare la diagnostica, fai clic sulla fase Dati di Analytics registrati in Trace, come mostrato nella figura seguente:

    Dettagli di analisi dall&#39;analisi

    La sezione Intestazioni della risposta dei dettagli della fase mostra i valori X-Apigee-fault-code e X-Apigee-fault-source, come mostrato nella figura seguente:

    dettagli della fase di analisi dall&#39;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 un concatenamento di proxy. 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 arricciatura per visualizzare l'alias host del server di backend.
    2. Se l'alias dell'host del server di backend rimanda a un alias host virtuale, il concatenamento del proxy è attivo. Ripeti i passaggi precedenti per ogni proxy concatenato per diagnosticare la causa della risposta di errore relativa al timeout del gateway 504. I timeout dei gateway 504 che si verificano nei proxy concatenati in altre fasi del ciclo di richiesta/risposta possono essere diagnosticati utilizzando questo playbook.
    3. Se l'alias dell'host del server di backend rimanda al server di backend, vai alla risoluzione.

Procedura 2: richiama direttamente l'API del server di backend (utenti cloud pubblici e privati)

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

  1. Assicurati di disporre di tutte le intestazioni, i parametri di query e le credenziali necessari per il passaggio al server di backend nell'ambito della richiesta.
  2. Se il servizio di backend è accessibile pubblicamente, puoi utilizzare il comando curl, 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 comando curl, Postman o qualsiasi altro client REST per richiamare l'API del server di backend direttamente dal processore di messaggi.
  4. Se il servizio di backend restituisce una risposta 504 di timeout del gateway, vai alla risoluzione.

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

I log degli accessi di NGINX possono aiutare a determinare se la risposta di errore 504 è stata inviata dal server di backend. Questo è 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 di NGINX:

  1. Visualizza i log degli accessi NGINX utilizzando questo comando:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. Verifica 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 continuano a non essere completate con una risposta di errore 504.
  3. In caso di risposte di errore 504, determina se la risposta di errore proviene dal server di backend.
  4. La figura seguente è 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 il concatenamento del proxy, ovvero il server di backend/l'endpoint di destinazione sta richiamando un altro proxy in Apigee. Se il proxy API utilizza un concatenamento del proxy , ripeti i passaggi precedenti per ogni proxy concatenato per diagnosticare la causa della risposta di errore 504 Timeout del gateway. I timeout dei gateway 504 che si verificano in proxy concatenati in altre fasi possono essere diagnosticati utilizzando questo playbook.
  6. Se non è presente un concatenamento del proxy e la risposta di errore 504 proviene dal server di backend, vai alla risoluzione.

Procedura 4: utilizzo di API Monitoring (solo utenti del cloud pubblico)

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

Illustra uno scenario di esempio che illustra come risolvere i problemi 5xx relativi alle tue API utilizzando API Monitoring. Ad esempio, puoi configurare un avviso per inviare una notifica 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ò può includere la regolazione dei timeout nei server di backend o dei timeout in eventuali bilanciatori del carico davanti ai server di destinazione.

Raccogliere informazioni diagnostiche

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

Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:

  • Nome organizzazione
  • Nome ambiente
  • Nome 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 di timeout del gateway 504

Se sei un utente del cloud privato, fornisci le seguenti informazioni:

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome ambiente
  • Bundle proxy API
  • Un file di traccia con richieste API che ricevono una risposta di errore di Timeout gateway 504
  • 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