Stackdriver Logging でのフォーマット エラー

App EngineCompute EngineGoogle 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」が指定されていない場合、メッセージにヘッダー(通常、例外タイプ名とエラー メッセージで構成される)と、サポートされているプログラミング言語およびフォーマットの例外スタック トレースを含める必要があります。
サポートされる言語は、Java、Python、JavaScript、Ruby、C#、PHP、Go です。
サポートされるスタック トレースのフォーマットは、次のとおりです。
必須
context object エラーが発生したコンテキストに関するデータ。 省略可
context.httpRequest object エラーがトリガーされた際に処理された HTTP リクエスト。 省略可
context.httpRequest.method string GETPOST などの 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 アドレスなど、他のデータを使用して影響を受けるユーザーを区別します。ErrorGroupStatsaffected_users_count をご覧ください。 省略可
context.reportLocation object ソースコード中、エラーを報告することが決定した位置で、通常、エラーがログ記録された場所です。ログに記録された例外では、これは例外がログ記録されたソース行となりますが、通常、例外が捕捉された場所の近くです。 省略可
context.reportLocation.filePath string 切り詰められた相対パスまたは本番機のフルパスを含むことができるソースコードのファイル名。 省略可
context.reportLocation.lineNumber number 1 ベース。0 は行番号が不明であることを示します。 省略可
context.reportLocation.functionName string 関数またはメソッドの、人に読める名前。この値には、クラスまたはパッケージ名などの任意のコンテキストを含めることができます。たとえば、Java の場合は my.package.MyClass.method となります。 省略可
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Stackdriver Error Reporting ドキュメント