您的位置:首页 > 其它

第二章 rsyslog的概念

2016-01-15 14:39 211 查看
第二章 rsyslog的概念

2.1属性替代

Rsyslog 预定义了一些属性,来代表消息中的信息,我们可以在定义输出格式、动态文件名的时候使用到这些属性。这里面比较重要的属性比如:msg(消息体)、hostname、pri(消息等级和类别)、time(时间有关),属性的名称中以$开头的是从本地系统获得的变量、不带$是从消息中获得变量。

属性替代的语法格式:

%propname:fromChar:toChar:options:fieldname%

复制代码

属性替换的功能很强大,你可以使用起始字符获取自己所需的字段,也可以使用正则表达式,也可以使用分隔符。举几个例子:为了兼容一个rfc协议,rsyslog规定如果用户输入的msg不是以空格开头,rsyslog会自动补充一个空格,因此如果你希望输出的时候去掉这个空格,就可以使用

%msg:2:$%

复制代码

#选取msg变量中,起始位置为2,终止位置为结尾我们经常需要根据空格来分析字符串,F表示使用字符分割,32是空格的ascii码,例:

%msg:F,32:3%

复制代码

#按照空格分隔,取第三个子串,正则匹配可以匹配特定的文字和格式,我的正则比较差, 避免了使用这部分的内容,所以这部分没有例子了。

属性替代中还用到了一类特殊的以$!开头的变量,这是使用mmnormalize模块时特有的,可以实现类似于syslog-ng中parser模块的功能。后面再讲

2.2模板

模板的功能是定义输出格式,或者定义omfile模块的动态路径、动态文件。需要使用上面提到的属性替换。

模板定义的形式有四种,适用于不同的输出模块,一般简单的格式,可以使用string的形式,复杂的格式,建议使用list的形式,使用list的形式,可以使用一些额外的属性字段(property statement),例如:position.from、position.end。

如果不指定输出模板,rsyslog会默认使用RSYSLOG_DEFAULT。

如果你只想输出msg,可以定义模板

$template t_msg, “%msg\n%”

复制代码

如果想按日期保存输出,需要使用动态路径。可以定义模板

$template f_debug, “/data0/logs/%$year%-%$month%-%$day%/debug.log”

2.3Ruleset

复制代码

Ruleset实现的是多实例的功能,可以针对syslog的来源使用不同的过滤规则。需要注意的是,在配置文件中需要先定义ruleset,才可以使用。比较典型的一个例子,针对不同的端口使用不同的过滤规则。

$Ruleset tcp1999

$RulesetCreateMainQueue on

Local3.* @@10.0.0.44:1999

$Ruleset tcp2000

$RulesetCreateMainQueue on

Local4.* @@10.0.0.44:2000

复制代码

在定义好ruleset后,各个输出模块就可以指定自己使用的ruleset了,具体如何指定,可以查看输出模块的手册,一般会有一个ruleset的参数,用来实现这个功能。

2.4Filter模块

Rsyslog可以使用syslog标准的过滤规则,同时自己添加了一些扩展。比如可以在输出中指定rsyslog自己的处理方式,可以指定输出template,方法是在规则后面添加template的名字,用分号隔开。

例如我们可以编写一个规则

Local3.* -/data0/logs/local3.log;t_msg

复制代码

#在这个输出中使用t_msg的模板

Local4.* -?f_local3_test;t_msg

复制代码

#问号表示要使用模板定义的动态路径

除了syslog标准的规则,rsyslog的作者还自己开发了一个叫做rainerscript的脚本语言,来定义更复杂的过滤过则,rainerscript可以对属性进行startwith、contains、%(取余)等过滤规则,例如

If $pri-txt == local3.* and $msg contains “abc” then{ #pri为local3,且在消息中包含子串‘abc’

*.* -/data0/logs/local3.log;t_msg

}

复制代码

还有第三种方式是使用属性的表示方式,例如

:msg, regex, "^ [g-z]" /root/rsyslog_worker_dir/2000.log

复制代码

#以字母g到z开头的消息,注意msg开头有个空格

2.5队列

队列是rsyslog中比较重要的一个部分,作为使用者,我们需要了解的是队列的种类:主队列和工作队列。从输入模块接收的消息会进入主队列,主队列中的消息,经过过滤模块,会进入到相应的工作队列;队列的四种工作模式:direct mode、disk mode、FixedArray mode和LinkedList
mode,前两种是磁盘队列,更可靠,但是性能也较差,后两种是内存队列,区别是前者是预分配队列长度,后者是动态分配,如果你的系统日志流量比较平稳,可以使用预分配队列,如果日志属于突发型,可以使用动态队列。此外,内存队列还可以通过指定一个queuename来添加DA模式,DA模式主要是为了防止意外情况(进程关闭、server端宕机)下,内存队列可以不丢失。

通过查看rsyslog的系统命令,可以知道rsyslog对队列进行大量的可配参数,来定义队列的行为。可以根据需要来进行优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: