我似乎在某处缺少某些配置,但不知道在哪里。
我的应用程序(golang)正在使用堆栈驱动程序日志记录。当我在本地运行时,它工作正常,并且我的日志消息显示在Stackdriver中。当我在GKE中运行时,我的自定义记录器消息不会显示。
任何标准输出消息(fmt.println())将显示在堆栈驱动程序中。他们只是没有适当的严重性,而是希望我们使用日志记录API。我可能在我的GKE实例中配置错误,使Google日志无法显示?
很抱歉,您的帖子含糊不清,但是我没有太多事情要做,没有遇到任何错误。
这是我发送邮件的代码(如果有帮助的话)。
func logMessage(message string, transactionID string, severity logging.Severity) {
ctx := context.Background()
// Creates a client.
client, err := logging.NewClient(ctx, loggingData.ProjectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Selects the log to write to.
logger := client.Logger(loggingData.LogName)
logger.Log(logging.Entry{Payload: message, InsertID: transactionID, Severity: severity})
// Closes the client and flushes the buffer to the Stackdriver Logging
// service.
if err := client.Close(); err != nil {
log.Panicln("Failed to close client: \n", err.Error())
return
}
return
}
更新:
我让我的SSH进入了节点(VM实例),并确认FluentD看起来可以正常工作并且正在接受更改。我打开了日志文件,仅从fmt.Println中看到了东西,而从golang云Logger中没有看到任何东西。
也许我不了解Google Stackdriver Logging(https://godoc.org/cloud.google.com/go/logging)应该如何工作?显然,我缺少了一些东西,只是不确定什么。
谢谢
答案 0 :(得分:1)
在GKE上,使用了流利的代理,它包含在VM映像(节点)中。
他的职责是监视对驻留在目录/var/lib/docker/containers/
中的Docker日志文件的更改,这些日志文件使用捕获容器名称和容器名称的名称从/var/log/containers
目录进行符号链接。然后将这些日志提交给Google Cloud Logging,后者假设安装了cloud-logging插件。
您可以通过其他输入(例如Streaming unstructured (text) or structured (JSON) logs via log files)为流日志自定义代理配置。
默认情况下,流畅地从受监控的“ k8s_container”标签中提取local_resource_id:
资源。格式为:
'k8s_container.<namespace_name>.<pod_name>.<container_name>'.
流利的代理将字段“ log”重命名为更通用的字段“ message”。这样,在从记录中提取“时间”,“严重性”和“流”之后,fluent-plugin-google-cloud便知道将字段扁平化为textPayload而不是jsonPayload。
如果未设置“严重性”,则假定 stderr 为错误,而 stdout 为INFO。
在创建集群时可以启用代理,然后将创建默认的流畅Pod。
您也可以执行manual installation of stackdriver-logging-agent in GKE(流畅)。
首先,我建议您查找是否正在运行代理。
要执行此操作,请SSH到您的节点并检查代理是否正在运行,请运行以下命令行
ps ax | grep fluentd
输出示例:
2284 ? Sl 0:00 /opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd [...]
2287 ? Sl 42:44 /opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd [...]
通过运行以下命令行进行测试:
logger "Some test message"
检查stackdriver日志记录您的测试消息
答案 1 :(得分:0)
我在similar issue中使用了在Cloud Run中运行的golang应用程序
能够通过过滤器resource.type = "project"