使用 Go 在 Google Container/Compute 引擎中登录到 Google 云

Logging to the Google Cloud in Google Container/Compute Engine with Go

我有一个包含 20 个节点的 GKE 应用程序 运行 Go。我想合并所有日志以在 Google Developers Console 日志查看器中查看,但我遇到了 2 个问题。我无法进行严重性过滤,我的日志消息中的每个换行符都会在查看器中启动一个新的日志条目(日志中的换行符有问题)。

我有 google-fluent-d 设置,所以所有标准输出都记录在云端,我已经使用 log.Lshortfile、调用深度和 log.Logger.Output 来获取文件名"log" 库中的行号。

我看过这个库:"google.golang.org/cloud/logging" 但我无法让它工作。

在 GKE 和 GCE 中是否有某个库或最佳写入日志方法的示例?

根据您的雄心壮志,您可以做几件事。

最简单的选择可能是将您的日志记录格式切换为 JSON。 google-fluentd 代理会自动为您解析JSON,将每条消息的结构化数据导出到云日志API。如果 severity 字段在 JSON 中,它将自动获取严重性信息,并且使用 JSON 可以防止它在您的消息中中断(转义)换行符。

更艰难(但更灵活)的选择是获取您发现有效的客户端库。我不确定它是否与您链接的那个相同,但我相信 this is the most recent one。如果您可以提供有关您遇到的问题的更多背景信息,我可以提供帮助或与云日志记录团队的人员争吵。

我使用自定义日志记录 class 而不是记录每条消息,我将它们保存在一个变量中,并在服务器响应后发送它 - 所以我最终在 google 云中只有一个日志记录每个带有很长 textPayload 的请求。

自定义日志记录 class 看起来像这样:

class CustomLogging {
   
    messages = "";

    log(message) {
        this.messages += '\n' + message;
    }

    sendLogs(message) {
        console.log(this.messages);
    }

}

每个请求日志如下所示: