499 Connessione client chiusa

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:

  1. Vai al menu Analizza > Monitoraggio delle API > Esamina.
  2. Filtra per 4xx errori e seleziona il periodo di tempo.
  3. Traccia il Codice di stato in base all'Ora.
  4. Seleziona una cella che contiene 499 errori, come mostrato di seguito:

  5. Le informazioni sull'errore 499 verranno visualizzate nel riquadro a destra come mostrato di seguito:

  6. 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.
    di Gemini Advanced.

    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 e status, potrai scaricare tutti i log delle transazioni in cui il client è scaduto.

    Poiché il monitoraggio delle API imposta il proxy su - per HTTP 499 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"
    
  7. Verifica la presenza di altri 499 errori nel Tempo di risposta e verifica se il Tempo di risposta è coerente (diciamo 30 secondi) in tutte le 499 errori.

Log di accesso NGINX

Per diagnosticare l'errore utilizzando i log di accesso NGINX:

  1. Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per determinare le informazioni principali sugli errori HTTP 499.
  2. Controlla i log di accesso NGINX:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  3. 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 fine 499.
  4. 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
  5. 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

  1. 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.
  2. In questo caso, le transazioni con stato HTTP 499 variano in genere nel tempo di elaborazione delle richieste (Tempo di risposta) per ciascuna richiesta.
  3. 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

  1. Questo è normale e di solito non è motivo di preoccupazione se gli errori HTTP 499 si verificano in piccole quantità.
  2. 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.

    1. In questo caso, per determinare il proxy interessato, segui i passaggi nella Passaggi diagnostici comuni.
    2. Utilizza la Dashboard per l'analisi della latenza per esaminare ulteriormente la causa della latenza del proxy risolvere il problema.
    3. 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.

  1. È 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.
  2. 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.
  3. 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:

  1. 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.
  2. Determina se il tempo di risposta è coerente per tutti gli errori 499.
  3. 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.
  4. È 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:

  1. Attiva il sessione di tracciamento per l'API interessata nella UI Edge.
  2. Attendi che si verifichi l'errore oppure, se hai ricevuto la chiamata API, effettua alcune chiamate API e riprodurre l'errore.
  3. Controlla il tempo trascorso in ogni fase e prendi nota della fase in cui la maggior parte del tempo di Google Cloud.
  4. 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

  1. 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.
  2. 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)