504 timeout del gateway dal server di backend

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 "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 seguente codice di risposta:

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>

Quali sono le cause dei 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 di richiesta API

L'applicazione client, i router e i processori di messaggi sono configurati con valori di timeout adeguati. Apigee Edge si aspetta 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 di timeout del gateway 504 dal server di backend è:

Causa Descrizione Istruzioni per la risoluzione dei problemi per
Il server di backend risponde con un timeout del gateway 504 Il server di backend scade e restituisce una risposta 504 Gateway Timeout al processore di messaggi. Utenti periferici di cloud privati e pubblici

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.

Diagnosi

Questa sezione spiega come diagnosticare correttamente un timeout del gateway 504. Procedure sia per i domini privati Sono elencati gli utenti del cloud pubblico.

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

  1. Abilita Trace nella UI di 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 sull'opzione Risposta ricevuta dal server di destinazione. in Trace. Nell'esempio mostrato, il tempo trascorso è 60.004 ms:

    dettagli della fase dall&#39;interfaccia utente

    La sezione Dettagli fase fornisce informazioni aggiuntive:

    • Evidenzia la risposta 504 Gateway Timeout ricevuta dal server di backend.
    • La sezione Contenuto della risposta mostra il corpo completo della risposta della di backend. Come osservato in precedenza, il formato e il contenuto del payload di risposta possono differire in base all'implementazione del server di backend.
    • L'intestazione della risposta > Server potrebbe indicare l'origine della risposta.
  5. Per visualizzare i dati di Analytics e confermare la diagnostica, fai clic sui dati di Analytics registrati. in Trace, come mostrato nella figura seguente:

    i dettagli delle analisi da trace

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

    dettagli della fase di analisi dall&#39;UI

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

    Intestazioni delle risposte Valore
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Controlla concatenamento dei 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 sull'icona Pulsante Mostra Curl per visualizzare l'alias host del server di backend.
    2. Se l'alias dell'host del server di backend punta a un alias host virtuale, il concatenamento del proxy è attivo posto. Ripeti i passaggi precedenti per ciascun proxy concatenato al fine di diagnosticare la causa del gateway 504 Timeout della risposta di errore. 504 Timeout del gateway che si verificano in proxy concatenati in altre fasi del il ciclo di richiesta/risposta può essere diagnosticato utilizzando questo playbook.
    3. Se l'alias dell'host del server di backend punta al server di backend, procedi con Risoluzione.

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

Chiama direttamente il server di backend per confermare lo stesso comportamento della 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 al server di backend come parte della richiesta.
  2. Se il servizio di backend è accessibile pubblicamente, puoi utilizzare il comando curl, Postman o qualsiasi altro client REST e richiamano direttamente l'API del server di backend.
  3. Se il server di backend è accessibile solo dai processori di messaggi, utilizza curl , Postman o qualsiasi altro client REST per richiamare l'API del server di backend direttamente Processore di messaggi.
  4. Se il servizio di backend restituisce una risposta 504 Timeout del gateway, procedi con Risoluzione.

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

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

  1. Visualizza i log di accesso 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 andare a buon fine con una risposta di errore 504.
  3. Se sono presenti risposte di errore 504, determina se la risposta ha origine dal 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 campi riportati nella tabella seguente, la risposta 504 ha origine 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 chain. ovvero il server di backend/endpoint di destinazione sta richiamando un altro proxy in Apigee. Se il proxy API è utilizzando il concatenamento dei proxy , ripeti i passaggi precedenti per ogni proxy concatenato al fine di diagnosticare la causa del timeout del gateway 504 . 504 È possibile eseguire la diagnostica dei timeout del gateway che si verificano in proxy concatenati in altre fasi utilizzando questo playbook.
  6. Se non sono presenti proxy concatenato, mentre la risposta all'errore 504 ha origine dal server di backend, vai alla Risoluzione.

Procedura 4: utilizzo del monitoraggio delle API (solo utenti del cloud pubblico)

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

Presentazione di uno scenario di esempio che illustra come risolvere i problemi 5xx relativi alle API utilizzando il monitoraggio delle API. Ad esempio: configurare un avviso per informare gli amministratori quando il numero di codici di stato 504 supera una determinata soglia.

Risoluzione

Utilizzando le procedure diagnostiche descritte sopra, puoi collaborare con il team del server di backend per risolvere il problema il problema nel server di backend. Ciò può includere la modifica dei timeout nei server di backend in tutti i 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 dell'organizzazione
  • Nome ambiente
  • Nome proxy API
  • Il comando curl completo utilizzato per riprodurre la risposta dell'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
  • File di traccia con richieste API che ricevono una risposta di errore 504 Gateway Timeout
  • Log di accesso 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