通过阅读12factor的以下帖子,我想出了一个问题,我想看看你们是如何处理这个问题的。
基本上,应用程序应该直接写入 stdout/stderr。无论如何将这些流直接重定向到fluentd(不绑定到rsyslog/syslog)?随着我越来越了解 fluentd,我相信它将成为来自多个应用程序/平台的日志聚合的绝佳工具。
这样做的主要原因是,如果应用程序是跨平台的,rsyslog/syslog 可能不可用,据我了解,使用日志框架(需要所需的配置才能工作)将违反 12factor。
谢谢!
这仍然是一个实验程序,但你可以看看 stdout-hook。
该程序从子进程读取 STDOUT 输出,并将记录发布到 Fluentd。
您需要配置您的流程管理器以使用 fluentd。
“十二要素应用程序流程应该 [...] 依赖操作系统的流程管理器(例如 Upstart,云平台上的分布式流程管理器,或开发中的 Foreman 等工具)来管理输出流 [...] 。”
基本上,这个想法是日志重定向是流程管理器的一个问题。例如,Upstart通常依赖于logger,它有一个选项 ( -u) 来写入Unix Domain Socket。反过来,您可以将 fluentd 配置为使用相同的套接字作为输入流。
Fluentd 支持许多输入流(他们称它们为数据源),这应该为您可能正在使用的几乎任何环境和流程管理器提供解决方案(我们需要了解这些以提供更完整的解决方案)。