문제 해결

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

시작하기 전에

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

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

    • 로그 항목이 global 위치의 로그 버킷에 저장되어 있습니다.
    • 고객 관리 암호화 키(CMEK)가 로그 버킷에서 사용 중지되어 있습니다. 로그 버킷의 CMEK 구성을 확인하는 방법은 키 사용 설정 확인을 참조하세요.
    • 로그 버킷이 다음 중 하나를 충족합니다.
      • 로그가 시작된 동일한 프로젝트에 로그 버킷이 저장되어 있습니다.
      • 로그가 프로젝트로 라우팅된 후 프로젝트가 해당 로그를 소유 로그 버킷에 저장했습니다.

    Error Reporting이 로그를 분석할 수 있는지 확인하려면 소스 및 대상 Google Cloud 프로젝트가 동일한 프로젝트인 global 리전의 버킷에 로그를 저장하고 있는지 확인합니다.

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

    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 싱크가 라우팅하는 로그를 분석할 수 있습니다. 동일한 프로젝트 내의 global 리전에 있는 버킷으로 로그를 라우팅하기 때문입니다.
    • my-team-project의 싱크가 로그를 다른 프로젝트의 로그 버킷으로 라우팅하기 때문에 Error Reporting은 test-logs라는 로그 버킷에 저장된 로그를 분석할 수 없습니다.
    • Error Reporting은 regional_logs 싱크가 라우팅하는 로그를 분석할 수 없습니다. europe-west1 리전의 리전화된 버킷으로 로그를 라우팅하기 때문입니다.
  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를 사용할 때

API 사용 설정

Google Cloud 콘솔의 탐색 패널에서 API 및 서비스를 선택하고 API 및 서비스 사용 설정을 클릭한 다음 Error Reporting API를 사용 설정합니다.

Error Reporting 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_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

전송된 페이로드 확인

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