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