我想将一些日志消息发送到远程日志服务器,并将这些消息上的功能更改为配置值,以便日志服务器可以更轻松地判断它们来自我的硬件。也就是说,从我的机器发出的所有日志都是 local3,无论它们的原始功能是什么。
我可以使用 FreeBSD 上的 vanilla syslogd 来执行此操作,或者使用其他实现吗?
答案1
我觉得你在尝试做一些奇怪的事情。你可以轻松地根据消息来源的主机名对系统日志中的消息进行排序。
看man syslog.conf
:
A hostname specification of the form #+hostname or +hostname means
the following blocks will be applied to messages received from the speci-
fied hostname. Alternatively, the hostname specification #-hostname or
-hostname causes the following blocks to be applied to messages from
any host but the one specified. If the hostname is given as @, the
local hostname will be used. As for program specifications, multiple
comma-separated values may be specified for hostname specifications.
答案2
显然,使用 FreeBSD syslog 无法做到这一点。我仔细查阅了手册页以寻找线索,但一无所获。
根据此网页您可以使用 syslog-ng 来完成此操作,但我们无法切换。
答案3
正如安德鲁 (Andrew) 自己发现的那样,syslog-ng 是最好的选择。
但我认为,即使使用 vanilla FreeBSD syslogd,也可能存在一种笨拙的方法来实现此目的。似乎可以将日志条目通过管道传输到外部程序:然后,您可以将消息通过管道传输到该程序logger
并设置所需的功能和优先级,然后要求 logger 将日志条目发送到您的日志服务器。
记录器可能会将其自己的时间戳等添加到每个日志条目中,因此您可能想要sed
删除原始时间戳。
是的,我知道,这种方法非常丑陋,属于“不要在任何地方尝试”的范畴,但它仍然可能工作。