Error Reporting에 애플리케이션 오류가 표시되지 않는 경우 다음 단계에 따라 문제를 해결하세요.
시작하기 전에
Error Reporting이 로그 항목을 분석할 수 있는지 확인합니다.
Error Reporting은 Cloud Logging을 기반으로 빌드된 글로벌 서비스이며, 다음 모든 조건에 해당하는 경우 로그 항목을 분석할 수 있습니다.
- Assured Workloads가 사용 중지되었습니다. 자세한 내용은 Assured Workloads 개요를 참조하세요.
- 로그 항목을 저장하는 모든 로그 버킷에서 고객 관리 암호화 키(CMEK)가 사용 중지되었습니다. 로그 버킷의 CMEK 구성을 확인하는 방법은 키 사용 설정 확인을 참조하세요.
- 로그 버킷이 다음 중 하나를 충족합니다.
- 로그 항목이 시작된 동일한 프로젝트에 로그 버킷이 저장되어 있습니다.
- 로그 항목이 프로젝트로 라우팅된 후 프로젝트가 해당 로그 항목을 소유 로그 버킷에 저장했습니다.
구성한 싱크 목록을 보려면 다음 명령어를 실행합니다.
gcloud logging sinks list
이 명령어는 다음과 유사한 출력을 반환합니다.
NAME DESTINATION FILTER _Default logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Default NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency") _Required logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Required LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency") logs-from-samples logging.googleapis.com/projects/my-team-project/locations/global/buckets/sample-bucket (empty filter) regional_logs logging.googleapis.com/projects/my-team-project/locations/europe-west1/buckets/bucket_for_regional_logs (empty filter) test-logs logging.googleapis.com/projects/team-b-project/locations/global/buckets/test-bucket (empty filter)
이 예시에서 로그 항목의 소스 Google Cloud 프로젝트는
my-team-project
입니다. 결과는 다음과 같습니다.- 로그 버킷은 로그 항목을 라우팅하는 동일한 프로젝트에 의해 저장되기 때문에 Error Reporting은
_Default
,_Required
,logs-from-samples
싱크가 라우팅하는 로그 항목을 분석할 수 있습니다. my-team-project
의 싱크가 로그 항목을 다른 프로젝트의 로그 버킷으로 라우팅하기 때문에 Error Reporting은test-logs
라는 로그 버킷에 저장된 로그 항목을 분석할 수 없습니다.
Google Cloud CLI가 설치되었는지 확인합니다.
gcloud CLI에
beta
구성요소가 사용 설정되어 있는지 확인합니다.
로그를 사용할 때
이 섹션에서는 오류 데이터가 Cloud Logging 버킷에 기록될 때 문제 해결 지원을 제공하고 Error Reporting을 사용하여 해당 로그 버킷을 자동으로 분석합니다.
샘플 로그 항목 생성
프로젝트 설정을 확인하기 위해 다음 gcloud
명령어를 사용하여 Error Reporting에서 선택할 로그 항목을 프로그래매틱 방식으로 생성할 수 있습니다.
gcloud logging write --payload-type=json test-errors-log \
'{"serviceContext":
{"service": "manual-testing"},
"message": "Test Error\n at /test.js:42:42",
"context": {"httpRequest":
{"url": "/test","method": "GET","responseStatusCode": 500}}}'
그런 다음 Error Reporting을 열고 새로 생성된 오류가 표시되는지 확인합니다.
로그 항목 형식 확인
Cloud Logging 페이지로 이동하여 애플리케이션에서 전송한 예외 데이터를 포함하는 로그 항목을 찾습니다.
로그 항목이 예상된 형식을 사용하는 지 확인합니다.
Error Reporting API를 사용할 때
-
Enable the required API.
테스트 오류 보내기
서비스에 수동으로 오류를 보내 봅니다.
다음
gcloud
명령어를 사용하여 Error Reporting에 테스트 오류를 보고할 수 있습니다.gcloud beta error-reporting events report --service Manual --service-version test1 \ --message "java.lang.TestError: msg at com.example.TestClass.test(TestClass.java:51) at com.example.AnotherClass(AnotherClass.java:25)"
cURL 명령어를 사용하여 REST API 호출을 테스트할 수 있습니다. 다음 명령어를 보내기 전에
PROJECT_ID
및API_KEY
를 올바른 값으로 바꿉니다.curl -X POST -H "Content-Type: application/json" \ -d '{"message":"java.lang.TestError: msg\n\tat com.example.TestClass.test(TestClass.java:51)\n\tat com.example.AnotherClass(AnotherClass.java:25)","serviceContext":{"service":"manual-testing"}}' \ https://clouderrorreporting.googleapis.com/v1beta1/projects/PROJECT_ID/events:report?key=API_KEY
전송된 페이로드 확인
애플리케이션이 예외 데이터를 올바른 형식으로 API에 보내고 필요한 속성을 포함하는지 확인합니다.
스택 트레이스가 로깅되지만 Error Reporting에서 인식하지 않음
jsonPayload
의 message
필드를 사용하여 오류를 로깅하고 Error Reporting에서 오류를 캡처할 것으로 예상합니다. 그러나 오류 데이터는 캡처되지 않습니다.
이 오류를 해결하려면 다음을 시도해 보세요.
jsonPayload
에stack_trace
또는exception
필드가 포함되어 있지 않은지 확인합니다. 이러한 필드가 있으면message
필드는 평가되지 않습니다.스택 트레이스의 구조가 지원되는 프로그래밍 언어 형식 중 하나인지 확인합니다. 지원되지 않는 형식을 사용하면 Error Reporting에서 스택 트레이스가 캡처되지 않습니다.
자세한 내용은 로그의 형식 오류를 참고하세요.