簡體   English   中英

使用 gcloud 報告 Stackdriver 錯誤

[英]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

您可以從那里開始並找到指向其子元素ServiceContextErrorContext 的鏈接

雖然我沒有嘗試過命令行選項,但我調試了我們在應用程序中使用的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM