문제 해결

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에 보내고 필요한 속성을 포함하는지 확인합니다.