[英]Stackdriver in GKE throws rpc error "Failed to export to Stackdriver" "context deadline exceeded"
[英]Stackdriver error reporting with gcloud
我正在嘗試使用 gcloud cli 將事件發送到 StackDriver 錯誤報告。
(非常有限的)文檔在這里: https://cloud.google.com/sdk/gcloud/reference/beta/error-reporting/events/report
無論我作為消息發送什么,我似乎都會收到此錯誤:
錯誤:(gcloud.beta.error-reporting.events.report) INVALID_ARGUMENT:ReportedErrorEvent.context 必須包含位置,除非
message
包含異常或堆棧跟蹤。
我嘗試將消息格式化為錯誤報告的 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"
}
}
}
gcloud --message 或 --message-field 參數只是報告錯誤的message
字段,而不是整個 JSON。 既然你不能提供reportLocation
通過gcloud, message
必須是一個堆棧跟蹤或異常。
將API 資源管理器與原始請求配合使用。 記錄錯誤也可以通過以下方式進入錯誤報告:
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"
}
}
}'
嘗試在上下文中添加 httpRequest 詳細信息。
您可以在文檔中找到 json 有效負載的詳細信息。 json中的父對象是ErrorEvent
您可以從那里開始並找到指向其子元素ServiceContext和ErrorContext 的鏈接
雖然我沒有嘗試過命令行選項,但我調試了我們在應用程序中使用的 stackdriver 日志記錄類,以找出我們發送的 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 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 beta error-reporting events report
需要來自編程語言的堆棧跟蹤來報告它。 這是人為的(實際上是非常愚蠢的要求)。
最小的 Java 像堆棧跟蹤:
gcloud beta error-reporting events report --verbosity=debug \
--service test --service-version test1 \
--message "at a()"
如果您將at<SP><CHARS>()
內部消息放在單獨的行中,您可以得到 append 有趣的數據(感謝 Bash $'\n'
魔法:):
gcloud beta error-reporting events report --verbosity=debug \
--service test --service-version test1 \
--message $'Hello world!\nat a()'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.