将 journald 日志保存到纯文本文件

将 journald 日志保存到纯文本文件

我想将 journald 日志记录到一个文件中,以便稍后获取它并将其发送到 Logstash。我考虑运行 syslog-ng 并使其成为 journald 的客户端,这样我就可以获取 syslog 文件。我在 CoreOS 机器上使用 Docker 容器,因此我尝试在 CoreOS docker 主机中将 syslog-ng 作为容器运行,创建一个执行该容器的 systemd 单元。我遵循此页面用于获取 systemd 中的 syslog但是,如果我尝试让我的 syslog-ng 容器直接从主机中的 syslog 套接字读取(通过使用 docker 卷安装它),它会抱怨“地址已被使用”。所以我有一个 journald 日志记录,一个运行 syslog-ng 的容器,但我不知道如何在 syslog-ng 中获取 journald 日志。

将 journald 日志保存到文件中的替代解决方案是运行执行的 systemd 单元journalctl -f --json | tee -a /var/log/systemd,但我不确定此解决方案的可靠性。这是一个足够好的解决方案吗?

答案1

我确实意识到这个问题有点过时了,但它是 Google 上的第一个搜索结果之一。它和 --json 选项似乎对我不起作用,并且不会显示在手册页中。

我查看了 journalctl 的手册页,有一个名为:--no-tail 的选项,它会将日期直接输出到 std,然后可以通过管道传输到另一个应用程序或文件中。

就我而言,我想要今天的 ssh 日志,因此执行以下命令: journalctl -u sshd -S today --no-tail > main.log

技术解释:获取今天来自该单位的所有日志sshd>然后将其输出到文件。

就您而言,我相信这就是您想要的:journalctl --no-tail > test.log

这已在 Arch Linux 中测试过。

相关内容