문제 해결

Error Reporting에 애플리케이션 오류가 표시되지 않는 경우 다음 단계에 따라 문제를 해결하세요.

시작하기 전에

  1. Error Reporting이 로그 항목을 분석할 수 있는지 확인합니다.

    Error Reporting은 Cloud Logging을 기반으로 빌드된 글로벌 서비스이며, 다음 모든 조건에 해당하는 경우 로그 항목을 분석할 수 있습니다.

    • Assured Workloads가 사용 중지되었습니다. 자세한 내용은 Assured Workloads 개요를 참조하세요.
    • 로그 항목을 저장하는 모든 로그 버킷에서 고객 관리 암호화 키(CMEK)가 사용 중지되었습니다. 로그 버킷의 CMEK 구성을 확인하는 방법은 키 사용 설정 확인을 참조하세요.
    • 로그 버킷이 다음 중 하나를 충족합니다.
      • 로그 항목이 시작된 동일한 프로젝트에 로그 버킷이 저장되어 있습니다.
      • 로그 항목이 프로젝트로 라우팅된 후 프로젝트가 해당 로그 항목을 소유 로그 버킷에 저장했습니다.
    CMEK가 사용 설정된 로그 버킷에 로그 항목을 저장하는 경우에도 Error Reporting을 사용할 수 있습니다. 하지만 Error Reporting 클라이언트 라이브러리 또는 Error Reporting API를 사용해야 합니다. 자세한 내용은 Error Reporting API 개요Error Reporting 클라이언트 라이브러리를 참조하세요.

    구성한 싱크 목록을 보려면 다음 명령어를 실행합니다.

    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라는 로그 버킷에 저장된 로그 항목을 분석할 수 없습니다.
  2. Google Cloud CLI가 설치되었는지 확인합니다.

  3. 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를 사용할 때

  1. Enable the required API.

    Enable the API

  2. 테스트 오류 보내기

    서비스에 수동으로 오류를 보내 봅니다.

    다음 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_IDAPI_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
    
  3. 전송된 페이로드 확인

    애플리케이션이 예외 데이터를 올바른 형식으로 API에 보내고 필요한 속성을 포함하는지 확인합니다.

스택 트레이스가 로깅되지만 Error Reporting에서 인식하지 않음

jsonPayloadmessage 필드를 사용하여 오류를 로깅하고 Error Reporting에서 오류를 캡처할 것으로 예상합니다. 그러나 오류 데이터는 캡처되지 않습니다.

이 오류를 해결하려면 다음을 시도해 보세요.

  • jsonPayloadstack_trace 또는 exception 필드가 포함되어 있지 않은지 확인합니다. 이러한 필드가 있으면 message 필드는 평가되지 않습니다.

  • 스택 트레이스의 구조가 지원되는 프로그래밍 언어 형식 중 하나인지 확인합니다. 지원되지 않는 형식을 사용하면 Error Reporting에서 스택 트레이스가 캡처되지 않습니다.

자세한 내용은 로그의 형식 오류를 참고하세요.