runit 的 svlogd 期待什么样的服务?

runit 的 svlogd 期待什么样的服务?

runit 手册指出,在配置中可以使用选项将日志提交至:

ua.bcd[:port] 告诉 svlogd 将选定日志消息的前 len 个字符传输到 IP 地址 abcd、端口号 port。如果未设置 port,则使用 syslog 的默认端口 (514)。len 可以通过 -l 选项设置,见下文。如果 svlogd 在发送 udp 数据包时遇到问题,它会将错误消息写入日志目录。注意:通过 udp 进行日志记录不可靠,应仅用于私有网络。

我知道rsyslogd这个端口上有正在运行的列表。所以这可能是一个可行的选择...
但是还有其他选择吗?

答案1

这个问题有点模糊,但听起来,我想你是在问是否可以使用svlogd将系统日志消息发送到除 之外的其他程序rsyslogd。答案是,任何提供系统日志服务的程序就足够了。 不仅仅rsyslogd提供 syslog 网络服务。

但是,runit 本来设计用来“本地”处理日志的方式可能与您的想法相反。

这个想法是,您有某种服务,并且该服务通过 stdout 或 stderr 写入输出。程序runsv将启动svlogd并建立您的服务和 之间的管道svlogd;您的服务所要做的就是将数据发送到 stdout/stderr,svlogd 将直接写入磁盘,一切就绪了。由于管道由 维护runsv,因此如果服务出现问题,输出仍会被捕获并传递到svlogd- 因此理论,您不会因为服务崩溃而丢失日志数据。

同一作者还有另一个程序,socklog,它充当 syslog 前端,将数据汇集到svlogd。由于许多程序只是假设 可用/dev/log,因此socklog提供此接口以便可以捕获 syslog 数据 - 它充当替代 syslog 服务。 这与您的建议正好相反。

我并不是说你不应该使用 syslog,我只是说有多种方法可以做到这一点。如果你真的想将 svlogd 的输出转回到 syslog,那么是的,任何旧的 syslog 服务都可以,但rsyslogd如果你的安装允许,可能值得考虑“全部使用本机”并完全放弃它。

相关内容