<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
클라이언트 애플리케이션이 HTTP 상태 코드 502 Bad Gateway
를 수신합니다.
Edge Microgateway의 API 호출에 대한 응답으로 ECONNRESET
코드 포함
오류 메시지
클라이언트에 다음 응답 코드가 표시됩니다.
HTTP/1.1 502 Bad Gateway
응답에는 다음 오류 메시지가 포함됩니다.
{"message":"socket hang up","code":"ECONNRESET"}
가능한 원인
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
연결 유지 제한 시간이 잘못 구성됨 | Edge Microgateway와 대상 서버 간에 연결 유지 제한 시간이 잘못 구성되었습니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
대상 서버가 연결을 조기 종료함 | Edge Microgateway가 전송하는 동안 대상 서버에서 연결을 조기 종료함 요청 페이로드도 포함됩니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
- Edge Microgateway 로그를 확인합니다.
/var/tmp/edgemicro-`hostname`-*.log
ECONNRESET
코드에502
오류가 있는지 검색하여 확인합니다. 특정 기간 동안 (과거에 문제가 발생한 경우) 또는 요청이 있을 경우 여전히502
와 함께 실패합니다.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][]
- 로깅 수준을
warn
또는info
로 설정한 경우에도 두 번째에 대상 서버 호스트 이름과 포트를 포함하는[warn]
메시지여야 합니다. 요소가 포함됩니다. 이 예에서는X.X.X.X:8080
이며 다음을 사용할 수 있습니다. 나중에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]
- 오류 코드
[socket hang up][ECONNRESET]
는 대상 서버가 에지 Microgateway와의 연결을 종료했습니다. 이를 로그에서 검색하여 얼마나 자주 발생하는지 알 수 있습니다.
원인: 잘못 구성된 연결 유지 제한 시간
<ph type="x-smartling-placeholder">진단
- 일반적인 진단 단계에 설명된 단계를 사용하여
[socket hang up][ECONNRESET]
오류 그렇다면
tcpdump
를 사용합니다.
tcpdump 사용
- Edge Microgateway와 백엔드 서버 간에
tcpdump
을 캡처합니다. Edge Microgateway 호스트 운영체제를 다음 명령어로 업데이트합니다.tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- 캡처된
tcpdump
를 분석합니다.샘플 tcpdump 출력: ( 더 크게 보기)
위의 샘플
tcpdump
에서 다음을 확인할 수 있습니다.- 250288 패킷에서 클라이언트는
POST
요청을 보냅니다. - 250371 패킷에서 서버가
200 OK
로 응답합니다. - 250559 패킷에서 클라이언트는
ACK.
을 전송합니다. - 서버는 250560 패킷에서
Continuation
를 전송합니다. 메시지가 표시됩니다. - 250561 패킷에서 클라이언트는
ACK.
을 전송합니다. - 262436 패킷에서 서버가
FIN, ACK
을 클라이언트가 연결 종료를 시작합니다. 이 작업은 대략 5개입니다. 초 단위로 표시됩니다 (250561). - 262441 패킷에서 클라이언트가 또 다른
POST
을 전송합니다. 합니다. 하지만 서버가 이미 연결 패킷의RST
로 응답합니다. 262441입니다.
이 예에서는 동일한 연결을 최소 한 번 이상 성공적으로 재사용했지만 마지막 요청을 보내면 서버는 5초 후에 연결 종료를 시작합니다. 이는 클라이언트가 새 요청을 보낸 시간에 해당하는 시간입니다. 이 백엔드 서버 연결 유지 제한 시간이 이보다 짧거나 같을 가능성이 높음을 클라이언트에서 설정된 값입니다. 이를 확인하려면 다음을 참조하세요. Edge Microgateway와 백엔드 서버의 연결 유지 제한 시간을 비교합니다.
- 250288 패킷에서 클라이언트는
연결 유지 제한 시간 비교
- Edge Microgateway에는 특정 연결 유지 제한 시간 속성이 없습니다. 그것은 실행 중인 운영 체제에 의해 결정됩니다. 일반적인 예로는 Windows, Docker 컨테이너에서 실행됩니다
- 운영체제에서 맞춤설정될 수도 있습니다. 시스템 관리자입니다. 기본적으로 Linux 운영체제에는 기본적으로 연결 유지 기능이 있습니다. 2시간으로 설정합니다.
- 다음으로 백엔드 서버에 구성된 연결 유지 제한 시간 속성을 확인합니다. 시작 백엔드 서버가 10초 값으로 구성되어 있다고 가정해 보겠습니다.
- 운영체제의 연결 유지 제한 시간 값이
다음 예와 같이 백엔드 서버의 연결 유지 제한 시간 속성 값보다 커야 합니다.
이것이
502
오류의 원인입니다.
해상도
Edge가 실행되는 운영체제에서 연결 유지 제한 시간 속성이 항상 더 낮은지 확인합니다. Microgateway가 백엔드 서버에서 실행되는 것에 비해 실행 중입니다.
- 백엔드 서버의 연결 유지 제한 시간에 설정된 값을 결정합니다.
- 운영체제의 연결 유지 제한 시간 속성에 적절한 값을 유지되므로 연결 유지 제한 시간 속성이 백엔드에 설정된 값보다 낮게 설정됩니다. 운영 체제에 해당되는 단계를 사용하여 서버에 로그인합니다.
권장사항
다운스트림 구성요소는 항상 더 짧은 연결 유지 시간 제한을 사용하는 것이 좋습니다.
더 높은 임곗값을 설정하여 이러한 종류의 경합 상태를 피하고
오류 502
개 각 다운스트림 홉은 각 업스트림 홉보다 낮아야 합니다. 에지
Microgateway를 사용하는 경우 다음 가이드라인을 사용하는 것이 좋습니다.
클라이언트 애플리케이션 또는 부하 분산기의 연결 유지 제한 시간이 Edge Microgateway 연결 유지 제한 시간입니다.
Edge Microgateway에서 연결 유지 제한 시간을 구성하려면
keep_alive_timeout
금액을~/.edgemicro/org-env-config.yaml
파일.edgemicro: keep_alive_timeout: 65000
<ph type="x-smartling-placeholder">- Edge Microgateway 운영체제 연결 유지 제한 시간이 대상 시간보다 작아야 합니다. 서버 연결 유지 제한 시간이 초과되었습니다.
- Edge Microgateway 앞이나 뒤에 다른 홉이 있는 경우 동일한 규칙이 적용됩니다. 항상 다운스트림 클라이언트의 책임으로 이를 종료해야 합니다. 업스트림과의 연결을 반환합니다.
원인: 대상 서버가 연결을 조기 종료함
<ph type="x-smartling-placeholder">진단
- 일반적인 진단 단계에 설명된 단계를 따라 다음 사항을 확인하세요.
[socket hang up][ECONNRESET]
오류가 발생했습니다. - 그렇다면 아래에 설명된 대로
tcpdump
의 도움을 받아 추가로 조사하세요.오류 메시지
[targetRequest error][GET][][socket hang up][ECONNRESET]
는 Edge Microgateway를 실행하는 동안 이 오류가 발생했음을 나타냅니다. 백엔드 (대상) 서버로 요청을 전송하고 있었습니다. 즉, Edge Microgateway가 백엔드 서버에 API 요청을 보냈으며 응답을 기다리고 있었습니다. 그러나 백엔드는 Edge Microgateway가 응답을 수신하기 전에 서버에서 연결을 갑자기 종료했습니다. - 백엔드 서버 로그를 확인하여 문제가 발생할 수 있는 오류나 정보가 있는지 확인합니다. 백엔드 서버가 연결을 갑자기 종료하도록 했기 때문입니다. 오류가 있거나 해결 방법으로 이동하여 문제를 적절하게 해결합니다. 확인할 수 있습니다
- 백엔드 서버에서 오류나 정보를 찾을 수 없는 경우
Edge Microgateway 서버의
tcpdump
출력:tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- 캡처된
tcpdump
를 분석합니다.샘플 tcpdump 출력: ( 더 크게 보기)
위의 샘플
tcpdump
에서 다음을 확인할 수 있습니다.- 4 패킷에서 Edge Microgateway가 대상에
GET
요청을 전송했습니다. 있습니다. - 패킷 5에서 대상 서버가
ACK
로 응답하여 합니다. - 그러나 패킷 6에서 대상은 응답 페이로드로 응답하는 대신
서버는 연결 종료를 시작하는
FIN, ACK
를 보냅니다. - 패킷 7 이후에서는 연결이 상호 닫힙니다. 연결이
응답이 전송되기 전에 닫힌 경우 Edge Microgateway는 HTTP
502
를 반환합니다. 클라이언트로 다시 보냅니다. - 패킷 8의 타임스탬프
2021-06-23T03:52:24.110Z
는 Edge Microgateway에 오류가 로깅된 타임스탬프에 해당합니다. 할 수 있습니다 로그 파일과tcpdump
의 타임스탬프는 종종 오류를 실제 패킷과 상호 연관시키는 데 사용됩니다.
해상도
백엔드 서버의 문제를 적절하게 수정합니다.
문제가 지속되며 문제 해결에 도움이 필요한 경우
502 Bad Gateway Error
Edge Microgateway 내 문제라고 의심되는 경우 진단 정보를 수집해야 합니다.진단 정보 수집 필요
위의 안내를 따른 후에도 문제가 지속되면 다음을 수집합니다. Apigee Edge 지원팀에 문의하세요.
- 로그 파일: 기본 폴더는
/var/tmp
이지만 재정의될 수도 있습니다. 기본config.yaml
파일 (logging > dir parameter
)에서 찾을 수 있습니다. 그것은 제공하기 전에log > level
를info
로 변경하는 것이 좋습니다. 로그 파일을 Apigee 지원팀에 전달하세요 - 구성 파일: Edge Microgateway의 기본 구성은
기본 Edge Microgateway 폴더(
$HOME/.edgemicro
)의 YAML 파일 이default.yaml
라는 기본 구성 파일과 환경당 하나씩ORG-ENV-config.yaml
이 파일을 업로드하세요. 영향을 받는 조직 및 환경 전체
- 4 패킷에서 Edge Microgateway가 대상에