Rsyslog 基本结构

基本结构

简介:

  rsyslog是一个高度可定制化的日志和事件处理工具集。

  信息在输入模块的处理下进入rsyslog,然后被传递到规则集,当成功被规则匹配值之后,信息将进行下一个环节,写入数据库或文件或远程主机那里。


message处理的原则:

(1)输入的message被提交到设置的规则部分,如果没有设置特别的规则,将应用默认的规则。
(2)默认的规则是RSYSLOG_DefaultRuleset
(3)额外的规则可以由用户进行定义
(4)每一个规则都必须包含零个或多个规则,但是零个规则的规则集显然毫无意义。
(5)一个规则由一个过滤器和一个执行action列表组成
(6)filter提供yes/no的能力和控制流的能力
(7)如果匹配成功规则之后将执行相应的action列表,如果匹配失败则不作任何action
(8)按顺序执行所有规则
(9)无论是否有一个过滤器匹配,所有规则都必须被充分考虑到,如果匹配到filter之后的action是discard那么就没有必要继续进行匹配。
(10)一个action列表可以包含一个或多个列表
(11)在一个action列表里面不会再进行filter动作
(12)如果一个action列表里面包含多个action,&字符必须放置在过滤器的位置,紧随着先前的action(此处强调的是一个书写格式)
(13)action由调用的action组成,所有的action都必须被定义,示例(e.g. ":omusrmsg:", $Action... directives)
(14)如果legacy格式被使用,$Action指定必须在指定的action中配置
(15)一些配置指令自动引用之前的值被应用后,而其他的则有可能不(不理解这句话的意思,进一步往下看吧)
(16)目前rsyslog5是严重过时的版本,强烈建议至少使用7以上的版本,这样的配置会变得更容易些。


配置文件:

  rsyslog默认读rsyslog.conf文件,这个文件能包含其他的配置文件,通常rsyslogd可以通过-f <file>制定配置文件启动。

声明类型:

rsyslog能够兼容3种不通的配置声明类型
sysklogd:
  这是最普通的格式,对于简单的用例仍然非常有用。注意:一些很少的features不再支持,因为一些新功能对它是不兼容的。
legacy rsyslog:
  这些格式的语句是以$开头的,它是唯一pre-v6支持的版本,同时也支持6以上的版本,在一些插件和新功能中可能仍然需要
  使用这种格式书写(因为插件需要影响升级到使用新样式的格式,这并没有发生在所有插件)
RainerScript:
  这是一种新的风格的格式,能够在复杂的情况下精确的表达配置的含义,
rsyslog.conf文件由statements组成,对于旧格式(sysklogd & legacy rsyslog),lines是重要的,但是新格式却不在乎这些。


 

推荐使用的Statement Types

一般情况下,推荐使用RainerScript Statement Types,简洁且易读,很容易看出哪些参数是活跃的。
在一些简单的事情上,sysklogd格式的配置方式会显得特别方便,示例:
  mail.info /var/log/mail.log
  mail.err @server.example.net
作为经验法则,在如下的情况下请使用RainerScript格式配置:
  配置需要参数的时候
  复杂的控制流,例如在多个操作需要在相同条件下嵌套
通常是不推荐使用legacy格式,但是在一些特殊的情况下可能不得不用,因为并不是所有的配置各模块全部转换成了RainerScript格式


Comments(注解)

  1、已#号开头的注释方法
  2、c语言的注释方法,/* */


Processing Order(处理的顺序)

  rsyslog.conf配置的顺序是从上至下的,顺序是很重要的,如果message被停止处理之后,后面的配置将不起作用。


Flow Control Statements(控制流的格式)

  if expr then ... else ... - 条件执行
  stop - 停止处理当前的信息
  call - 调用一个规则集处理
  continue - 经常用于放置在if内部
  流控制部分可以参考链接:http://www.rsyslog.com/doc/v7-stable/configuration/filters.html


 

Data Manipulation Statements(数据处理声明)

  set - 设置一个用户变量
  unset - 删除一个之前设置的用户变量


Inputs

  每个输入都需要一个输入模块加载和定义一个listener,input是通过input()对象来定义的。
  rsyslog modules参考http://www.rsyslog.com/doc/v7-stable/configuration/rsyslog_conf_modules.html

 


Outputs

  Outputs被称为actions,action调用action(type="type" ...),类型是强制性的(强制的)和必须包含插件的名称。


Rulesets and Rules

  规则集和规则形式是rsyslog处理的基础。简而言之,一个规则是一种rsyslog应当如何处理一个特定的信息。
  通常,有一个类型的过滤(if语句)的规则。复杂的嵌套规则就像在一个编程语言。
  规则集是规则的容器。单一规则集可以包含许多规则。在编程语言的比喻(类比),规则集的一个可能认为像一个程序。
  一个规则集可以"约束"(分配)到一个特定的输入。在类比,这意味着当一个消息通过输入进来,"程序"(规则集)绑定到它将被执行(而不是其他)。
  一个简单的relus如下:

ruleset(name="rulesetname") {
action(type="omfile" file="/path/to/file")
action(type="..." ...)
/* and so on... */
}

  关于rsyslog的rules文档信息如下:http://www.rsyslog.com/doc/v7-stable/concepts/multi_ruleset.html


 

posted @ 2017-12-06 16:44  孤独的海浪  阅读(2167)  评论(0编辑  收藏  举报