rsyslog导入非标准日志

时间:2018-12-05 11:25:48

标签: linux logging centos7 rsyslog

我正在尝试将标准日志格式以外的应用程序日志导入mysql。

示例行:

Dec  5 10:50:06 wifi coova-chilli[10099]: Client process timed out: 2

当我使用imfile模块导入日志(然后将其转发到mysql)时,它工作正常,但整行都进入了消息字段。这也意味着,ReceivedAt和DeviceReportedTime字段是导入日志的时间戳,而不是消息中的实际事件时间。

我认为答案在于属性替换器,但我似乎无法在网上找到有关如何实际获取实际日期并将其强制输入DeviceReportedTime字段的示例。

这就是数据库中的内容:

53052   NULL    2018-12-04 16:17:44 2018-12-04 16:17:44 16  5   server   Dec  5 10:50:06 wifi coova-chilli[10099]: Client process timed out: 2  5   NULL    customtag   NULL    NULL    0   NULL    NULL    NULL    NULL    NULL    3   customtag   -   NULL    NULL

我在/etc/rsyslog.d中的客户端具有以下配置:

module(load="imfile" mode="inotify")

input(type="imfile"
        File="/var/log/appname/applog.log"
        Tag="customtag")

在服务器端的/etc/rsysconfig.d下:

:syslogtag, contains, "customtag":ommysql:10.255.2.6,rsyslogdb,loganalyzer,password

1 个答案:

答案 0 :(得分:1)

这不是完整的答案,因为它不是我以前使用过的rsyslog的一部分,但是它应该使您接近最终解决方案。

您可以使用rsyslog的输入解析库liblognorm和模块mmnormalize。如果rsyslog中不包含这些软件包,则可能需要安装一个或两个以上的软件包。首先,编写一个规则文件myrules.rb,其中包含一行描述您拥有的字段:

rule=:%date:date-rfc3164% %tag:word% %host:char-to:[%[%pid:number%]: %msg:rest%

您可以通过将示例行作为标准输入提供给测试程序lognormalizer来使用示例行:

echo 'Dec  5 10:50:06 wifi coova-chilli[10099]: Client process timed out: 2' |
lognormalizer  -r myrules.rb

您应该获得json格式的输出:

{ "msg": "Client process timed out: 2", "pid": "10099", 
  "host": "coova-chilli", "tag": "wifi", "date": "Dec  5 10:50:06" }

您现在可以将此模块的使用添加到rsyslog配置文件中:

module(load="mmnormalize")
action(type="mmnormalize" rulebase="myrules.rb")
template(name="simple" type="string" string="%$!date:::date-rfc3339% %$!host% %$!msg%\n")
if $parsesuccess=="OK" then action(type="omfile" file="output" template="simple")

现在应该解析输入文件中相同的示例输入行,并且json键将作为变量$!host可用在模板中。上面应该在输出文件中写一行:

Dec  5 10:50:06 coova-chilli Client process timed out: 2

对于上述内容,我仍然有很多不清楚的地方,因此您可能应该针对特定问题上的每个新问题开始一个新的单独帖子,以便其他人可以回答。