RHEL6 上的 Rsyslog unix 时间戳

RHEL6 上的 Rsyslog unix 时间戳

我正在尝试让 RHEL 6 上的 rsyslog 将消息记录的时间呈现为 unix 时间戳。我首先阅读了以下文档:http://www.rsyslog.com/doc/property_replacer.html。由于有旧式和新式属性选项,我接下来检查了我的版本号:

[root@sourwood remote]# rpm -qa | grep rsyslog
rsyslog-pgsql-5.8.10-6.el6.x86_64
rsyslog-5.8.10-6.el6.x86_64
[root@sourwood remote]# 

对我来说,这意味着我正在使用版本 5.8。文档说在版本 6 以上时使用新式属性选项,因此,我应该使用旧式属性选项。

描述旧式选项的部分顶部指出下面列出的选项存在于高于 5.5.3 的版本中,因为 5.8.10 大于 5.5.3,所以这应该不是问题。

根据文档,我创建了以下模板(为了清晰起见,略微截断):

$template proxyTemplate,"%timegenerated:::date-unixtimestamp%|%timegenerated:::date-rfc3339%|...\n"

然后我按照以下方式使用该模板:

if \
        $programname contains 'squid' \
then    /var/log/remote/squid.log;proxyTemplate

来自 Squid 的消息确实被记录下来,并且 rfc3339 格式有效,但 unix 时间戳无效。以下是从日志中截取的样本:

Apr 29 14:59:09|2013-04-29T14:59:09.443172+01:00|...

我做错了什么吗?也许我错过了一些细节?还是我遇到了错误?

为了确保万无一失,我也尝试了新样式的属性选项,但无济于事。

答案1

不幸的是(因为我也想要这个),文档是错误的,这个功能实际上出现在版本 6.3.8 中。下面的文字解释了我的发现。

根据项目 git 存储库,第一次提及unixtimestamp发生在提交 b88ba94 中,该提交仅从标签 v6.3.8 开始出现:

$ git clone git://git.adiscon.com/git/rsyslog.git
$ cd rsyslog
$ git log --reverse  -S 'unixtimestamp' --oneline | head -1
b88ba94 added "date-unixtimestamp" property replacer option to format as a unix timestamp
$ git tag --contains b88ba94
v6.3.10
v6.3.11
v6.3.12
v6.3.8
v6.3.9
v6.4.0
...
$

然后我再次检查了 SRPM 中是否存在它,unixtimestamp以防它被反向移植 - 但没有那么幸运。

最后,如果您使用命令调试配置rsyslogd -c 5 -d -N 1 -f /etc/rsyslog.conf,您会看到 rsyslog 不知道的警告unixtimestamp

$ rsyslogd -c 5 -d -N 1 -f /etc/rsyslog.conf
...
8913.783769999:7f45539b3700: cfline: '$template NagiosPassiveServiceCheck, "%TIMESTAMP:::date-unixtimestamp% PROCESS_SERVICE_CHECK_RESULT;%hostname%;FOO;3;%msg:2:$%\n"'
8913.783783726:7f45539b3700: Invalid field option 'date-unixtimestamp' specified - ignored.
$

检查系统使用的兼容性参数的值-c。此参数可以从根本上改变 rsyslog 解释配置文件的方式,因此请确保使用与生产中相同的级别开发和调试配置(请参阅/etc/sysconfig/rsyslog以进行设置)。

作为 rsyslog 的替代品,也许值得看看 syslog-ng(可从 EPEL 存储库获得) - 它允许您输出以秒为单位的时间戳的消息。

相关内容