Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Filmy
Wideo | Opis |
---|---|
500 Wewnętrzny błąd serwera – spowodowany przez backend | Demonstracja działania 500 Internal Server Error w czasie rzeczywistym powodowana przez serwer backendu oraz czynności potrzebne do rozwiązania problemu i usunięcia błędu. |
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 500
z komunikatem Internal Server Error
w odpowiedzi na wywołania interfejsu API.
Kod stanu HTTP 500
to ogólna odpowiedź o błędzie. Oznacza to, że serwer napotkał nieoczekiwany warunek, który uniemożliwił mu zrealizowanie żądania. Ten błąd jest zwykle zwracany przez serwer, gdy żaden inny kod błędu nie jest odpowiedni.
Komunikaty o błędach
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 500 Internal Server Error
Możesz też zobaczyć komunikat o błędzie podobny do tego:
Przykład 1
Przykładowa odpowiedź serwera backendu nr 1
{"errorMessage":"Sorry either your e-mail or password didn't match.", "errorParameters":"{}", "errorCode":"500", "errorKey":"INVALID_EMAILPASSWORD"}
Przykład 2
Przykładowa odpowiedź serwera backendu nr 2
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
Możliwe przyczyny
Serwer backendu może zwrócić wartość 500 Internal Server Error
z kilku powodów. Ten poradnik wyjaśnia, jak rozwiązać ten problem bez względu na jego przyczynę, korzystając z typowych czynności.
Możliwe przyczyny tego problemu:
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Błąd na serwerze backendu | Z jakiegoś powodu serwer backendu może nie działać. | Użytkownicy chmury prywatnej i publicznej Cloud |
Najczęstsze kroki diagnostyki
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Monitorowanie interfejsów API
Procedura 1. Korzystanie z monitorowania interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
Przełącz się na organizację, w której chcesz zbadać problem.
- Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
- Wybierz przedział czasu, w którym zaobserwowano błędy.
Porównaj kod błędu z czasem.
Wybierz komórkę z kodem błędu
messaging.adaptors.http.flow.ErrorResponseCode
, jak pokazano poniżej:Informacje o kodzie błędu
messaging.adaptors.http.flow.ErrorResponseCode
są wyświetlane jak poniżej:Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Logi zwróć uwagę na te informacje:
- Identyfikator wiadomości żądania
- Kod stanu:
500
- Źródło błędu:
target
- Kod błędu:
messaging.adaptors.http.flow.ErrorResponseCode
Trace
Procedura 2. Korzystanie z narzędzia do śledzenia
Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:
- Włącz sesję śledzenia i
- Poczekaj na wystąpienie błędu
500 Internal Server Error
z kodem błędumessaging.adaptors.http.flow.ErrorResponseCode
lub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby go odtworzyć.
500 Internal Server Error
- Poczekaj na wystąpienie błędu
Sprawdź, czy opcja Show all FlowInfos (Pokaż wszystkie informacje) jest włączona:
- Wybierz 1 z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
Błąd pojawia się zwykle w przepływie po fazie otrzymanej z serwera docelowego, jak pokazano poniżej:
- Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
Przewiń w dół do sekcji Szczegóły nagłówków odpowiedzi i ustal wartości X-Apigee-fault-code, X-Apigee-fault-source oraz X-Apigee-Message-ID, jak pokazano poniżej:
- Zapisz wartości X-Apigee-fault-code, X-Apigee-fault-source i X-Apigee-Message-ID:
Nagłówki odpowiedzi | Wartość |
---|---|
X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
X-Apigee-fault-source | target |
X-Apigee-Message-ID | MESSAGE_ID |
NGINX
Procedura 3. Używanie dzienników dostępu NGINX
Aby zdiagnozować błąd przy użyciu logów dostępu NGINX:
- Jeśli jesteś użytkownikiem Private Cloud, możesz użyć logów dostępu NGINX do określenia kluczowych informacji o HTTP
500 Internal Server Error
. Sprawdź logi dostępu do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Sprawdź, czy występują jakieś błędy
500
z kodem błędumessaging.adaptors.http.flow.ErrorResponseCode
w danym czasie (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z500
. Jeśli znajdziesz błędy
500
z kodem X-Apigee-fault-code pasującym do wartości X-Apigee-fault-code , sprawdź wartość źródła błędów X-Apigee-fault-code .Przykładowy błąd 500 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma następujące wartości kodu X-Apigee-fault-code i X-Apigee-fault-code :
nagłówków, Wartość X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
X-Apigee-fault-source target
Przyczyna: błąd serwera backendu
Diagnostyka
Odpowiedź 500 Internal Server Error
przez serwer backendu może mieć kilka przyczyn. Musisz zdiagnozować każdą sytuację oddzielnie.
- Znajdź kod błędu, źródło błędu dla błędu zaobserwowanego za pomocą interfejsu API Monitoring, narzędzia do śledzenia lub logów dostępu NGINX zgodnie z opisem w częstych krokach diagnostyki.
- Jeśli źródło błędu to
target
, a kod błędu tomessaging.adaptors.http.flow.ErrorResponseCode
, oznacza to, że błąd jest zwracany przez serwer backendu. - Aby zdiagnozować przyczynę problemu, wykonaj jedną z tych czynności:
Trace
Przy użyciu logu czasu:
Jeśli masz sesję śledzenia błędów, wykonaj te czynności:
- W logu czasu wybierz żądanie do interfejsu API, które zakończyło się niepowodzeniem (
500 Internal Server Error
). Wybierz etap Odpowiedź otrzymana z serwera docelowego w nieudanym żądaniu do interfejsu API, jak pokazano na ilustracji poniżej:
Przewiń w dół do sekcji Szczegóły fazy i sprawdź Treść odpowiedzi,która zawiera odpowiedź z serwera backendu.
Przykładowa odpowiedź:
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <Error> <code>500</code> <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message> </Error> </Body> </Envelope>
W tej odpowiedzi zwróć uwagę, że komunikat o błędzie z serwera backendu to Not Authorization (Brak autoryzacji). Oznacza to, że użytkownik mógł podać nieprawidłowe dane logowania i dlatego pojawia się ten błąd.
Wywołaj serwer backendu
Bezpośrednie wywołanie serwera backendu:
Możesz wykonać bezpośrednie wywołanie do serwera backendu i:
- Sprawdź, czy otrzymujesz tę samą odpowiedź
500 Internal Server Error
co otrzymaną, gdy żądanie zostało wysłane za pomocą Apigee Edge - Sprawdź komunikat o błędzie (odpowiedź) otrzymany z serwera backendu
Aby wysłać bezpośrednie wywołanie do serwera backendu, wykonaj te czynności:
- Sprawdź, czy masz wszystkie wymagane nagłówki, parametry zapytania i wszystkie dane uwierzytelniające, które muszą być przekazywane do serwera backendu w ramach żądania.
- Jeśli usługa backendu jest dostępna publicznie, możesz użyć polecenia
curl
, Postmana lub dowolnego innego klienta REST i bezpośrednio wywołać interfejs API serwera backendu. Jeśli do serwera backendu można uzyskać dostęp tylko z poziomu procesorów do przetwarzania wiadomości, możesz użyć polecenia
curl
, aplikacji Postman lub innego klienta REST i wywoływać interfejs API serwera backendu bezpośrednio z tego procesora.- Sprawdź, czy usługa backendu faktycznie zwraca
500 Internal Server Error
, a następnie sprawdź komunikat o błędzie (odpowiedź) zwrócony przez serwer backendu i ustal przyczynę tego błędu.
Logi serwera backendu
Korzystanie z logów serwera backendu
- Sprawdź logi serwera backendu i spróbuj uzyskać więcej informacji o błędzie i jego przyczynie.
- Jeśli to możliwe, włącz tryb debugowania na serwerze backendu, aby uzyskać więcej informacji o błędzie i jego przyczynie.
- W logu czasu wybierz żądanie do interfejsu API, które zakończyło się niepowodzeniem (
Sprawdź, czy w określonym punkcie końcowym niedziałającego serwera proxy interfejsu API używasz łańcucha serwerów proxy; to znaczy, czy serwer docelowy/docelowy punkt końcowy wywołuje inny serwer proxy w Apigee Edge. Aby to sprawdzić:
Jeśli masz dane śledzenia nieudanego żądania, przejdź do etapu Żądanie wysłane do serwera docelowego i kliknij Pokaż Curl.
- Otworzy się okno Curl for Request Sent to Target Server (Curl na żądanie wysłane do serwera docelowego), w którym możesz określić alias hosta serwera docelowego.
- Sprawdź docelowy punkt końcowy serwera proxy interfejsu API i sprawdź, czy adres URL serwera backendu lub nazwa hosta na serwerze docelowym wskazuje inny serwer proxy lub Twój własny serwer backendu.
- Jeśli alias hosta serwera docelowego wskazuje alias hosta wirtualnego, jest to łańcuch serwerów proxy. W takim przypadku musisz powtórzyć wszystkie powyższe kroki dla połączonego serwera proxy, aż dowiesz się, co faktycznie powoduje błąd
500 Internal Server Error
. W tych przypadkach500 Internal Server Error
może wystąpić w innych łańcuchach serwerów proxy na innych etapach, które można zdiagnozować i rozwiązać, korzystając z instrukcji podanych w tym scenariuszu lub w poradniku dotyczącym wewnętrznego błędu serwera 500. - Jeśli alias hosta serwera docelowego wskazuje Twój serwer backendu, przejdź do sekcji Rozwiązanie.
Rozdzielczość
Jeśli masz pewność, że błąd 500
pochodzi z serwera backendu, skontaktuj się z zespołem serwera backendu, aby odpowiednio rozwiązać problem.
W celu rozwiązania tego problemu w przypadku omówionego powyżej przykładu może być konieczne poproszenie użytkowników o podanie prawidłowych danych logowania.
Najważniejsze kwestie
- Rzeczywisty komunikat o błędzie zwrócony przez serwer backendu dla instancji
500 Internal Server Error
można wyświetlić tylko wtedy, gdy zarejestrujesz sesję śledzenia dla nieudanych żądań. - Ze względów bezpieczeństwa odpowiedź serwera backendu nie będzie logowana w logach monitorowania interfejsów API, logów dostępu NGINX ani procesora wiadomości.
- Możesz przejrzeć logi serwera backendu lub włączyć tryb debugowania w backendzie, aby uzyskać więcej informacji o obiekcie
500 Internal Server Error
lub wyświetlić komunikat o błędzie zwrócony przez serwer backendu.
Musisz zebrać informacje diagnostyczne
Jeśli problem nie ustąpi mimo wykonania powyższych instrukcji, zbierz poniższe informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge.
Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa serwera proxy interfejsu API
- Wykonaj polecenie
curl
, aby odtworzyć błąd500
- Plik śledzenia zawierający żądania z
500 Internal Server Error
- Jeśli błędy
500
nie występują obecnie, podaj informacje o strefie czasowej dla okresu, w którym w przeszłości wystąpiły błędy500
.
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Zaobserwowany pełny komunikat o błędzie dotyczący nieudanych żądań
- Organizacja, nazwa środowiska i nazwa serwera proxy interfejsu API, w której występują błędy typu
500
- Pakiet proxy interfejsu API
- Plik śledzenia zawierający żądania z
500 Internal Server Error
- Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Gdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Logi systemowe procesora wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Okres z informacjami o strefie czasowej, w których wystąpiły błędy
500
.