Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Sintomo
L'applicazione client riceve un errore di timeout per le richieste API oppure la richiesta viene terminata improvvisamente mentre la richiesta API è ancora in esecuzione su Apigee.
Osserverai il codice di stato 499
per queste richieste API in API Monitoring e
Log di accesso NGINX. A volte, vedrai codici di stato diversi in API Analytics perché
mostra il codice di stato restituito dal processore di messaggi.
Messaggio di errore
Le applicazioni client potrebbero visualizzare errori quali:
curl: (28) Operation timed out after 6001 milliseconds with 0 out of -1 bytes received
Quali sono le cause dei timeout del client?
Il percorso tipico per una richiesta API su Edge Platform è Cliente > Router > Processore di messaggi > Server di backend, come illustrato nella figura seguente:
I router e i processori di messaggi all'interno della piattaforma Apigee Edge sono configurati con valori di timeout predefiniti per garantire che il completamento delle richieste API non richieda troppo tempo.
Timeout sul client
Le applicazioni client possono essere configurate con un valore di timeout adeguato in base alle proprie esigenze.
I client come i browser web e le app mobile hanno dei timeout definiti dal sistema operativo.
Timeout sul router
Il timeout predefinito configurato sui router è 57 secondi. Si tratta dell'intervallo di tempo massimo Il proxy API può essere eseguito dal momento in cui la richiesta API viene ricevuta su Edge fino a quando la risposta non viene che viene restituito, inclusa la risposta del backend e tutti i criteri eseguiti. Il valore predefinito il timeout sui router e sugli host virtuali come spiegato Configurazione del timeout di I/O sui router.
Timeout sui processori di messaggi
Il timeout predefinito configurato sui processori di messaggi è 55 secondi. Questo è l'importo massimo di tempo che il server di backend può impiegare per elaborare la richiesta e rispondere al messaggio Processore. Il timeout predefinito può essere ignorato sui processori di messaggi o all'interno dell'API Proxy come spiegato in Configurazione del timeout di I/O sui processori di messaggi.
Se il client chiude la connessione con il router prima del timeout del proxy API,
osserverà l'errore di timeout per la specifica richiesta API. Il codice di stato 499 Client
Closed Connection
è stato registrato nel router per queste richieste, che possono essere osservate nell'API
Monitoraggio e log degli accessi NGINX.
Possibili cause
In Edge, le cause tipiche dell'errore 499 Client Closed Connection
sono:
Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
---|---|---|
Il client ha chiuso bruscamente la connessione | Questo accade quando il client chiude la connessione perché l'utente finale ha annullato la una richiesta prima che venga completata. | Utenti di cloud pubblico e privato |
Timeout applicazione client | Questo accade quando l'applicazione client scade prima che il proxy API abbia il tempo di elaborare e inviare la risposta. In genere ciò si verifica quando il timeout del client è inferiore rispetto al timeout del router. | Utenti di cloud pubblico e privato |
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
4xx
errori e seleziona il periodo di tempo. - Traccia il Codice di stato in base all'Ora.
- Seleziona una cella che contiene
499
errori, come mostrato di seguito: - Le informazioni sull'errore
499
verranno visualizzate nel riquadro a destra come mostrato di seguito: - Nel riquadro a destra, fai clic su Visualizza log.
Nella finestra Log del traffico, prendi nota dei seguenti dettagli per alcuni
499
errori:- 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.
Puoi inoltre ottenere tutti i log utilizzando lo strumento di monitoraggio delle API API GET logs. Per ad esempio eseguendo query sui log per
org
,env
,timeRange
estatus
, potrai scaricare tutti i log delle transazioni in cui il client è scaduto.Poiché il monitoraggio delle API imposta il proxy su
-
per HTTP499
errori, puoi utilizzare l'API (API Logs) per ottenere 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://VIRTUAL_HOST/BASEBATH" -H "Authorization: Bearer $TOKEN"
- Verifica la presenza di altri
499
errori nel Tempo di risposta e verifica se il Tempo di risposta è coerente (diciamo 30 secondi) in tutte le499
errori.
Log di accesso NGINX
Per diagnosticare l'errore utilizzando i log di accesso NGINX:
- Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per determinare
le informazioni principali sugli errori HTTP
499
. - 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
499
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che non vanno a buon fine499
. - Prendi nota delle seguenti informazioni per alcuni degli errori di
499
:- Tempo totale di risposta
- URI della richiesta
- User agent
Esempio di errore 499 dal log degli accessi NGINX:
2019-08-23T06:50:07+00:00 rrt-03f69eb1091c4a886-c-sy 50.112.119.65:47756 10.10.53.154:8443 10.001 - - 499 - 422 0 GET /v1/products HTTP/1.1 - okhttp/3.9.1 api.acme.org rrt-03f69eb1091c4a886-c-sy-13001-6496714-1 50.112.119.65 - - - - - - - -1 - - dc-1 router-pod-1 rt-214-190301-0020137-latest-7d 36 TLSv1.2 gateway-1 dc-1 acme prod https -
Per questo esempio, sono visibili le seguenti informazioni:
- Tempo di risposta totale:
10.001
secondi. Ciò indica che timeout del client dopo 10,001 secondi - Richiesta:
GET /v1/products
- Organizzatore:
api.acme.org
- User agent:
okhttp/3.9.1
- Verifica che il tempo di risposta totale e lo user agent siano coerenti
in tutti e
499
gli errori.
Causa: il client ha chiuso improvvisamente la connessione
Diagnosi
- Quando un'API viene chiamata da un'app a pagina singola in esecuzione in un browser o in un'applicazione mobile, il browser interromperà la richiesta se l'utente finale chiude improvvisamente il browser, naviga a un'altra pagina web nella stessa scheda o interrompe il caricamento della pagina facendo clic o toccando interrompi il caricamento.
- In questo caso, le transazioni con stato HTTP
499
variano in genere nel tempo di elaborazione delle richieste (Tempo di risposta) per ciascuna richiesta. -
Puoi stabilire se questa è la causa confrontando il Tempo di risposta e verificando se
è diverso per ogni errore
499
che utilizza il monitoraggio delle API o l'accesso NGINX come spiegato in Passaggi comuni di diagnostica.
Risoluzione
- Questo è normale e di solito non è motivo di preoccupazione se gli errori HTTP
499
si verificano in piccole quantità. -
Se si verifica spesso per lo stesso percorso dell'URL, è possibile che lo stesso proxy associati al percorso è molto lento e gli utenti non vogliono aspettare.
Quando sai quale proxy potrebbe essere interessato, utilizza il Latenza dashboard di analisi per esaminare ulteriormente la causa della latenza del proxy.
- In questo caso, per determinare il proxy interessato, segui i passaggi nella Passaggi diagnostici comuni.
- Utilizza la Dashboard per l'analisi della latenza per esaminare ulteriormente la causa della latenza del proxy risolvere il problema.
- Se noti che la latenza è prevista per il proxy specifico, è possibile che per informare gli utenti che il proxy impiegherà un po' di tempo per rispondere.
Causa: timeout dell'applicazione client
Ciò può verificarsi in una serie di scenari.
-
È previsto che il completamento della richiesta richieda un certo tempo (diciamo 10 secondi)
in normali condizioni di funzionamento. Tuttavia, l'applicazione client è impostata con un errore
valore di timeout (ad esempio 5 secondi) che causa il timeout dell'applicazione client prima del
la richiesta API viene completata, generando
499
. In questo caso, dobbiamo impostare il timeout del client su un valore appropriato. - Un server o un callout di destinazione sta richiedendo più tempo del previsto. In questo caso, devi correggere i componenti appropriati e i valori di timeout in modo appropriato.
- Il cliente non aveva più bisogno della risposta e pertanto l'ha interrotta. Questo può accadere in caso di utenti a frequenza elevata, come il completamento automatico o il polling breve.
Diagnosi
Log di accesso di API Monitoring o NGINX
Diagnostica l'errore utilizzando i log di accesso di API Monitoring o NGINX:
- Controlla i log di monitoraggio delle API o di accesso NGINX per verificare le transazioni HTTP
499
come spiegato in Passaggi comuni per la diagnostica. - Determina se il tempo di risposta è coerente per tutti gli errori
499
. - Se sì, è possibile che una determinata applicazione client abbia configurato un timeout fisso
dalla sua parte. Se un proxy API o un server di destinazione risponde lentamente, si verifica un timeout del client
prima del timeout del proxy, generando grandi quantità di
499s
HTTP per lo stesso percorso URI. In questo caso, determina lo User agent dai log di accesso NGINX può aiutarti a determinare l'applicazione client specifica. - È anche possibile che ci sia un bilanciatore del carico davanti ad Apigee, come Akamai, F5, AWS ELB e così via. Se Apigee è in esecuzione dietro un bilanciatore del carico personalizzato, la richiesta del bilanciatore del carico deve essere configurato in modo da essere superiore al timeout dell'API Apigee. Di predefinito, il router Apigee scade dopo 57 secondi, quindi è adatto configurare una richiesta di 60 secondi sul bilanciatore del carico.
Trace
Diagnosticare l'errore utilizzando Trace
Se il problema è ancora attivo (499
errori continuano a verificarsi), esegui la
seguenti passaggi:
- Attiva il sessione di tracciamento per l'API interessata nella UI Edge.
- Attendi che si verifichi l'errore oppure, se hai ricevuto la chiamata API, effettua alcune chiamate API e riprodurre l'errore.
- Controlla il tempo trascorso in ogni fase e prendi nota della fase in cui la maggior parte del tempo di Google Cloud.
- Se noti l'errore con il tempo trascorso più lungo subito dopo uno dei
le fasi successive, indica che il server di backend è lento o richiede molto tempo
per elaborare la richiesta:
- Richiesta inviata al server di destinazione
- Norme ServiceCallout
Ecco una traccia UI di esempio che mostra un Timeout del gateway dopo che la Richiesta è stata inviati al server di destinazione
Risoluzione
- Consulta Best practice per la configurazione del timeout di I/O al fine di comprendere quali valori di timeout devono essere impostati su diversi componenti coinvolti nel flusso di richieste API attraverso Apigee Edge.
- Assicurati di impostare un valore di timeout appropriato nell'applicazione client in base a le best practice.
Se il problema persiste, vai all'articolo È necessario raccogliere i dati diagnostici .
Raccogliere dati diagnostici
Se il problema persiste, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge.
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome proxy API
- Completa il comando
curl
utilizzato per riprodurre l'errore di timeout - File di traccia per le richieste API per le quali si verificano errori di timeout del client
Se sei un utente Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome ambiente
- Bundle proxy API
- File di traccia per le richieste API per le quali si verificano errori di timeout del client
- Log di accesso NGINX (
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
) - Log di sistema del processore di messaggi (
/opt/apigee/var/log/edge-message-processor/logs/system.log
)