504 Przekroczony limit czasu bramy z serwera backendu

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Krótki opis problemu

Aplikacja kliencka otrzymuje kod stanu HTTP 504 z komunikatem "Gateway Timeout" w odpowiedzi na wywołania interfejsu API.

Ta odpowiedź o błędzie oznacza, że podczas wykonywania wywołania interfejsu API klient nie otrzymał odpowiedzi od Apigee Edge lub serwera backendu w odpowiednim czasie.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 504 Gateway Timeout

Po tym kodzie może pojawić się komunikat o błędzie podobny do tego:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

Co jest przyczyną przekroczenia limitu czasu bramy?

Typowa ścieżka żądania do interfejsu API wysyłanego przez Apigee Edge to Klient -> Router -> Procesor komunikatów -> Serwer backendu, jak pokazano na ilustracji poniżej:

Ścieżka żądania do interfejsu API

Aplikacja kliencka, routery i procesory komunikatów są skonfigurowane z odpowiednimi wartościami limitu czasu. Apigee Edge oczekuje odpowiedzi na każde żądanie do interfejsu API w określonym czasie na podstawie wartości limitu czasu. Jeśli odpowiedź nie zostanie odebrana w określonym czasie, zwracana jest odpowiedź 504 Gateway Timeout.

Możliwe przyczyny

W Apigee Edge typową przyczyną odpowiedzi 504 Gateway Timeout z serwera backendu jest:

Przyczyna Opis Instrukcje rozwiązywania problemów dla
Serwer backendu odpowiada kodem 504 Gateway Timeout Serwer backendu przekracza limit czasu i zwraca do procesora komunikatów odpowiedź 504 Gateway Timeout. Użytkownicy chmury prywatnej i publicznej Edge

Serwer backendu odpowiada kodem 504 Gateway Timeout

Serwer backendu może odpowiedzieć kodem odpowiedzi HTTP 504 Gateway Timeout.

Diagnostyka

Z tej sekcji dowiesz się, jak prawidłowo zdiagnozować błąd 504 Gateway Timeout. Podane są procedury dla użytkowników chmury prywatnej i publicznej.

Procedura 1. Korzystanie z narzędzia Trace (użytkownicy chmury prywatnej i publicznej)

  1. Włącz narzędzie Trace w interfejsie Apigee dla interfejsu API, którego dotyczy problem.
  2. Wyślij żądanie do serwera backendu.
  3. Jeśli w narzędziu Trace nieudane żądanie do interfejsu API pokazuje odpowiedź 504 z serwera backendu, przyczyną błędu 504 Gateway Timeout jest serwer backendu.
  4. Aby określić czas odpowiedzi, kliknij fazę Response received from target server (Odpowiedź odebrana z serwera docelowego) w narzędziu Trace. W pokazanym przykładzie czas, który upłynął, to 60004 ms:

    szczegóły fazy z interfejsu,

    Więcej informacji znajdziesz w sekcji Szczegóły fazy:

    • Wyróżnia ona odpowiedź 504 Gateway Timeout otrzymaną z serwera backendu.
    • W sekcji Response Content (Treść odpowiedzi) wyświetla się pełna treść odpowiedzi z serwera backendu. Jak wspomnieliśmy wcześniej, format i treść ładunku odpowiedzi mogą się różnić w zależności od implementacji serwera backendu.
    • Sekcja Response Header > Server (Nagłówek odpowiedzi > Serwer) może wskazywać, skąd pochodzi odpowiedź.
  5. Aby wyświetlić dane Analytics i potwierdzić diagnozę, kliknij fazę Analytics Data Recorded (Zapisane dane Analytics) w narzędziu Trace, jak pokazano na ilustracji poniżej:

    szczegóły statystyk z logu czasu,

    W sekcji Response Headers (Nagłówki odpowiedzi) w sekcji Szczegóły fazy wyświetlają się wartości X-Apigee-fault-code i X-Apigee-fault-source, jak pokazano na ilustracji poniżej:

    szczegóły fazy analizy w interfejsie,

    Jeśli te pola zawierają wartości pokazane w tabeli poniżej, odpowiedź o błędzie 504 pochodzi z serwera backendu:

    Nagłówki odpowiedzi Wartość
    X-Apigee-fault-source cel
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Sprawdź, czy nie występuje łączenie proxy. Aby sprawdzić, czy serwer backendu wywołuje inne proxy w Apigee:
    1. Wróć do fazy Request sent to target server (Żądanie wysłane do serwera docelowego) i kliknij przycisk Show Curl (Pokaż Curl), aby wyświetlić alias hosta serwera backendu.
    2. Jeśli alias hosta serwera backendu wskazuje alias hosta wirtualnego, oznacza to, że występuje łączenie proxy. Powtórz powyższe kroki w przypadku każdego połączonego proxy, aby zdiagnozować przyczynę odpowiedzi o błędzie 504 Gateway Timeout. Błędy 504 Gateway Timeout występujące w połączonych proxy na innych etapach cyklu żądania/odpowiedzi można zdiagnozować za pomocą tego przewodnika.
    3. Jeśli alias hosta serwera backendu wskazuje serwer backendu, przejdź do sekcji Rozwiązanie.

Procedura 2. Bezpośrednie wywołanie interfejsu API serwera backendu (użytkownicy chmury publicznej i prywatnej)

Zadzwoń bezpośrednio na serwer backendu, aby potwierdzić to samo zachowanie odpowiedzi 504 Gateway Timeout, które występuje gdy żądanie jest wysyłane przez Apigee Edge.

  1. Upewnij się, że masz wszystkie wymagane nagłówki, parametry zapytania i dane logowania, które musisz przekazać do serwera backendu w ramach żądania.
  2. Jeśli usługa backendu jest dostępna publicznie, możesz użyć polecenia curl, Postmana lub innego klienta REST i bezpośrednio wywołać interfejs API serwera backendu.
  3. Jeśli serwer backendu jest dostępny tylko z procesorów komunikatów, użyj polecenia curl, Postmana lub innego klienta REST, aby bezpośrednio wywołać interfejs API serwera backendu z procesora komunikatów.
  4. Jeśli usługa backendu zwraca odpowiedź 504 Gateway Timeout, przejdź do sekcji Rozwiązanie.

Procedura 3. Sprawdź logi dostępu NGINX (tylko użytkownicy chmury prywatnej)

Logi dostępu NGINX mogą pomóc określić, czy odpowiedź o błędzie 504 została wysłana przez serwer backendu. Jest to szczególnie przydatne, jeśli problem wystąpił w przeszłości, występuje sporadycznie lub nie można go zarejestrować w narzędziu Trace. Aby sprawdzić logi dostępu NGINX, wykonaj te czynności:

  1. Wyświetl logi dostępu NGINX za pomocą tego polecenia:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. Sprawdź, czy nie ma odpowiedzi o błędzie 504 w przypadku proxy interfejsu API, którego dotyczy problem. Możesz sprawdzić określony okres, jeśli problem wystąpił w przeszłości, lub określić, czy żądania nadal kończą się niepowodzeniem z powodu odpowiedzi o błędzie 504.
  3. Jeśli występują odpowiedzi o błędzie 504, sprawdź, czy pochodzą one z serwera backendu.
  4. Ilustracja poniżej przedstawia przykład wpisu logu NGINX, który pokazuje odpowiedź o błędzie 504 spowodowaną przez serwer docelowy:

    przykładowe logi nginx,

    Jeśli pola X-Apigee-fault-source i X-Apigee-fault-code zawierają wartości pokazane w tabeli poniżej, odpowiedź 504 pochodzi z serwera backendu:

    Nagłówki odpowiedzi Wartość
    X-Apigee-fault-source cel
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Sprawdź proxy interfejsu API, którego dotyczy problem, aby sprawdzić, czy nie występuje łączenie proxy czyli czy serwer backendu lub punkt końcowy docelowy wywołuje inne proxy w Apigee. Jeśli proxy interfejsu API używa łączenia proxy , powtórz powyższe kroki w przypadku każdego połączonego proxy, aby zdiagnozować przyczynę odpowiedzi o błędzie 504 Gateway Timeout. Błędy 504 Gateway Timeout występujące w połączonych proxy na innych etapach można zdiagnozować za pomocą tego przewodnika.
  6. Jeśli nie występuje łączenie proxy, a odpowiedź o błędzie 504 pochodzi z serwera backendu, przejdź do sekcji Rozwiązanie.

Procedura 4. Korzystanie z monitorowania interfejsu API (tylko użytkownicy chmury publicznej)

Monitorowanie interfejsu API umożliwia szybkie wyodrębnianie obszarów problemowych w celu diagnozowania błędów, problemów z wydajnością i opóźnieniami oraz ich źródła, np. aplikacji deweloperów, proxy interfejsu API, celów backendu lub platformy interfejsu API.

Zapoznaj się z przykładowym scenariuszem który pokazuje, jak rozwiązywać problemy z kodami 5xx w interfejsach API za pomocą monitorowania interfejsu API. Na przykład, skonfiguruj alert, który będzie powiadamiał administratorów, gdy liczba kodów stanu 504 przekroczy określony próg.

Rozdzielczość

Korzystając z opisanych powyżej procedur diagnostycznych, możesz współpracować z zespołem serwera backendu, aby rozwiązać problem na serwerze backendu. Może to obejmować dostosowanie limitów czasu na serwerach backendu lub limitów czasu w przypadku modułów równoważenia obciążenia znajdujących się przed serwerami docelowymi.

Zbieranie informacji diagnostycznych

Jeśli problem nadal występuje, udostępnij zespołowi pomocy Apigee te informacje diagnostyczne.

Jeśli korzystasz z chmury publicznej, podaj te informacje:

  • Nazwa organizacji
  • Nazwa środowiska
  • Nazwa proxy interfejsu API
  • Pełne curl polecenie użyte do odtworzenia odpowiedzi o błędzie 504
  • Plik śledzenia z żądaniami do interfejsu API, które otrzymują odpowiedź o błędzie 504 Gateway Timeout

Jeśli korzystasz z chmury prywatnej, podaj te informacje:

  • Pełny komunikat o błędzie zaobserwowany w przypadku nieudanych żądań
  • Nazwa środowiska
  • Pakiet proxy interfejsu API
  • Plik śledzenia z żądaniami do interfejsu API, które otrzymują odpowiedź o błędzie 504 Gateway Timeout
  • Logi dostępu NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • Logi procesora komunikatów
    /opt/apigee/var/log/edge-message-processor/logs/system.log