未显示GKE

时间:2018-12-14 18:00:04

标签: stackdriver google-kubernetes-engine google-cloud-logging

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

我的应用程序(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)应该如何工作?显然,我缺少了一些东西,只是不确定什么。

谢谢

2 个答案:

答案 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"

在Logs Viewer Web UI中找到stackdriver日志