<pre name="code" class="html">欢迎来到rsyslog
Rsyslog 是一个日志处理的快速系统,它提供高性能的,大的安全功能和模块化的设计。
当它开始一个普通的syslogd,rsyslog 已经演变成了一个瑞士军刀的日志系统,可以用于:
1.接收来自各种各样来源的输入
2.改造它们
3.并将结果输出到不同的目的地
Rsyslog 有一个强大的企业关注,但是也可以缩小到小的系统。它支持,包括,MySQL,PostgreSQL,
failover log destinations, ElasticSearch, syslog/tcp transport, 细颗粒度输出控制,
高精度的时间戳,队列操作和有能力过滤消息部分。
Configuration 配置:
Rsyslogd 是配置通过rsyslog.conf 文件,通常发现在/etc下。
默认,rsyslogd 读取/etc/rsyslog.conf. 这个可以通过命令行选项改变:
注意: 配置可以内部创建交互式的通过在线rsyslog 配置创建工具:
基本结构;
这个章节描述rsyslog 配置基本工作,想象rsyslog 作为一个大的日志记录和事件处理工具。
它可以认为是一个框架,一些基本的处理,以固定的数据流的方式,但是是可以高度定制的。
在配置过程中,这个自定义是通过定义和定制在rsyslog objects.
快速预览消息流和对象:
Message 输入到rsyslog 使用input modules模块。然后,它们是被传递到规则集,
规则条件是有条件的被应用。 当一个规则匹配时,消息是传入到一个action,
然后对消息做处理,例子,写到一个文件,数据库或者转发给远程主机。
处理原则:
输入提交接收消息到规则集,如果 规则集没有没有明确的限制,默认规则集被使用:
默认的, 这里有一个规则集(RSYSLOG_DefaultRuleset)
2.额外的规则集可以用户自定义
3.每个规则集包含0个或者多个规则
虽然它允许有0个规则在规则集内,但是这显然是没有意义的
一个规则有一个过滤器和一个action列表组成
过滤器提供yes/no 决定从而控制流能力
4.如果一个过滤器"matches" (过滤器says yes),相应的action 列表被执行,如果它不匹配,没有什么发生
5.规则是按顺序被评估从第一个到最后一个规则 在给定的规则集, 没有规则从相关的规则集是被执行
6.所有的规则总是被完全评估的,无论一个过滤器匹配或不匹配(因此我们不在第一个匹配后就停止).
如果消息处理应该停止,那么"discard" action (通过 tilde character 或者stop command为代表)
必须明确的被执行。如果 discard被执行,消息处理立即停止,不会进一步的评估。
7.一个action 列表包含0个或者多个actions.
8.在一个action列表没有进一步的过滤器是可能的
9. 多余一个action 在一个列表,&字符必须防止在过滤器的位置,这个必须理解遵循之前的动作。
10. actions 包含action 请求本身(例如 ”:omusrmsg:”) 以及action定义配置语句($Action... directives)
11.如果 legacy format被使用,$Action... 指示必须被定义在action前面
12.一些配置指令自动的指向到它们先前的值在被应用后,而其他的不是。
查看相应的文档获取细节, 警告 当前的不总是正确记录的。
13.总的来说, rsyslog v5 是过时的,它的配置语言是痛苦的
rsyslog 项目强烈推荐使用至少version 7,在那里那些版本是解决和配置是更加简单的
legacy 配置语句不影响RainerScript 对象
Configuration File:
在启动时, rsyslog 读取它的配置从rsyslog.conf 文件默认情况下,
这个文件可能包含引用到包含其他的配置文件。
一个不同的"root" 配置文件可以通过-f选项指定
Statement Types
Rsyslog 支持3种不同类型的配置声明:
sysklogd 这是简单的旧格式, 仍旧相当有用对于一些简单的情况。
注意一些非常少的结构是不在被支持 因为它们是不兼容新的功能
legacy rsyslog
这些是语句开始一个dollar 符号, 它们设置相同配置参数和修改例子actions操作的例子。
这是唯一的格式被吃在V6版本之前。
它是仍旧被支持在V6和以上版本。
它是仍旧被支持在V6和以上版本。注意 一些插件和功能仍旧是可用的通过 legacy format
RainerScript: 新的样式,这是最好的和最精确的格式用于更复杂的情况。 本页的其余部分假设RainerScript 基于rsyslog.conf.
rsyslog.conf 文件有声明组成,对于老的格式(sysklogd & legacy rsyslog),
对于新的样式(RainerScript) 行间距是无关紧要的。
最重要的是,这意味着 新的样式actions 和所有其他的对象可以分散在多行
Recommended use of Statement Types 推荐使用的声明类型:
通常 它是推荐使用RainerScript 类型声明, 因为它们提供干净的和简单的读取流控制以及毫无因为的 关于 那个参数是活动的。
它们也没有副作用和包含文件, 可以是一个主要的障碍在 legacy rsyslog statements
对于很简单的事情 sysklogd statement types仍旧是推荐的,尤其是如果完全配置有简单的组成。
经典的例子是写到文件里(或者代理)通过优先级,In sysklogd, this looks like:
mail.info /var/log/mail.log
mail.err @server.example.net
这是一个很难被击败的简单性,很多人知道这种语法,它是相当完美的使用那些结果即使在新写的配置文件。
作为一个经验法则,RainerScript 配置语句应该被使用当:
1.配置参数是需要的(例如,Action legacy statements的类型)
2.更精细的流程控制是需要的(例如,当多个actions 必须嵌套在相同的条件下)
3.它通常不推荐使用rsyslog legacy 配置格式(那些指令以$符号开始)
然而,一些设置和模块没有被转换成RainerScript。在那些情况下, legacy syntax必须被使用。
处理顺序:
指令是被处理从rsyslog.conf的顶部到底部,订购事宜。例如,你停止处理一个消息,显然所有的语句在停止语句是不会被评估了。
Flow Control Statements 流程控制声明
数据处理声明:
数据操作是通过set,unset和reset语句完成
Inputs:
每个输入需要一个input 模式被加载,一个侦听器定义它。完整的details 可以被找到在rsyslog 模块文档。
一旦加载,inputs 是定义通过input()对象。
Outputs
Outpus 也被称为"actions" 一些小的actions的集合被提前加载(像output file writer,
可以用于机遇每个rsyslog.conf文件), 其他必须被加载像inputs.
一个action 被调用通过action(type=”type” ...)对象。
Typel 是强制的和必须包含插件的名字
Rulesets and Rules
Rulesets and rules 从rsyslog处理的基础,总之,一个规则是rsyslog应该处理一个特定消息的方式。
通常,会有一个过滤器的类型(if语句)在规则前面,复杂的嵌套的规则是可能的, 很像一个编程语言
规则集是规则的容器, 一个简单的规则集可以包含很多规则。
和编程语言相似,人们可能认为规则集就像一个编程。
一个规则集可以认为“bound” 分配给一个特定的input.
类比,这个意味着 当一个消息来自通过input,程序规则集会被执行
ruleset(name="rulesetname") {
action(type="omfile" file="/path/to/file")
action(type="..." ...)
/* and so on... */
}