如何在syslog消息中欺骗主机名?

时间:2011-11-16 01:56:30

标签: logging ubuntu rsyslog

我在perl中记录这样的消息 -

syslog ("LOG_INFO", "this is info");
syslog ("LOG_WARNING", "this is warning");

当我看到这些消息时,我得到了这个 -

Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is info
Nov 15 20:20:47 ubuntu tag-0.0.2[13399]: this is warning

syslog消息中的“ubuntu”一词恰好是本地主机的主机名。

有没有办法可以在本地登录,但指定主机名?

我的应用处理来自其他主机的数据并记录有关它们的信息。如果我可以在记录消息时指定主机名将会很棒,这样我就可以轻松使用第三方工具,因为它们可以根据主机名轻松过滤掉日志。

顺便说一句,如果我可以添加其他问题 - 为什么日志没有显示消息级别?我不应该期望在我正在记录的info syslog消息中看到“info”吗?

2 个答案:

答案 0 :(得分:2)

完成此任务的最简单方法可能是设置syslog以通过网络接收消息。对于rsyslog,这通常位于/etc/rsyslog.conf

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

我在这里使用UDP,因为它很容易对任何syslog守护进行,并证明它很容易:

$ echo "<0>Oct 11 22:14:15 mymachine testing" | nc -u localhost syslog
^C
$ tail -1 /var/log/syslog
Oct 11 22:14:15 mymachine testing

简而言之:<nnn>代表设施和优先级,如section 4.1.1 of the RFC中所述。时间戳在4.1.2中高度指定:简而言之,三个字母的英文月份缩写,没有前导0 - 而是一个前导空格:Aug__8而不是Aug_8(使用下划线,因为空格在代码块中崩溃)。主机名不能包含任何域名。 IP地址很好,包括IPv4和IPv6。

您还可以使用Unix域套接字(unix(7)),例如/dev/log。这比UDP更可靠。

答案 1 :(得分:0)

不幸的是,如果您在本地登录,我不相信可以指定主机名。

此外,您不应该在日志前面看到“信息”。日志级别会影响消息的发送位置(您可以在/etc/syslog.conf中对其进行自定义)。默认情况下,LOG_INFO和LOG_WARNING转到/var/log/messages.log,LOG_EMERG和LOG_ERR转到/var/log/errors.log。级别不会出现在输出中。