rsyslog学习3 -- 基本结构

基本结构

消息会通过 input module进入 rsyslog,然后传递给 ruleset,每一个ruleset 会包含 condition,但条件满足时,执行action。

原则

  • inputs 提交消息给 rulesets
    • 如果没有ruleset匹配,将应用默认 ruleset
  • 默认会有一条 ruleset (RSYSLOG_DefaultRuleset)
  • 用户可定义额外的 rulesets
  • 每一个ruleset可包含0或多个 rules
    • 当ruleset 中为0个rules,这个set就没有意义
  • 一条rule 由一个filter和一个action list
  • filters 用来判断和流程控制
  • 如果filter被匹配,执行对应的action list
  • 在一个ruleset内,rules被顺序执行
  • 所有的rules都将被执行,无论之前是不是已经被命中。如果需要停止执行,则必须声明 discard action。所有后续rules将立即中止
  • 一个 action list 可包含一个或多个动作
  • action list 内不能再定义 filters
  • 多个 action使用 “&” 连接
  • actions consist of the action call itself (e.g. “:omusrmsg:”) as well as all action-defining configuration statements ($Action… directives)
  • 如果要使用 legacy 语法, $Action… directives 必有在调用前声明
  • 一些指令会和它之前的指令执行结果有关,但有些不是,需要查文档,但需要注意的是,文档也不一定准确。- -b
  • v5版本最好被淘汰掉,用v7及以后版本
  • legacy 配置不会影响 RainerScript objects (e.g. actions).

配置文件

rsyslog.conf 以及它 include的一些文件,可以使用 -f 参数改变

Statement 类型

Rsyslog 支持三种语法,见 《学习1》

  • sysklogd
  • legacy rsyslog - v6及之前版本支持,现在的版本也能兼容。每个语句前使用$ 声明。有些插件和特性级需要该方法,因为不是所有的插件都升级到新版本了。。。
  • RainerScript - 之后主要讨论的内容

前两种格式和行相关,RainerScript 使用块,和行无关

注释

  • # - 单行
  • /* … */ - 多行

执行顺序

所有指令从上到下执行

流程控制

数据处理

使用 set, unset and reset 处理数据,参考 documented here in detail

Inputs

每一个input都需要一个input模块,参见 rsyslog modules

Outputs

即action, 一些常见的module已预先载入,比如 写文件,有些需要声明

Rulesets and Rules

ruleset会bound到一个input,参见rsyslog rulesets.

典型的ruleset如下

1
2
3
4
5
ruleset(name="rulesetname") {
action(type="omfile" file="/path/to/file")
action(type="..." ...)
/* and so on... */
}
0%