使用 gcloud 报告 Stackdriver 错误
Stackdriver error reporting with gcloud
我正在尝试使用 gcloud cli 将事件发送到 StackDriver 错误报告。
(非常有限的)文档在这里:https://cloud.google.com/sdk/gcloud/reference/beta/error-reporting/events/report
无论我发送什么消息,我似乎都会收到此错误:
ERROR: (gcloud.beta.error-reporting.events.report) INVALID_ARGUMENT: ReportedErrorEvent.context must contain a location unless message
contain an exception or stacktrace.
我已尝试将消息格式化为错误报告的 JSON 表示形式:https://cloud.google.com/error-reporting/docs/formatting-error-messages
但信息似乎是一样的。这是一个示例命令和 JSON:
gcloud beta error-reporting events report --service foo --message-file err.json
{
"serviceContext": {
"service": "foo"
},
"message": "Whoops!",
"context": {
"reportLocation": {
"filePath": "/usr/local/bin/test",
"lineNumber": 123,
"functionName": "main"
}
}
}
尝试在上下文中添加 httpRequest 详细信息。
您可以在文档中找到 json 负载的详细信息。
json 中的父对象是 ErrorEvent
您可以从那里开始并找到指向其子元素的链接 ServiceContext and ErrorContext
虽然我没有尝试过命令行选项,但我调试了我们在应用程序中使用的堆栈驱动程序日志记录 类,以找出我们正在发送的 json 有效负载,这是示例json 从我们的应用程序中触发。
{
"context": {
"httpRequest": {
"responseStatusCode": 500,
"method": "GET",
"url": "http://localhost:16500/product"
},
"user": "2247177"
},
"message": "org.springframework.web.client.HttpServerErrorException: 500 Server Error
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java: 94)
",
"serviceContext": {
"service": "cart",
"version": ""
}
gcloud --message 或 --message-field 参数只是报告错误的 message
字段,而不是整个 JSON。由于您无法通过 gcloud 提供 reportLocation
,因此 message
必须是堆栈跟踪或异常。
将 API explorer 与原始请求一起使用有效。记录错误也会通过以下方式进入错误报告:
gcloud beta logging write --payload-type=json test-errors-log '
{
"serviceContext": {
"service": "foo"
},
"message": "Whoops!",
"context": {
"reportLocation": {
"filePath": "/usr/local/bin/test",
"lineNumber": 123,
"functionName": "main"
}
}
}'
另一种方式。
gcloud logging write --payload-type=json test-errors-log '
{
"serviceContext": {"service": "foo"},
"message": "message with stacktrace\n at /test.js"
}
'
gcloud logging write --payload-type=json test-errors-log '
{
"@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
"message": "message without stacktrace"
}
'
gcloud beta error-reporting events report --service foo --message 'message with stacktrace
at /test.js'
我正在尝试使用 gcloud cli 将事件发送到 StackDriver 错误报告。
(非常有限的)文档在这里:https://cloud.google.com/sdk/gcloud/reference/beta/error-reporting/events/report
无论我发送什么消息,我似乎都会收到此错误:
ERROR: (gcloud.beta.error-reporting.events.report) INVALID_ARGUMENT: ReportedErrorEvent.context must contain a location unless
message
contain an exception or stacktrace.
我已尝试将消息格式化为错误报告的 JSON 表示形式:https://cloud.google.com/error-reporting/docs/formatting-error-messages 但信息似乎是一样的。这是一个示例命令和 JSON:
gcloud beta error-reporting events report --service foo --message-file err.json
{
"serviceContext": {
"service": "foo"
},
"message": "Whoops!",
"context": {
"reportLocation": {
"filePath": "/usr/local/bin/test",
"lineNumber": 123,
"functionName": "main"
}
}
}
尝试在上下文中添加 httpRequest 详细信息。
您可以在文档中找到 json 负载的详细信息。 json 中的父对象是 ErrorEvent
您可以从那里开始并找到指向其子元素的链接 ServiceContext and ErrorContext
虽然我没有尝试过命令行选项,但我调试了我们在应用程序中使用的堆栈驱动程序日志记录 类,以找出我们正在发送的 json 有效负载,这是示例json 从我们的应用程序中触发。
{
"context": {
"httpRequest": {
"responseStatusCode": 500,
"method": "GET",
"url": "http://localhost:16500/product"
},
"user": "2247177"
},
"message": "org.springframework.web.client.HttpServerErrorException: 500 Server Error
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java: 94)
",
"serviceContext": {
"service": "cart",
"version": ""
}
gcloud --message 或 --message-field 参数只是报告错误的 message
字段,而不是整个 JSON。由于您无法通过 gcloud 提供 reportLocation
,因此 message
必须是堆栈跟踪或异常。
将 API explorer 与原始请求一起使用有效。记录错误也会通过以下方式进入错误报告:
gcloud beta logging write --payload-type=json test-errors-log '
{
"serviceContext": {
"service": "foo"
},
"message": "Whoops!",
"context": {
"reportLocation": {
"filePath": "/usr/local/bin/test",
"lineNumber": 123,
"functionName": "main"
}
}
}'
另一种方式。
gcloud logging write --payload-type=json test-errors-log '
{
"serviceContext": {"service": "foo"},
"message": "message with stacktrace\n at /test.js"
}
'
gcloud logging write --payload-type=json test-errors-log '
{
"@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
"message": "message without stacktrace"
}
'
gcloud beta error-reporting events report --service foo --message 'message with stacktrace
at /test.js'