在之前的 rule章节中提到一个 rule中可以有多个 action,注意这些 action必须分行写,
每个一行。没新 filter的 action,要以“ &”为开始。比如将严重性等级为 CRITICAL的数据同时发送给 rger用户、root用户和/var/log/critmsgs文件,写法如下。
*.=crit :omusrmsg:rger & root & /var/log/critmsgs
这种写法比下面这种写三行 rule的方式性能要好。
*.=crit :omusrmsg:rger *.=crit root *.=crit /var/log/critmsgs
action中最常见的就是保存成文本文件。这里我们可以利用 template来自动分割日志。静态日志位置从“/”开始,而动态的日志位置以“?”开始。示例如下。
$template logFormat, "%rawmsg%\n" $template DynaFile, "/var/log/%$YEAR%-%$MONTH%-%$DAY%.log" user.info -?DynaFile;logFormat
另一种常见的 action就是转发到其他服务器。格式很简单,“@”表示使用 UDP协议, “@@”表示使用 TCP协议,“z*”表示使用某级别的 gzip压缩传输,示例如下。
*.* @@(z9)192.168.0.1:1470
rule中提到了 discard,在 action中,调用 discard非常容易,就是一个“~”。比如下面这行意思就相当于 Rsyslogd完全没运行。
*.* ~
此外,action还可以以“:”开头调用比如 ommysql之类的插件,以“^”开头调用 shell命令等。示例如下:
:ommysql:dbhost,dbname,dbuser,dbpassword;dbtemplate ^program-to-execute;template
shell这里,Rsyslog会把经过 template时生成的结果传递给命令作为唯一参数。