如何在不使用 fluentd 传递的情况下代理应用程序日志级别?

How to proxy app log-level without using the one passed with fluentd?

所以我有以下 Openshift/Origin architecture installed following the official Openshift/Origin documentation 我们还想使用开箱即用的聚合日志记录设置,这就是为什么要严格使用 Openshift aggregated logging 文档来设置的原因。

到目前为止,反馈非常好,但我还有另一个挑战需要一些帮助。 开发人员希望自己指定将转发到 Elasticsearch 的日志级别。当前日志级别仅通过 FluentD 设置。

有没有办法通过 Deployment 变量设置日志级别并使其通过 Fluentd 不变地传递给 Elasticsearch?

目标是为人们提供一种自行设置将转发到 Elasticsearch 的日志级别的方法。

如果不添加自定义 FluentD,恐怕无法通过标准工具来完成。

首先,你的FluentD集群reading a container logs provided by Docker thru json-file logging driver:

By default, Fluentd reads from /var/log/messages and /var/log/containers/.log for system logs and container logs, respectively.

即使使用 SystemD 日志记录,您也会得到相同的结果 - 日志记录级别由 Docker 设置。 Kubernetes also using 那个驱动。

对于Docker json-file驱动你可以设置log-tags,理论上可以帮你过滤日志。但是 Kubernetes 不可能在 运行 时间内为容器设置这些选项,所以现在有办法。

我看到的唯一方法是使用 sidecar 容器 with custom logging agent。它看起来像这样:

使用 sidecar,您可以 运行 FluentD 在其中进行自定义配置,并解析应用程序的任何修改日志,包括使用环境变量作为日志级别。