Rsyslog在RHEL6上的unix时间戳

我正在尝试在RHEL 6上获取rsyslog,以便将消息的logging时间显示为unix时间戳。 我首先阅读http://www.rsyslog.com/doc/property_replacer.html上的文档。 由于有旧式和新式的财产select,我接下来检查了我的版本号:

[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,这应该不成问题。

基于文档,我创build了以下模板(为了清楚起见,截断了一些):

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

然后我用以下方式使用这个模板:

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

来自Squid的消息确实得到logging,并且rfc3339格式化工作,但unix时间戳不是。 这里是从日志中截取的一个样本:

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

难道我做错了什么? 也许我错过了一些subtlty? 还是我碰到一个错误?

一定要确定我也尝试了新式的财产select,但无济于事。

不幸的是(因为我也想这样),文档是错误的,而这个特性实际上出现在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.confdebuggingconfiguration,则可以看到unixtimestamp不知道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如何解释configuration文件,所以确保你开发和debugging的configuration与你将在生产中使用的同一级别(请参阅/etc/sysconfig/rsyslog进行设置)。

作为rsyslog的替代方法,可能需要查看syslog-ng(可从EPEL存储库获得) – 它允许您输出带时间戳的消息,表示为从时期开始的秒数。