本文档介绍了 Error Reporting 的常见问题排查场景。
发送到 Error Reporting API 的错误事件不会显示
您可以使用 Error Reporting API 将错误事件发送到 Google Cloud 项目。不过,这些事件不会显示在错误报告页面上。
如需解决此问题,请执行以下操作:
确保已启用 Error Reporting API。
Enable the required API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.打开 Cloud Shell 并使用 Google Cloud CLI 验证您是否可以向项目发送错误事件:
运行以下命令:
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)"前往错误报告页面,并验证该页面是否显示了标题为
TestError: msg的错误。前往“日志浏览器”页面,然后在日志条目中搜索
TestError。系统会自动创建日志条目。
验证您的应用是否正在向
report端点发送错误事件,以及应用是否正在将请求正文格式化为ReportedErrorEvent对象。您还应验证是否正在创建日志条目。 使用 Error Reporting API 时,系统会自动生成包含格式正确的错误消息的日志条目,并将其写入 Cloud Logging。这些日志条目会写入logName格式如下的日志:projects/PROJECT_ID/clouderrorreporting.googleapis.com%2Freported_errors
显示了错误事件,但 Error Reporting API 已停用
您停用了 Error Reporting API。不过, Google Cloud 控制台的错误报告页面会显示错误事件。
这是预期行为。错误事件是响应于对 report 端点发出的 Error Reporting API 调用而创建的。
不过,当 Error Reporting 可以分析您的日志数据时,也会推断出错误事件。
系统不会从日志数据中推断出错误事件
您希望 Error Reporting 扫描日志数据并推断错误事件。不过,即使日志条目记录了错误数据,Error Reporting 页面也不会显示任何错误事件。
如需解决此问题,请执行以下操作:
验证 Error Reporting 是否可以分析您的日志条目。
Error Reporting 是基于 Cloud Logging 构建的全球服务,当满足以下所有条件时,它可以分析日志条目:
- Assured Workloads 已停用。如需了解详情,请参阅 Assured Workloads 概览。
- 存储日志条目的所有日志存储分区均已停用客户管理的加密密钥 (CMEK)。Error Reporting 无法将日志条目存储在启用 CMEK 的日志存储分区中。如需了解如何确定日志存储桶的 CMEK 配置,请参阅验证密钥启用情况。
- 日志存储桶满足以下条件之一:
- 日志存储桶存储在日志条目源自的同一项目中。
- 日志条目被路由到一个项目,然后该项目将这些日志条目存储在自己拥有的日志存储桶中。
如需查看已配置的接收器列表,请运行以下命令:
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、_Required和logs-from-samples接收器路由的日志条目,因为日志存储桶由路由日志条目的同一项目存储。 - Error Reporting 无法分析存储在名为
test-logs的日志存储桶中的日志条目,因为my-team-project中的接收器会将日志条目路由到其他项目中的日志存储桶。
使用 Google Cloud CLI 验证您是否可以写入生成错误事件的日志条目。
运行以下命令:
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}}}'前往“日志浏览器”页面,然后在日志条目中搜索
Test Error。此日志条目由 gcloud CLI 生成。如果日志条目未与任何错误组相关联,请等待大约一分钟,然后刷新页面。在日志条目被提取后,系统会检测错误事件。
前往 Error Reporting 页面,并验证该页面是否显示标题为
Test Error的错误。
前往“日志浏览器”页面,并验证您的应用是否正在写入具有预期格式的日志条目。
找到包含您的应用发送的异常数据的日志条目,并验证其格式。如果格式不正确,请更新您的申请。
日志条目包含堆栈轨迹,但未创建错误事件
您生成了一个日志条目,其 message 字段包含堆栈轨迹。不过,Error Reporting 页面并未列出相应的错误事件。
如需解决此失败问题,请尝试执行以下操作:
确保
jsonPayload不包含stack_trace或exception字段。如果存在这些字段,则不会评估message字段。确保堆栈轨迹的结构采用支持的编程语言格式之一。 如果使用不受支持的格式,Error Reporting 将不会捕获堆栈轨迹。
如需了解详情,请参阅设置日志条目的格式以报告错误事件。