基本结构
消息会通过 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 | ruleset(name="rulesetname") { |