Stackdriver Logging의 형식 지정 오류

App Engine, Compute Engine, Google Kubernetes Engine에서 오류 데이터를 로깅할 때는 로그 항목에 전체 오류 메시지와 스택 추적을 포함하기만 하면 됩니다. 오류 데이터는 여러 줄의 textPayload로 또는 jsonPayloadmessage 필드에 로깅되어야 합니다. 자세한 내용은 LogEntry 참고 자료를 참조하세요. 해당 언어 및 플랫폼의 설정 안내도 따라야 합니다.

Stackdriver Logging을 사용하여 오류 데이터를 전송할 때는 오류 데이터의 JSON 구조가 다음과 같아야 합니다.

JSON 표현

{
  "eventTime": string,
  "serviceContext": {
    "service": string,     // Required.
    "version": string
  },
  "message": string,       // Required. Should contain the full exception
                           // message, including the stack trace.
  "context": {
    "httpRequest": {
      "method": string,
      "url": string,
      "userAgent": string,
      "referrer": string,
      "responseStatusCode": number,
      "remoteIp": string
    },
    "user": string,
    "reportLocation": {    // Required if no stack trace in 'message'.
      "filePath": string,
      "lineNumber": number,
      "functionName": string
    }
  }
}

다음 페이로드를 Stackdriver Error Reporting API로 전송하거나 LogEntry.jsonPayload에 로깅하면 Error Reporting에서 올바르게 처리합니다.

스택 추적을 포함한 message와 페이로드:

{
  "serviceContext": {
    "service": "frontend",
    "version": "bf6b5b09b9d3da92c7bf964ab1664fe751104517"
  },
  "message": "com.example.shop.Template$CartDiv retrieveCart: Error\njava.lang.IndexOutOfBoundsException: Index: 4, Size: 4\n\tat java.util.ArrayList.rangeCheck(ArrayList.java:635)\n\tat java.util.ArrayList.get(ArrayList.java:411)\n\tat com.example.shop.Cart.retrieve(Cart.java:76)\n\tat com.example.shop.Cart.generate(Cart.java:55)\n\tat com.example.shop.Template$CartDiv.retrieveCart(Template.java:113)\n\tat com.example.shop.Template.generate(Template.java:22)\n\tat com.example.shop.CartServlet.doGet(CartServlet.java:115)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:717)\n",
  "context": {
    "httpRequest": {
      "method": "GET",
      "url": "http://example.com/shop/cart",
      "responseStatusCode": 500
    },
    "user": "9f32f587135aa6774e78ed30fbaabcce3ec5528f"
  }
}

스택 추적이 없는 message와 페이로드. reportLocation 필요:

{
  "serviceContext": {"service": "worker"},
  "message": "Cannot process job: Missing attribute 'userId'",
  "context": {
    "reportLocation": {
      "filePath": "cleanup.js",
      "lineNumber": 42,
      "functionName": "processJob"
    }
  }
}

지원 및 문제해결 페이지에서 문제해결 명령어를 자세히 살펴보세요.

필드

필드 이름 유형 설명 참고
eventTime string

오류 보고서에 제공된 대로 이벤트가 발생한 시간입니다. 보고서에 타임스탬프가 포함되어 있지 않으면 Error Reporting 시스템에서 오류를 수신한 시간이 사용됩니다.

RFC 3339 UTC 'Zulu' 형식의 타임스탬프로 정밀도는 나노초 수준입니다. 예: "2014-10-02T15:01:23.045123456Z"

선택사항
serviceContext object 이 오류가 보고된 서비스 컨텍스트입니다. 필수
serviceContext.service string

실행 파일 이름, 작업, Google App Engine 서비스 이름과 같은 서비스 식별자입니다. 이 필드는 새 코드가 배포될 때마다 변경할 수 있는 version과 달리 시간이 지남에 따라 상대적으로 안정된 값이 적을 것으로 예상됩니다.

필수
serviceContext.version string 개발자가 제공한 소스 코드 버전을 나타내며, 예를 들어 버전 라벨 또는 Git SHA-1 해시를 나타낼 수 있습니다. 개발자가 버전을 제공하지 않으면 값은 default로 설정됩니다. App Engine 표준 환경에서는 버전이 앱의 버전으로 설정됩니다. 선택사항
message string 오류 메시지.
`context.reportLocation`이 제공되지 않으면 메시지는 헤더(일반적으로 예외 유형 이름과 오류 메시지로 구성됨)와 지원되는 프로그래밍 언어 및 형식 중 하나에서 예외 스택 추적을 포함해야 합니다.
지원되는 언어는 자바, Python, JavaScript, Ruby, C#, PHP, Go입니다.
지원되는 스택 추적 형식은 다음과 같습니다.
필수
context object 오류가 발생한 컨텍스트에 대한 데이터입니다. 선택사항
context.httpRequest object 오류가 발생했을 때 처리된 HTTP 요청입니다. 선택사항
context.httpRequest.method string GET, POST 등과 같은 HTTP 요청의 유형입니다. 선택사항
context.httpRequest.url string 요청의 URL입니다. 선택사항
context.httpRequest.userAgent string 요청과 함께 제공된 사용자 에이전트 정보입니다. 선택사항
context.httpRequest.referrer string 요청과 함께 제공된 리퍼러 정보입니다. 선택사항
context.httpRequest.responseStatusCode number 요청에 대한 HTTP 응답 상태 코드입니다. 선택사항
context.httpRequest.remoteIp string 요청이 시작된 IP 주소입니다. 오류 보고서에서 제공된 데이터에 따라 IPv4, IPv6 또는 IP 주소에서 파생된 토큰이 될 수 있습니다. 선택사항
context.user string 장애를 일으켰거나 장애로부터 영향을 받은 사용자입니다. 사용자 ID, 이메일 주소 또는 사용자를 고유하게 식별하는 임의의 토큰이 될 수 있습니다. 오류 보고서를 보낼 때 사용자가 로그인하지 않은 경우 이 필드를 비워둡니다. 이 경우Error Reporting 시스템은 영향을 받는 사용자를 구별하기 위해 IP 주소와 같은 다른 데이터를 사용합니다. ErrorGroupStats에서 affected_users_count를 참조하세요. 선택사항
context.reportLocation object 소스 코드에서 오류를 보고하기로 결정한 위치, 일반적으로 오류가 로깅된 위치입니다. 로깅된 예외의 경우 예외가 로깅되는 소스 행이 되며 일반적으로 발견된 위치에 가깝습니다. 선택사항
context.reportLocation.filePath string 잘린 상대 경로 또는 프로덕션 머신의 전체 경로를 포함할 수 있는 소스 코드 파일 이름입니다. 선택사항
context.reportLocation.lineNumber number 1 기반. 0은 행 번호를 알 수 없음을 나타냅니다. 선택사항
context.reportLocation.functionName string 사람이 읽을 수 있는 함수 또는 메소드의 이름입니다. 이 값에는 클래스 또는 패키지 이름과 같은 선택사항 컨텍스트가 포함될 수 있습니다. 예를 들어 자바의 경우 my.package.MyClass.method와 같습니다. 선택사항
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Stackdriver Error Reporting Documentation