rsyslog消息流处理原则和使用建议(R03)

989 阅读3分钟

介绍rsyslog配置的基本工作原理。将rsyslog视为一个大型的日志记录和事件处理工具集。

消息流和对象

消息 -> Input模块 -> rsyslog -> 规则集 -> 匹配规则 -> 动作处理

处理原则

  • 输入将收到的消息提交到规则集
    • 如果未特别绑定规则集,则使用默认规则集
  • 默认情况下,有一个规则集(RSYSLOG_DefaultRuleset)
  • 其他规则集可以由用户定义
  • 每个规则集包含零个或多个规则
    • 虽然允许规则集中有零条规则,但这显然没有意义
  • 规则由过滤器和操作列表组成
  • 过滤器提供是/否决策,从而控制流量
  • 如果过滤器“匹配”(过滤器说“是”),则执行相应的动作列表。如果不匹配,则不会发生任何处理
  • 规则顺序计算从第一个到最后一个规则中指定的规则集。无关规则集中的任何规则都不会执行。
  • 无论过滤器是否匹配,所有规则都会得到充分评估(因此我们不会在第一个匹配时停下来)。如果消息处理将停止,则必须显式执行“丢弃”行动(由代字字符或stop命令表示)。如果执行了丢弃,则消息处理将立即停止,而无需评估任何其他规则。
  • 一个动作列表包含一个或多个动作
  • 在行动列表中无法再进行过滤
  • 要在一个列表中进行多个行动,必须在过滤器的位置放置“&”字符,并且必须紧随上一个行动
  • 操作由行动调用本身(例如“:omusrmsg:”)以及所有定义行动的配置语句($Action…指令)组成
  • 如果使用旧格式(请参见下文),则必须在要配置的行动之前指定 $Action…指令
  • 一些配置指令在应用后会自动引用其先前的值,有些则不会。请注意,当前并不总是正确地记录下来。
  • 通常,rsyslog v5已严重过时,其本机配置语言令人痛苦。rsyslog项目强烈建议至少使用版本7,该版本可以解决这些问题,并且配置更加容易。
  • 旧式配置语句(以$开头的语句)不会影响RainerScript对象(例如,行动)。

配置文件

  • 一般是rsyslog.conf
  • 可以通过rsyslogd命令行选项-f <file>指定其他“root”配置文件。通常这是在某些初始化脚本或类似工具中完成的。

声明类型

  • sysklogd 一种普通的旧格式,在任何地方都可以使用,对于简单的用例仍然非常有用。
  • legacy rsyslog rsyslog v6之前的版本支持的唯一格式
  • RainerScript 新样式格式。这是用于更复杂案例的最佳和最精确的格式。与传统格式一样,RainerScript参数也不区分大小写。

使用建议

通常,建议使用RainerScript类型语句,因为这些语句提供了简洁,易于阅读的流控制

对于非常简单的事情,仍然建议使用sysklogd语句类型

据经验,在以下情况下应使用RainerScript配置语句:

  • 需要配置参数(例如Action...,legacy 语句的类型)
  • 需要更精细的流程控制(例如,当多个动作必须在相同条件下嵌套时)

注释语法

  • #-Comments 单行注释
  • C-style Comments - start with /* and end with */

规则集

规则集是规则的容器。一个规则集可以包含许多规则。用编程语言类比,人们可能会认为规则集就像是一个程序。

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