504 Gateway timeout - Target read timeout

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Non esiste una documentazione Apigee Edge equivalente per questo argomento.

Sintomo

Questo problema viene visualizzato come errore Gateway Timeout con stato HTTP 504.

Messaggio di errore

Potresti visualizzare questo errore in Monitoraggio API, Debug o altri strumenti. Il motivo TARGET_READ_TIMEOUT indica che il runtime Apigee non ha ricevuto una risposta tempestiva dal target durante l'esecuzione di una richiesta.

Il valore predefinito del timeout di lettura della destinazione (io.timeout.millis) è 55 secondi. Ciò significa che se dopo 55 secondi la destinazione non risponde, Apigee genera questo errore:

{"fault":{"faultstring":"Gateway Timeout",
  "detail":{"errorcode":"messaging.adaptors.http.flow.GatewayTimeout",
  "reason":"TARGET_READ_TIMEOUT"}}}

Possibili cause

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Target lento La destinazione non produce una risposta tempestiva. Apigee X e Apigee hybrid
Problema di connettività di TargetServer Si è verificato un problema di connettività generale con la destinazione quando <LoadBalancer> è configurato in TargetEndpoint. Apigee X e Apigee hybrid

Causa: target lento

Diagnosi

Puoi diagnosticare un problema di destinazione lenta utilizzando lo strumento di debug di Apigee:

  1. Crea una sessione di debug per il tuo proxy API.
  2. Nella sessione di debug, invia una richiesta e ispeziona l'output di debug.

Come puoi vedere nell'esempio precedente, la richiesta di destinazione ha superato i 55 secondi, ovvero il limite di timeout di destinazione predefinito. Il limite di tempo è configurabile e, se hai modificato il timeout, la durata della richiesta di destinazione corrisponderà al timeout impostato. Ad esempio, se il timeout è di 10 secondi, in questo scenario una richiesta di destinazione scadrà dopo 10 secondi. Questo comportamento di "target lento" è un'indicazione chiara che il target non risponde a una richiesta in tempo.

Risoluzione

Apigee consiglia di evitare di utilizzare target lenti. Ad esempio, se la latenza target normale è di 50 ms e riscontri una latenza di 55.000 ms, potresti dover verificare se c'è un problema con il target.

Se devi aumentare il timeout, segui questi passaggi:

  1. Fai clic sulla scheda Sviluppa nell'editor proxy.
  2. Nel riquadro di navigazione, seleziona l'endpoint di destinazione interessato.
  3. Nell'editor XML, trova l'elemento XML HTTPTargetConnection:

  4. Aggiungi la proprietà io.timeout.millis sotto l'elemento <HTTPTargetConnection> e specifica il nuovo limite di tempo in millisecondi, ad esempio:
    <HTTPTargetConnection>
      <URL>https://my-very-slow-target.example.com</URL>
      <Properties>
        <Property name="io.timeout.millis">120000</Property>
      </Properties>
    </HTTPTargetConnection>

    Nell'esempio precedente, il timeout viene aumentato a 120 secondi. Tieni presente che 300 secondi è il limite massimo. Per ulteriori informazioni, consulta Riferimento alla proprietà Endpoints.

  5. Salva la nuova revisione ed esegui il deployment del proxy.

Se il problema persiste, vai alla sezione Informazioni di diagnostica da raccogliere di seguito.

Causa: problema di connettività di TargetServer

Diagnosi

Apigee non rivela la causa esatta di un problema di connettività quando configuri la proprietà <LoadBalancer> dell'endpoint. Potresti essere in grado di dedurre la causa di un problema di connettività, dal tempo trascorso della richiesta di destinazione. Come metodo di debug, puoi provare a rimuovere completamente l'elemento <LoadBalancer> e provare a raggiungere la destinazione direttamente nel proxy.

Per diagnosticare il problema, utilizza lo strumento di debug.

  1. Crea una sessione di debug per il tuo proxy API.
  2. Nella sessione di debug, invia una richiesta e ispeziona l'output di debug.

Nell'esempio precedente, il timeout si è verificato dopo nove secondi. Poiché non sono 55 secondi, sai che la causa dell'errore non è il superamento del limite di timeout a causa di una destinazione lenta. Per impostazione predefinita, Apigee ritenta una connessione altre due volte se l'elemento <LoadBalancer> viene utilizzato in TargetEndpoint. Poiché sai che il tentativo di connessione è stato effettuato tre volte in totale e il timeout predefinito per un errore di connessione è di tre secondi (connect.timeout.millis), puoi presumere che il problema sia di connettività.

Risoluzione

Se viene confermato che il problema è un timeout della connessione, consulta Errore 503 Servizio non disponibile di peering VPC con TARGET_CONNECT_TIMEOUT.

Per altri problemi, rimuovi l'elemento <LoadBalancer> per eseguire il debug e rivelare il codice di errore esatto e controlla il codice nel catalogo degli errori.

Raccogliere informazioni diagnostiche

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e poi contatta l'assistenza Google Cloud:

  1. ID progetto e nome dell'organizzazione Apigee
  2. Nome o nomi del proxy e l'ambiente.
  3. Intervallo di tempo in cui si è verificato il problema.
  4. Frequenza del problema
  5. Nome host di destinazione.
  6. Sessione di debug con il problema.