<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... */ }