一、前言。
linux有个自带的日志系统——Rsyslog。我在搭建邮件系统时,发现了Postfix协议的日志系统是采用Rsyslog这个模块的。
最后通过详细了解Rsyslog模块,我们知道了,linux系统,对于许多日志的记录都是通过该模块来完成。
二、对于该模块的应用。
比如,Nginx的access_log非常的多,我们想对这些日志进行分类,可以接入linux的Rsyslog。在/etc/rsyslog.conf(主配置文件)
这个文件下,写好配置。就可以依据你定义的规则来筛选log了。
可以参考:http://www.biglog.cn/nginx-syslog/
三、我的应用。
我有一些mail.log需要重定向后,进行特别的筛选,而且后续会不断更新规则,以免运维不断重启Rsyslog模块。
我打算将maillog重定向到一个程序。然后通过这个程序来处理。https://segmentfault.com/a/1190000003509909。
在这篇文档里提到了Rsyslog模块,可以定义多种action。其中有个就如下:
在下面第2行,就是执行一个可执行文件。
kern.=crit user1
& ^test-program;temp
& @192.168.0.1
所以,我的定义就变成了以下这样了。
mail.info ^/tmp/maillog.sh
在maillog.sh中 ,写好要执行的PHP程序。如下所示:
/usr/bin/php index.php "&ct=mailLog&ac=log&par=$1"
这样,每次maillog来一条的时候,就会执行下 index.php 文件,这个文件会接收参数$1(也就是日志内容)。
接下来就看你的处理了。
四、建议。
官方的建议时,规则都尽量写在Rsyslog的配置中,比如:/etc/rsyslog.conf(主配置文件)、
/etc/rsyslog.d/(子配置文件)。尽量少用action = program,这样可执行文件重定向的方式。
除非你能确保你的可执行文件,可以在短时间内结束的,不会
出现各种bug或者死循环。因为,Rsyslog会一直等待这个可执行文件执行结束了,
才会执行下一行。
参考:http://www.rsyslog.com/doc/v5-stable/configuration/actions.html (Rsyslog模块)、
https://segmentfault.com/a/1190000003509909(Linux环境下使用rsyslog管理日志)