Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 502 Bad Gateway
z parametrem
kod ECONNRESET
jako odpowiedź na wywołania interfejsu API w Edge Microgateway.
Komunikat o błędzie
Klient zobaczy następujący kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Odpowiedź będzie zawierać ten komunikat o błędzie:
{"message":"socket hang up","code":"ECONNRESET"}
Możliwe przyczyny
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Nieprawidłowo skonfigurowany czas utrzymywania aktywności | Czasy utrzymywania aktywności są nieprawidłowo skonfigurowane między Edge Microgateway a serwerem docelowym. | Użytkownicy chmury publicznej i prywatnej Edge |
Serwer docelowy przedwcześnie zamyka połączenie | Serwer docelowy przedwcześnie zamyka połączenie, gdy trwa wysyłanie Edge Microgateway do ładunku żądania. | Użytkownicy chmury publicznej i prywatnej Edge |
Typowe kroki diagnostyki
- Sprawdź logi Edge Microgateway:
/var/tmp/edgemicro-`hostname`-*.log
- Wyszukaj błędy (
502
) z kodemECONNRESET
w określonym czasie (jeśli problem wystąpił w przeszłości) lub jeśli są jakieś żądania. nadal występują błędy z użyciem funkcji502
.2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- Jeśli poziom logowania jest ustawiony na
warn
lubinfo
, zostanie też musi być komunikatem[warn]
zawierającym nazwę hosta serwera docelowego i port w drugiej . W tym przykładzie jest toX.X.X.X:8080
i można go użyć. później, aby zarejestrowaćtcpdump
.2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- Kod błędu
[socket hang up][ECONNRESET]
wskazuje, że serwer docelowy Zakończył połączenie z Edge Microgateway. Można to przeszukać w dziennikach, aby określić jak często to ma miejsce.
Przyczyna: nieprawidłowo skonfigurowany czas utrzymywania aktywności
Diagnostyka
- Wykonaj czynności opisane w Najczęstszych krokach diagnostyki i sprawdź, czy otrzymujesz
[socket hang up][ECONNRESET]
błąd. Jeśli tak, przeanalizuj dokładniej, korzystając z pomocy
tcpdump
, jak wyjaśniliśmy poniżej:
Korzystanie z tcpdump
- Przechwyć interfejs
tcpdump
między Edge Microgateway a serwerem backendu na systemu operacyjnego hosta Edge Microgateway za pomocą następującego polecenia:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- Przeanalizuj przechwycone dane (
tcpdump
):Przykładowe dane wyjściowe tcpdump: ( wyświetl większy obraz)
W powyższym przykładzie
tcpdump
możesz zobaczyć:- W pakiecie 250288 klient wysyła żądanie
POST
. - W pakiecie 250371 serwer odpowiada
200 OK
. - W pakiecie 250559 klient wysyła
ACK.
- W pakiecie 250560 serwer wysyła
Continuation
. - W pakiecie 250561 klient wysyła
ACK.
- W pakiecie 262436 serwer wysyła
FIN, ACK
do inicjujący zamknięcie połączenia przez klienta. To około pięć. sekund po poprzednim pakiecie (250561). - W pakiecie 262441 klient wysyła kolejne
POST
użytkownika. Jednak to się nie uda, ponieważ serwer już zainicjował zamknięcie połączenia. Wysyła odpowiedźRST
w pakiecie 262441.
W tym przykładzie to samo połączenie zostało użyte co najmniej raz, ale w dniu po przesłaniu ostatniego żądania serwer inicjuje zamknięcie połączenia po pięciu sekundach. czasu bezczynności, czyli w tym samym czasie, w którym klient wysłał nowe żądanie. Ten wskazuje, że limit czasu utrzymywania aktywności serwera backendu będzie najprawdopodobniej krótszy lub równy wartość ustawiona w kliencie. Aby to sprawdzić, zobacz Porównaj limity czasu utrzymywania aktywności na Edge Microgateway i na serwerze backendu.
- W pakiecie 250288 klient wysyła żądanie
Porównaj limity czasu utrzymywania aktywności
- Edge Microgateway nie ma konkretnej właściwości czasu utrzymywania aktywności. Jest zależy od systemu operacyjnego, w którym został uruchomiony. Typowe przykłady to Windows, kontenery Linuxa i Dockera.
- Możliwe, że ta funkcja jest dostosowana w systemie operacyjnym. Sprawdź w administratora systemu. Domyślnie systemy operacyjne Linux mają domyślne ustawienia utrzymywania aktywności limit czasu wynosi dwie godziny.
- Następnie sprawdź właściwość limitu czasu utrzymywania aktywności skonfigurowaną na serwerze backendu. Zaczynajmy tzn. serwer backendu jest skonfigurowany z wartością 10 sekund.
- Jeśli ustalisz, że wartość limitu czasu utrzymywania aktywności w systemie operacyjnym wynosi
jest większa niż wartość właściwości limitu czasu utrzymywania aktywności na serwerze backendu, tak jak w tagu
powyższego przykładu, to to jest przyczyną błędów
502
.
Rozdzielczość
Sprawdź, czy właściwość limitu czasu utrzymywania aktywności jest zawsze niższa w systemie operacyjnym, w którym Edge Usługa Microgate działa w porównaniu z działaniem na serwerze backendu.
- Określ wartość limitu czasu utrzymywania aktywności na serwerze backendu.
- Skonfiguruj odpowiednią wartość właściwości limitu czasu utrzymywania aktywności w operacji , tak by właściwość limitu czasu utrzymywania aktywności była krótsza niż wartość ustawiona w backendzie. serwera, wykonując czynności odpowiednie dla Twojego systemu operacyjnego.
Sprawdzona metoda
Zdecydowanie zalecamy, aby komponenty podrzędne miały zawsze krótszy limit czasu utrzymywania aktywności
niż określony na serwerach nadrzędnych, aby uniknąć tego rodzaju wyścigów
502
błędu. Każdy przeskok w dół powinien być mniejszy niż każdy przeskok nadrzędny. W Edge
Microgateway, warto zastosować się do tych wskazówek:
Limit czasu utrzymywania aktywności w aplikacji klienckiej lub systemie równoważenia obciążenia powinien być krótszy niż Limit czasu utrzymywania aktywności Edge Microgateway.
Aby skonfigurować limit czasu utrzymywania aktywności w Edge Microgateway, dodaj parametr
keep_alive_timeout
na~/.edgemicro/org-env-config.yaml
.edgemicro: keep_alive_timeout: 65000
- Limit czasu utrzymywania aktywności systemu operacyjnego Edge Microgateway powinien być krótszy niż wartość docelowa limit czasu utrzymywania aktywności serwera.
- Jeśli masz inne przeskoki przed lub za Edge Microgateway, ta sama reguła powinna można zastosować. Odpowiedzialność za zamknięcie usługi należy zawsze pozostawiać na koncie klienta podrzędnego. połączenia z nadrzędnym.
Przyczyna: serwer docelowy przedwcześnie zamyka połączenie
Diagnostyka
- Wykonaj czynności opisane w sekcji Typowe kroki diagnostyki i sprawdź, czy
wystąpił błąd
[socket hang up][ECONNRESET]
. - Jeśli tak, sprawdź dokładniej, korzystając z pomocy
tcpdump
, zgodnie z opisem poniżej.Komunikat o błędzie:
[targetRequest error][GET][][socket hang up][ECONNRESET]
w powyższym przykładzie wskazuje, że ten błąd wystąpił podczas korzystania z Edge Microgateway wysyłał żądanie do serwera backendu (docelowego). Oznacza to, że Edge Microgateway wysłał Żądanie do interfejsu API wysłane do serwera backendu i oczekiwanie na odpowiedź. Backend Serwer nagle zakończył połączenie przed otrzymaniem odpowiedzi Edge Microgateway. - Sprawdź w dziennikach serwera backendu, czy są w nim błędy lub informacje, które mogą skłoniły serwer backendu do nagłego zakończenia połączenia. Jeśli znajdziesz błędy lub , a następnie kliknij Rozwiązanie i odpowiednio rozwiąż problem. na serwerze backendu.
- Jeśli na serwerze backendu nie ma żadnych błędów ani informacji, zbierz
Dane wyjściowe funkcji
tcpdump
na serwerze Edge Microgateway:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- Przeanalizuj przechwycone dane (
tcpdump
):Przykładowe dane wyjściowe tcpdump: ( wyświetl większy obraz)
W powyższym przykładzie
tcpdump
możesz zobaczyć:- W pakiecie 4 usługa Edge Microgateway wysłała żądanie
GET
do miejsca docelowego serwera. - W pakiecie 5 serwer docelowy odpowiedział żądaniem
ACK
, aby potwierdzić użytkownika. - Jednak w pakiecie 6 zamiast wysłać odpowiedź ładunkiem odpowiedzi, docelowy
Serwer wysyła komunikat
FIN, ACK
, inicjując zamknięcie połączenia. - W pakietach 7 i nowszych połączenie jest zamykane wzajemnie. Ponieważ połączenie
zamknięta przed wysłaniem odpowiedzi, Edge Microgateway zwróci żądanie HTTP
502
z komunikatem o błędzie. - Zwróć uwagę, że sygnatura czasowa pakietu 8 (
2021-06-23T03:52:24.110Z
) odpowiada sygnaturze czasowej, w której błąd został zarejestrowany w Edge Microgateway dzienników. Sygnatury czasowe w plikach dziennika i w plikutcpdump
mogą często w celu skorelowania błędów z rzeczywistymi pakietami.
Rozdzielczość
Napraw problem na serwerze backendu.
Jeśli problem będzie się powtarzał i będziesz potrzebować pomocy w jego rozwiązaniu,
502 Bad Gateway Error
lub podejrzewasz, że problem dotyczy Edge Microgateway, wejdź na Wymagane jest zbieranie informacji diagnostycznych.Musi zbierać informacje diagnostyczne
Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zwróć uwagę na informacje diagnostyczne, a następnie skontaktuj się z zespołem pomocy Apigee Edge:
- Pliki dziennika: domyślny folder to
/var/tmp
, ale może zostać zastąpiony w głównym plikuconfig.yaml
(logging > dir parameter
). Jest zalecamy zmianęlog > level
nainfo
przed podaniem pliki dziennika do zespołu pomocy Apigee. - Plik konfiguracji: główna konfiguracja Edge Microgateway znajduje się w
Plik YAML w domyślnym folderze Edge Microgateway,
$HOME/.edgemicro
. Jest domyślny plik konfiguracyjny o nazwiedefault.yaml
, a następnie po jednym dla każdego środowiskaORG-ENV-config.yaml
Prześlij ten plik w całości w organizacji i środowisku, którego dotyczy problem.
- W pakiecie 4 usługa Edge Microgateway wysłała żądanie