问题排查

如果您的应用错误未显示在 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_Requiredlogs-from-samples 接收器路由的日志,因为它们会将日志路由到同一项目内 global 区域内的存储分区。
    • Error Reporting 无法分析存储在名为 test-logs 的日志存储桶中的日志,因为 my-team-project 中的接收器将日志路由到其他项目中的日志存储桶。
    • 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 发送异常数据,并且该数据包含所需的属性。