현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
동영상
동영상 | 설명 |
---|---|
500 내부 서버 오류 - 백엔드로 인해 발생 | 백엔드 서버로 인해 발생한 실시간 500 Internal Server Error 와 오류 해결 단계를 보여줍니다. |
증상
클라이언트 애플리케이션은 API 호출에 대한 응답으로 Internal Server Error
메시지와 함께 HTTP 상태 코드 500
를 가져옵니다.
HTTP 상태 코드 500
는 일반 오류 응답입니다. 이는 서버에 요청을 수행할 수 없는 예기치 않은 상황이 발생했음을 의미합니다. 이 오류는 일반적으로 다른 오류 코드가 적합하지 않은 경우 서버에서 반환됩니다.
오류 메시지
클라이언트 애플리케이션은 다음 응답 코드를 가져옵니다.
HTTP/1.1 500 Internal Server Error
또한 아래와 유사한 오류 메시지가 표시될 수 있습니다.
샘플 #1
샘플 백엔드 서버 응답 #1
{"errorMessage":"Sorry either your e-mail or password didn't match.", "errorParameters":"{}", "errorCode":"500", "errorKey":"INVALID_EMAILPASSWORD"}
샘플 #2
샘플 백엔드 서버 응답 #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>
가능한 원인
여러 가지 원인으로 백엔드 서버에서 500 Internal Server Error
를 반환할 수 있습니다. 이 플레이북에서는 일반적인 단계를 통해 문제를 해결하고 원인에 상관없이 오류를 해결하는 방법을 설명합니다.
이 문제의 가능한 원인은 다음과 같습니다.
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
백엔드 서버 오류 | 백엔드 서버가 어떤 이유로 실패할 수 있습니다. | 에지 프라이빗 및 퍼블릭 클라우드 사용자 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단하세요.
API 모니터링
절차 #1: API 모니터링 사용
API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- 적절한 역할이 있는 사용자로 Apigee Edge UI에 로그인합니다.
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지로 이동합니다.
- 오류를 관찰한 특정 기간을 선택합니다.
시간을 기준으로 결함 코드를 표시합니다.
아래와 같이 오류 코드가
messaging.adaptors.http.flow.ErrorResponseCode
인 셀을 선택합니다.( 더 큰 이미지 보기)
오류 코드
messaging.adaptors.http.flow.ErrorResponseCode
에 관한 정보가 아래와 같이 표시됩니다.( 더 큰 이미지 보기)
로그 보기 를 클릭하고 실패한 요청이 있는 행을 펼칩니다.
( 더 큰 이미지 보기)
- 로그 창에서 다음 세부정보를 확인합니다.
- 요청 메시지 ID
- 상태 코드:
500
- 결함 소스:
target
- 오류 코드:
messaging.adaptors.http.flow.ErrorResponseCode
Trace
절차 #2: Trace 도구 사용
Trace 도구를 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- 트레이스 세션을 사용 설정하고 다음 중 하나를 사용 설정합니다.
- 오류 코드
messaging.adaptors.http.flow.ErrorResponseCode
와 함께500 Internal Server Error
오류가 발생할 때까지 기다립니다. - 문제를 재현할 수 있는 경우 API를 호출하여 문제를 재현합니다.
500 Internal Server Error
- 오류 코드
Show all FlowInfos(모든 FlowInfos 표시)가 사용 설정되어 있는지 확인합니다.
- 실패한 요청 중 하나를 선택하고 트레이스를 검사합니다.
- trace의 여러 단계를 살펴보고 실패가 발생한 위치를 찾습니다.
일반적으로 다음과 같이 응답이 대상 서버에서 수신됨 단계 후 흐름에서 오류를 찾을 수 있습니다.
( 더 큰 이미지 보기)
- 추적에서 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다.
단계 세부정보 응답 헤더 섹션까지 아래로 스크롤하고 아래와 같이 X-Apigee-fault-code, X-Apigee-fault-source, X-Apigee-Message-ID의 값을 결정합니다.
( 더 큰 이미지 보기)
- X-Apigee-fault-code, X-Apigee-fault-source, X-Apigee-Message-ID의 값을 확인합니다.
응답 헤더 | 값 |
---|---|
X-Apigee-fault-code | messaging.adaptors.http.flow.ErrorResponseCode |
X-Apigee-fault-source | target |
X-Apigee-Message-ID | MESSAGE_ID |
NGINX
절차 #3: NGINX 액세스 로그 사용
NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- Private Cloud 사용자는 NGINX 액세스 로그를 사용하여 HTTP
500 Internal Server Error
에 대한 키 정보를 확인할 수 있습니다. NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 특정 기간(과거에 문제가 발생한 경우) 동안 오류 코드가
messaging.adaptors.http.flow.ErrorResponseCode
인500
오류가 있는지 아니면 여전히500
와 함께 실패하는 요청이 있는지 검색합니다. X-Apigee-fault-code 값과 일치하는 X-Apigee-fault-code 가 포함된
500
오류가 있으면 X-Apigee-fault-code 의 값을 확인합니다.NGINX 액세스 로그의 샘플 500 오류:
( 더 큰 이미지 보기)
NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-code 및 X-Apigee-fault-code 에 대한 값이 다음과 같습니다.
헤더 값 X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
X-Apigee-fault-source target
원인: 백엔드 서버 오류
진단
백엔드 서버에서 응답한 500 Internal Server Error
에는 여러 가지 이유가 있을 수 있습니다. 각 상황을 개별적으로 진단해야 합니다.
- 일반적인 진단 단계에 설명된 대로 API Monitoring, Trace 도구 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드, 오류 소스를 확인합니다.
- 오류 소스가
target
이고 오류 코드가messaging.adaptors.http.flow.ErrorResponseCode
이면 백엔드 서버에서 오류를 반환했음을 나타냅니다. - 다음 단계 중 하나를 사용하여 문제의 원인을 진단할 수 있습니다.
Trace
Trace 사용:
실패에 대한 추적 세션이 있으면 다음 단계를 수행합니다.
- Trace에서
500 Internal Server Error
로 실패한 API 요청을 선택합니다. 아래 그림과 같이 실패한 API 요청에서 Response received from target server(대상 서버에서 받은 응답) 단계를 선택합니다.
( 더 큰 이미지 보기)
단계 세부정보 섹션까지 아래로 스크롤하고 백엔드 서버의 응답이 포함된 응답 콘텐츠를 확인합니다.
샘플 응답 콘텐츠:
<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>
위의 응답에서 백엔드 서버의 오류 메시지는 Not Authorged. 이는 사용자가 잘못된 사용자 인증 정보를 전달했을 수 있으므로 이 오류가 발생함을 나타냅니다.
백엔드 서버 호출
백엔드 서버 직접 호출
백엔드 서버를 직접 호출하여 다음을 수행할 수 있습니다.
- Apigee Edge를 통해 요청했을 때 받은 것과 동일한
500 Internal Server Error
응답이 수신되는지 확인합니다. - 백엔드 서버에서 수신된 오류 메시지 (응답) 확인
백엔드 서버를 직접 호출하려면 다음 단계를 따르세요.
- 요청의 일부로 백엔드 서버에 전달해야 하는 모든 필수 헤더, 쿼리 매개변수, 사용자 인증 정보가 있는지 확인합니다.
- 백엔드 서비스에 공개적으로 액세스할 수 있으면
curl
명령어, Postman 또는 기타 REST 클라이언트를 사용하여 백엔드 서버 API를 직접 호출할 수 있습니다. 메시지 프로세서에서만 백엔드 서버에 액세스할 수 있다면
curl
명령어, Postman 또는 기타 REST 클라이언트를 사용하여 메시지 프로세서에서 직접 백엔드 서버 API를 호출할 수 있습니다.- 백엔드 서비스가 실제로
500 Internal Server Error
를 반환하는지 확인하고 백엔드 서버에서 반환한 오류 메시지 (응답)를 확인하여 이 오류의 원인을 판단합니다.
백엔드 서버 로그
백엔드 서버 로그 사용
- 백엔드 서버 로그를 검토하고 오류와 그 원인에 대한 세부정보를 확인합니다.
- 가능하면 백엔드 서버에서 디버그 모드를 사용 설정하여 오류와 원인에 대한 자세한 내용을 확인하세요.
- Trace에서
실패한 API 프록시의 특정 대상 엔드포인트에서 프록시 체인을 사용 중인지 확인합니다. 즉, 대상 서버/대상 엔드포인트가 Apigee Edge에 있는 다른 프록시를 호출하는지 확인합니다. 이를 확인하는 방법은 다음과 같습니다.
실패한 요청에 대한 트레이스가 있으면 Request sent to target server 단계로 이동하여 Show Curl을 클릭합니다.
- 대상 서버 호스트 별칭을 확인할 수 있는 대상 서버에 전송된 요청에 대한 Curl 창이 열립니다.
- API 프록시의 대상 엔드포인트를 검토하고 백엔드 서버 URL 또는 대상 서버의 호스트 이름이 다른 프록시 또는 자체 백엔드 서버를 가리키는지 확인합니다.
- 대상 서버 호스트 별칭이 가상 호스트 별칭을 가리키는 경우 프록시 체이닝이 됩니다. 이 경우 실제로
500 Internal Server Error
의 원인을 확인할 때까지 연결된 프록시에 위의 모든 단계를 반복해야 합니다. 이 경우500 Internal Server Error
가 다른 단계의 다른 연결된 프록시에서도 발생할 수 있으며 이 플레이북 또는 500 내부 서버 오류 플레이북에 제공된 안내에 따라 진단 및 해결할 수 있습니다. - 대상 서버 호스트 별칭이 백엔드 서버를 가리키는 경우 해결로 이동합니다.
해상도
백엔드 서버에서 500
오류가 발생한 것이 확인되면 백엔드 서버팀과 협력하여 문제를 적절히 해결합니다.
위에서 설명한 예에서는 이 문제를 해결하기 위해 사용자에게 유효한 사용자 인증 정보를 전달하도록 요청해야 할 수 있습니다.
핵심 사항
500 Internal Server Error
와 관련해 백엔드 서버에서 반환하는 실제 오류 메시지는 실패한 요청에 대한 트레이스 세션을 캡처한 경우에만 볼 수 있습니다.- 백엔드 서버 응답은 보안상의 이유로 API Monitoring, NGINX 액세스 로그 또는 메시지 프로세서 로그에 로깅되지 않습니다.
- 백엔드 서버 로그를 검토하거나 백엔드에서 디버그 모드를 사용 설정하여
500 Internal Server Error
에 관한 세부정보를 가져오거나 백엔드 서버에서 반환한 오류 메시지를 볼 수 있습니다.
진단 정보 수집 필요
위의 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집하고 Apigee Edge 지원팀에 문의하세요.
Public Cloud 사용자인 경우 다음 정보를 제공합니다.
- 조직 이름
- 환경 이름
- API 프록시 이름
curl
명령어를 완료하여500
오류를 재현합니다.500 Internal Server Error
를 사용한 요청이 포함된 추적 파일- 현재
500
오류가 발생하지 않는 경우 이전에500
오류가 발생했을 때의 시간대 정보를 제공합니다.
Private Cloud 사용자인 경우 다음 정보를 제공하세요.
- 실패한 요청에 대해 발견된 전체 오류 메시지
500
오류가 관찰되는 조직, 환경 이름, API 프록시 이름- API 프록시 번들
500 Internal Server Error
를 사용한 요청이 포함된 추적 파일- NGINX 액세스 로그
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
여기서 ORG, ENV, PORT#는 실제 값으로 대체됩니다.
- 메시지 프로세서 시스템 로그
/opt/apigee/var/log/edge-message-processor/logs/system.log
500
오류가 발생한 시간대 정보가 포함된 기간입니다.