Med*_* V. 7 logging go gcloud google-cloud-stackdriver google-cloud-run
我正在尝试让 Stackdriver 日志记录适用于在 Google Cloud Run(完全托管)中运行的简单 Go 应用程序,但在 CloudRun 日志中看不到 stackdriver 条目。
我已经基于“官方”stackdriver golang 示例创建了最简单的演示应用程序
Cloud Run 文档指出不应执行其他操作来写入堆栈驱动程序日志
我的服务使用默认服务帐户
我正在使用 Go 1.13 编译代码(Dockerfile 是从Cloud Run 示例“按原样”复制的)
我试图将它部署到不同的地区,但没有成功
在本地运行容器时,使用服务帐户凭据,本地终端或 stackdriver 控制台中不会出现 stackdriver 日志消息
无论如何,在应用程序启动时,我只看到"Before stackdriver logging"后面"After stackdriver logging"没有其他消息\中间有错误
这是日志记录代码的一部分(使用上面的链接获取完整源代码、Dockerfile 以及构建和运行应用程序的说明):
import (
"context"
"log"
"os"
...
"cloud.google.com/go/compute/metadata"
"cloud.google.com/go/logging"
)
func main() {
loggingClient, err := stackdriverClient()
...
log.Println("Before stackdriver logging")
logger.StandardLogger(logging.Info).Println("Stackdriver log")
if err = logger.Flush(); err != nil {
log.Fatalf("Failed to flush client: %v", err)
}
if err = loggingClient.Close(); err != nil {
log.Fatalf("Failed to close client: %v", err)
}
log.Println("After stackdriver logging")
...
}
func stackdriverClient() (client *logging.Client, err error) {
var projectID string
if projectID, err = metadata.ProjectID(); err == nil {
client, err = logging.NewClient(context.Background(), projectID)
}
return
}
Run Code Online (Sandbox Code Playgroud)
事实证明,日志条目已成功写入
但logviewer Web UI中的默认 Cloud Run 过滤器不包含它们,
下面的过滤器表达式对我有用以获取所有日志:
resource.type = "project" OR resource.type = "cloud_run_revision"
Run Code Online (Sandbox Code Playgroud)
"stdout\stderr" 日志条目匹配resource.type="cloud_run_revision",而 stackdriver 日志条目匹配resource.type="project"
| 归档时间: |
|
| 查看次数: |
2599 次 |
| 最近记录: |