ログのエラーの形式設定

このページでは、Cloud Logging を使用してエラーイベントを報告するために必要なログエントリの形式について説明します。

始める前に

Error Reporting API を使用している場合、エラーイベントを ReportedErrorEvent に書き込むことで、アプリケーションからエラーイベントを報告できます。こうすると、適切な形式のエラー メッセージのログエントリが Cloud Logging に生成されます。生成される logName は次のような形式になります。

  projects/<PROJECT_ID>/clouderrorreporting.googleapis.com%2Freported_errors

この方法を使用した場合、Cloud Logging の取り込み料金が発生することがあります。このような料金を管理するには、ログの除外をご覧ください。

Cloud Logging を使用してエラーイベントを報告する場合は、次のセクションをご覧ください。

形式の要件

Cloud Logging 内のスタック トレースまたは例外を含むログエントリや、ReportedErrorEvent のような形式のログエントリは、Error Reporting でエラーになります。

エラーデータは、次のいずれかのタイプとして、LogEntry 共用体フィールド payload に記録する必要があります。

  • 複数行の textPayload
  • jsonPayloadmessage フィールド

ご使用の言語とプラットフォームの設定手順に従う必要もあります。App EngineCompute EngineGoogle Kubernetes Engine からのエラーデータをロギングする際の唯一のフォーマット要件は、ログエントリに完全な例外メッセージとスタック トレースが含まれていることです。

例外メッセージとスタック トレースの形式を指定する方法は、Error Reporting の report のリファレンス ページで ReportedErrorEvent のセクションをご覧ください。

@type の指定

ログエントリに type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent@type が含まれている場合、Error Reporting ではすべての必須フィールドが存在するものとしてログエントリを評価し、エラーイベントを取得します。

JSON 表現

Cloud Logging を使用してエラーデータを送信する場合、指定する ReportedErrorEvent で次の JSON 構造を使用する必要があります。

    {
      "eventTime": string,
      "serviceContext": {
        "service": string,     // Required.
        "version": string
      },
      "message": string,       // Required. Should contain the full exception
                               // message, including the stack trace.
      "@type": string          // Optional.  Review "Specifying @type" section above.
      "context": {
        "httpRequest": {
          "method": string,
          "url": string,
          "userAgent": string,
          "referrer": string,
          "responseStatusCode": number,
          "remoteIp": string
        },
        "user": string,
        "reportLocation": {    // Required if no stack trace is provided.
          "filePath": string,
          "lineNumber": number,
          "functionName": string
        }
      }
    }

サポートされるモニタリング対象リソースタイプ

LogEntry 構造を使用してロギングする場合、resource フィールドを、サポートされる次のいずれかのモニタリング対象リソースタイプに設定する必要があります。

  • app_script_function
  • aws_ec2_instance
  • cloud_function
  • cloud_run_revision
  • consumed_api
  • container
  • dataflow_step
  • gae_app
  • gce_instance
  • k8s_container
  • ml_job1
  • global1

1 textPayload はサポートされません

ログエントリの形式の例

LogEntry.jsonPayload でログに記録された場合に、Error Reporting によって正しく処理されるログエントリの例を次に示します。

@type が正しく指定されているので、このログエントリはグループ化されます。

{...
  {
    "jsonPayload": {
      "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
      "message": "An error message without stacktrace or exception"
    },
    "logName": "projects/test-project/logs/reported-error",
    "resource": {
      "labels": {
        "project_id": "test-project"
      },
      "type": "global"
    },
    "severity": "ERROR",
    "timestamp": "2019-06-27T13:43:26.375834551Z"
  }
}

このログエントリのペイロード message にはスタック トレースと例外が含まれているため、これも Error Reporting によってグループ化されます。

{
      "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"
      }
    }

ReportedErrorEvent のインスタンスで使用されるフィールドの詳細は、ドキュメントをご覧ください。