问题排查

如果您的应用错误未显示在 Error Reporting 中,请按照以下步骤进行问题排查。

须知事项

  1. 验证日志存储桶中是否停用了客户管理的加密密钥 (CMEK)。

    使用 CMEK 保护日志时,日志不会提供给 Error Reporting,因此无法识别错误组。Error Reporting 不适用于以下任意日志:

    • 存储在启用了 CMEK 的日志存储桶中的日志。
    • 存储在多个日志存储桶中的日志,其中至少一个日志存储桶启用了 CMEK。
    • 组织中的任何日志存储桶中存储的日志,前提是组织级政策要求启用 CMEK。

    如需了解如何确定日志存储桶的 CMEK 配置,请参阅验证密钥启用情况

  2. 验证 Error Reporting 能否分析您的日志。

    Error Reporting 只能分析存储在 global Cloud 区域(来源和目标 Google Cloud 项目相同)的 Cloud Logging 存储分区中的日志条目。

    如需查看 Error Reporting 能否分析您的日志,请验证您是否将日志存储在 global 区域(其中源 Google 项目和目标 Google Cloud 项目相同)的存储分区中。

    如需查看已配置的接收器列表,请运行以下命令:

    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_Requiredlogs-from-samples 接收器路由的日志,因为它们将日志路由到同一项目的 global 区域中的存储分区。
    • Error Reporting 无法分析 regional_logs 接收器路由的日志,因为它将日志路由到 europe-west1 区域中的区域存储桶。
    • Error Reporting 无法分析 test-logs 接收器路由的日志,因为它将日志路由到不同于源项目的项目 (team-b-project)。
  3. 确保您已安装 Google Cloud CLI

  4. 确保您已为 gcloud CLI 启用 beta 组件

使用日志时

本部分提供了在错误数据写入 Cloud Logging 存储分区时提供的问题排查支持,并且依靠 Error Reporting 来自动分析这些日志存储分区。

生成样本日志条目

如需确认您的项目设置,您可以通过编程方式生成一个日志条目,Error Reporting 将使用以下 gcloud 命令获取该日志条目:

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 发送异常数据,并且该数据包含所需的属性。