我在 CentOS 7 的 systemd 下运行一个应用程序。它记录到 stdout,systemd 很好地将它捕获到 journalctl 中。我还想:
- 获取一个旋转的文本日志文件也保存到本地文件系统,以便我们的系统管理员熟悉
- 将这些数据干净地放入logstash,理想情况下只是应用程序日志,而不是所有还包括操作系统消息、其他应用程序等的系统日志
我最初使用 djb 的 daemontools 中的 multilog 进行研究,但鉴于 systemd 单元文件不喜欢 shell 管道ExecStart
,而且 CentOS 中没有用于 daemontools 的官方 RPM,我希望有一种不那么繁琐的方法。
我目前有 logstash-forwarder 从中读取 syslog /var/log/messages
,/var/log/secure
但我宁愿不包含来自此特定应用程序以外的消息。
可以使用直接读取 systemd 日志的 logstash 的第三方输入插件。直接向 logstash 添加支持仍然是一个悬而未决的问题。Logstash 现在包括一个systemd 日志输入插件。
这只是您的基本解决方案,如下所示
journalctl -f -o json | tee -a /var/log/systemd
您需要该文件的日志轮换来处理大小,否则它会很快填满
绝对考虑到您不需要部署诸如logstash或fluentd之类的东西