Linux日志管理Rsyslog之RainerScript

Linux ginotang 2588℃ 0评论

RainerScript

RainerScript是在较新版本中引入的一套rsyslog.conf的配置语言。和旧的配置方式相比,RainerScript具有更紧凑的语法,使配置过程更加清晰,更不容易出错。

不过需要注意的是,虽然已经引入新的语言,但rsyslog依然兼容旧的语法。因此,不建议混合使用两种配置语法,这样会使管理者陷入混乱,原因是大部分旧的指令都不能和新的指令协同使用。

前面和rsyslog相关的文章例子中使用的都是旧的配置方式,在这篇文章中会展示它们之间的区别。

模块(Modules)

首先要讲的是模块,因为rsyslog的重要作用就是对日志文件的输入输出操作,这些都是由模块提供的,后续介绍的相关对象例如input()action()等,都是通过模块实现的,实际上,input()对象代表的就是输入模块,而action()对象代表的就是输出模块。

加载模块

任何模块在使用前,第一件事情就是加载它们。下面对比新旧两种语法的不同

旧:

新:

在旧的方法中,一条指令代表一个参数,但是在新的配置语言中稍微有点不一样,新语法的参数分为两种:

  • 一种是模块参数,这种参数写到module()对象中
  • 另一种是对象参数,这种参数写到具体的对象中,例如input()、action()对象。

input()对象

input对象代表的是输入模块。它只有一个必须的参数,那就是type(表示使用的模块名称),但是,根据使用的模块不同,会有不同的参数。最简单的input语法:

使用input()导入其他程序日志

之前的文章中,旧的语法是这样的:

使用新的语法重新修改上面的配置:

由于imfile是内建的模块,通常不用手动导入,如果必要,导入的时候要加上builtin:字符串。上例中可见,新语法要比旧的精简得多。在新的语法中stateFile参数已经不建议使用。原因在于,为了防止出现重复的state files,rsyslog会基于下面的规则自动生成这些文件:

  • 在具体的被监控文件前添加”imfile-state:”字符串
  • 文件名前的反斜杠会被替换为短横杠。

例如文件名/var/log/access.log生成的state file为imfile-state:-var-log-access.log。这个文件被保存在全局指令设置的目录中,即global(workDirectory="")

action()对象

action代表的是输出模块,因此它的作用十分重要。新的语言使用了action()对象,语法如下:

name参数不是必须的,而type参数是具体的模块名称,是必须的。不同的模块有不同的参数,具体可参照相关模块的使用说明。

旧方式,比如写入文件,通常配置如下:

新的方式:

又如数据库使用例子:

队列

队列没有单独的关键子对象,它也是通过action对象创建的,语法如下:

这个例子结合了数据库和队列一起使用,创建了一个内存队列来加快效率。

template()对象

template()对象对应的旧指令是$template。新的template对象提供了两种常用的模板定义方式,一种是string,另一种是list。string方式比较接近旧template的定义方式,而list方式可以更清晰的区分字符串和属性值。

旧方法定义模板:

新方法提供了两种方式,先说第一种,string方式:

接下来是第二种方式, list方式:

在第二种方式中,constant用于定义字面字符串值,而property用于定义实际的属性。个人认为,虽然这种方式更清晰地区分字符串字面值和属性值,但如果属性太多,写起来麻烦。所以,我还是觉得string方式更方便些。至于使用哪一种,那就见仁见智了。

string方式和list方式很明显的一个不同是,string方式所有的内容都写到小括号()中,而list方式把所有的属性值和字符串都写到大括号{}中。

ruleset()对象

ruleset对象用于定义一系列规则的集合。

旧语法:

新语法:

阅读更多

还有更多新配置语言的用法,不可能在这里一一列出,如果希望了解更多这方面的资料,请参考官方手册,下面是地址:

RainerScript

Templates

Input Modules

Output Modules

转载请注明:Pure nonsense » Linux日志管理Rsyslog之RainerScript

喜欢 (2)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x