繁体   English   中英

未显示 GKE 的 Stackdriver 日志记录

[英]Stackdriver logging not showing up for GKE

我似乎在某处缺少一些配置,但不知道在哪里。

我的应用程序 (golang) 使用 stackdriver 日志记录。 当我在本地运行时它工作正常并且我的日志消息显示在 Stackdriver 中。 当我在 GKE 中运行时,我的自定义记录器消息不会显示。

任何标准输出消息 (fmt.println()) 都将显示在堆栈驱动程序中。 他们只是不会达到适当的严重程度,而宁愿我们使用日志记录 API。 我可能在我的 GKE 实例中配置错误导致谷歌日志记录不显示?

对不起,我的帖子含糊不清,但我没什么可继续的,没有收到任何错误。

如果有帮助,这是我发送消息的代码。

    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 云记录器的东西。

也许我不明白 Google Stackdriver Logging ( https://godoc.org/cloud.google.com/go/logging ) 应该如何工作? 显然我遗漏了一些东西,只是还不确定是什么。

谢谢

在 GKE 上,使用了 fluentd 代理,它包含在 VM 映像(节点)中。 他的角色是观察位于目录/var/lib/docker/containers/中的 Docker 日志文件的更改,这些文件使用捕获 pod 名称和容器名称的名称从/var/log/containers目录符号链接。 然后将这些日志提交给谷歌云日志,谷歌云日志假定安装了云日志插件。

您可以从其他输入(例如通过日志文件流式传输非结构化(文本)或结构化(JSON)日志)自定义流式日志的代理配置。

默认情况下,fluentd 从监控的“k8s_container”标签中提取 local_resource_id:

资源。 格式为:

'k8s_container.<namespace_name>.<pod_name>.<container_name>'.

fluentd 代理将字段“日志”重命名为更通用的字段“消息”。 这样,fluent-plugin-google-cloud 知道在从记录中提取“时间”、“严重性”和“流”后将字段展平为 textPayload 而不是 jsonPayload。

如果未设置“严重性”,则假定stderr为 ERROR 且stdout为 INFO。

创建集群时可以启用代理,然后将创建默认的 fluentd pod。

您也可以在 GKE (fluentd) 中手动安装 stackdriver-logging-agent

首先,我会建议您查看是否有代理在运行。

为此,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 日志记录以获取您的测试消息

我在 Cloud Run 中运行的 golang 应用程序遇到了类似的问题
能够通过过滤器resource.type = "project"在 Logs Viewer Web UI 中找到 stackdriver 日志

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM