Linux之syslog日志服务详解(三)

Rsyslog中的数据项被称为“属性”,有消息属性、系统属性等。每当你要访问数据项时,都需要访问相应的属性。属性主要应用在模板和条件语句中,并且是大小写不敏感的(在3.17.0版本之前是大小写敏感的)。

1.Message Properties(消息属性)

消息属性是由rsyslog解释器从原始的消息中提取出来的,所有的消息属性都以字母开头,主要有如下消息属性:

详见:http://www.rsyslog.com/doc/v8-stable/configuration/properties.html

2.System Properties(系统属性)

系统属性是由rsyslog核心引擎提供的,不同于消息属性,系统属性都是以$开头的。系统属性主要有:

详见:http://www.rsyslog.com/doc/v8-stable/configuration/properties.html

3.Property Replacer(属性替换器)

属性替换器是字符串类型模板的核心组件,一条syslog消息包含了许多已经定义了的属性。通过属性替换器,每个属性都可以被访问及修改,使用属性替换器,你可以轻松的使用属性值的一部分数据或修改后的数据。比如,你可以将属性值对应的所有字符改变为小写字母。

(1)访问属性

rsyslog的消息属性是在模板中使用的,你可以通过两个%来访问它们,或者使用属性替换器来修改它们。语法如下:

1)字符位置

fromChar和toChar是用来创建子串的。偏移是从1开始计算的,所以如果你想要获取msg属性值中的前两个字符,你可以这样使用:

又如果你不想指定开始和结束位置,但是想要指定选项,比如将msg转换为小写,那么你应该连续使用三个冒号:

又如果你想要从字符串中的某个位置开始提取到字符串尾部的子串,你可以使用$符号,那么你应该这样使用:

2)正则表达式

此外,属性替换器还支持正则表达式。一般方法是:使用R取代fromChar,告诉替换器使用正则表达式而不是基于位置的方法来提取子串;正则表达式部分放在toChar的位置,并且以—end结束。有如下示例:

并且,在R的后面还可以指定一些参数,用逗号分隔,如下所示:

其中,regexp-type指定正则表达式的类型:BRE(默认值)或ERE;

详见:http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html

3)分隔符

不仅如此,提取子串还可以基于“字段”来进行。若这样做的话,你需要使用F取代fromChar,用来指定分隔符,默认的分隔符是TAB(us-asscii对应的值是9)。你也可以自己指定分隔符,比如使用逗号,(asscii码是44)作为分隔符,在fromChar中相应的修改为F,44。如果你的syslog数据是由分隔符分隔的,那么这种方法要比正则表达式提取子串快的多。

字段号是从1开始的,即第一块被分隔下来的子串代号为1。字段号要被放在toChar中。比如,提取3号字段的内容(默认以TAB分隔):

如果以分号:分隔的话:

遗憾的是,对于获取到的分隔字段,不能再进一步的提取子串。为了解决这个问题,rsyslog v6.3.9版本之后,可以为分隔字段指定开始fromPos和结束toPos位置了。然而,语法相当难看,但是它是为了将这个功能集成到已经存在的语法系统中的唯一方法了。比如,我们想要从第3个字段中提取位置5到9的子串,你应该这样写:

其他未介绍到的内容详见:http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html

(2)Property Options(属性选项)

属性选项是大小写敏感的,目前有如下选项:

详情可见:http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html

4.其他

至此,rsyslog的主要特性已经介绍完了。对于其他为涉及的特性,可参见rsyslog的官方文档。后面有空的话,将会记录一些rsyslog消息日志入库的实践内容。

发表评论

电子邮件地址不会被公开。 必填项已用*标注