为 GKE 设置错误报告

Setting up ERROR REPORTING for GKE

我正在尝试为部署到 GKE 的应用设置 Stackdriver 错误报告。

据我了解,有两种方法可以做到这一点:Stackdriver Logging agentError Reporting REST API

根据 Setting up on Google Compute Engine 文档如果我已经有一个 运行 日志记录代理,我可以在 localhost:24224.

上找到它

看起来已经有 GKE 的日志代理:

✗ kubectl get pods --namespace=kube-system
NAME                                                      READY     STATUS    RESTARTS   AGE
fluentd-cloud-logging-gke-tc-default-pool-5713124a-969q   1/1       Running   0          3d

有没有办法用 fluent-logger-node library 达到这个 fluentd

(请注意,Stackdriver 错误报告尚未正式支持)

这个问答可能会帮助您了解 fluentd 配置:

而且,由于您似乎在使用 Node.js,我鼓励您直接使用 https://github.com/GoogleCloudPlatform/cloud-errors-nodejs,它不会通过日志记录发送错误,而是直接向错误报告报告 API.

斯特伦,非常感谢

让我分享一些关于这个问题的细节

最近 Stackdriver 默认从 GKE 中的流行语言中获取 fluentd 异常。它将在 GKE 的下一个版本中启用,并且转储到容器的 stdout/stderr 的异常将在错误报告中可见。

Is there a way to reach this fluentd with fluent-logger-node library?

GCE 和 GKE 上的日志代理工作方式不同。在 GCE 上,您直接在 VM 上安装代理,并且可以使用 localhost 从同一 VM 访问它。但是,GKE 使用 pods 运行,没有直接在节点上安装任何东西。每个 pod 都有自己的网络堆栈,因此当您从容器内部调用 localhost 时,您不是在寻址 VM,而是寻址这个特定的 pod。

如果启用 Stackdriver Logging,确实每个节点都部署了 fluentd。但是,它在容器内运行,因此您目前无法从您的应用程序轻松访问它。

将来,Stackdriver 和 GKE 团队将致力于提供可访问的 node-wide fluentd 端口,但不幸的是,现在您必须自己动手。

如前所述,在应用程序 pod 中部署另一个 fluentd 代理作为 sidecar 容器并手动配置它可能更容易,here is an example how to do it with least efforts。在这种情况下,您将能够使用 localhost 访问代理,就像在 GCE 上一样。