您的位置:首页 > 其它

过滤器

2016-08-11 10:51 211 查看
severity and facility

Facility  定义日志消息的来源,以方便对日志进行分类,facility 有以下几种:

--kern   内核消息

--user    用户级消息

--mail    邮件系统消息

--daemon   系统服务消息

--auth     认证系统消息

--syslog    日志系统自身消息

--lpr      打印系统消息

Priority/Severity Level
除了日志来源以外,对于同一来源产生的日志消息,还进行了优先级划分,

优先级氛围以下几种:

--Emergency     系统已经不可用

--Alert         必须立即进行处理

--Critical       严重错误

--Error          错误

--Warning        警告

--Notice         正常信息,但是较为重要

--Infomatinal   正常信息

Filter Conditions 过滤条件:

Rsyslogs 提供4种不同的 过滤条件:

“传统”的严重性和设备基于选择器

基于属性的过滤器

基于表达式的过滤器

基于BSD blocks块的

选择器:

选择器是传统的过滤syslog消息的方式。 它们使用它们原来的语法 一直保存在rsyslog里,

因为它是总所周知的,高效的和 需要用于兼容stock syslogd 配置文件。

如果你只是需要过滤基于优先级和设备,你应该这样做使用 selector lines.

它们不是2等公民在rsyslog里,提供了最好的性能对于job.

选择器字段本身有两部分组成,一个设备和一个优先级,通过一个.分隔。

这两个部分都是不区分大小写,也可以指定为一个10进制数,但是不好这样做,

你会被警告。设备和优先级都是在syslog(3)描述的。

下面提到的名字对应于类似LOG_-values 是在 /usr/include/syslog.h.

facility 是下面关键字之一:

authpriv, cron, daemon, kern, lpr, mail, mark, news, security (same as auth), syslog, user, uucp and local0 through local7.

关键字 security 不应该用于人任何其他和标记只能内部使用,因此不能被用于应用。

无论如何,你需要指定和重定向这些消息。

facility 指定了子系统 会产生消息,例如 所有的mail 程序的log 使用 facility (LOG_MAIL) 如果它们记录日志使用syslog

优先级是 下面的关键词之一:

debug, info, notice, warning, warn (same as warning), err, error (same as err), crit, alert, emerg, panic (same as emerg).

关键词error, warn和panic 是过时的,不能再被使用,优先级定义了 消息的安全

原始的BSD syslogd 行为是所有特定的优先级的消息和更高的是被记录根据给定的action.

Rsyslogd 行为相同,但是有一些扩展。

除了以上提到的名字 rsyslogd(8) 理解下面的扩展:

一个星号 ("*") 代表所有的facilities或者所有的优先级,

取决于它使用在哪里。

关键字none 表示给定的facility没有优先级。

你可以指定多个facilities 使用相同的邮件及模式 在一个语句里使用,分隔。

你可以指定 多个facilities

记住只有facility 部分,优先级部分会被跳过

多个选择器可以通过一个acion被指定使用 (";")分隔。

记住每个selector 字段是能够覆盖前面的。使用这个行为你可以排除一些优先级

Rsyslogd 有一个语法扩展到原始的BSD 源, 让其使用更加直观。

你可以优先于米格优先级 使用一个("=") 到特定的单个优先级。

你也可以(两个都是有效的)优先于优先级使用一个感叹号(!) 来忽略所有的优先级,

无论是确切这个或者任何更好的优先级。

如果你使用两个表达式相比感叹号

基于属性的过滤器:
syslog local5 nginx-zjzc01;

基于属性的过滤器是唯一的对于rsyslogd,它允许规律在任何属性, 像主机名,syslogtag和msg

所有的当前支持的属性的列表可以被找到在属性替换文档(但是记住,只有属性,没有替换是支持的)

在这个过滤器,每个属性可以被检查通过一个指定的值, 使用一个指定的比较操作符。

基于属性的过滤器必须以一列开始 在column 0,这个高速rsyslogd 它是一个新的过滤器类型。

列必须跟着属性的名字, 一个逗号, 比较操作符的名字来进行,另外一个逗号和对值进行比较。

这个值必须被引号引起来, 可以有空格和tabs 在逗号之间.

属性的名字和比较操作符是区分大小写的,因此 "msg"工作,当"MSG"不是一个正确的属性名字。简单的说,语法如下:

:property, [!]compare-operation, "value"

比较操作:

下面的比较操作符当前是支持的:

contains:

检查如果提供的字符串在是是包含,这个必须是一个准确的匹配,不支持通配符

isequal 相等:

提供的值和属性内容比较, 这两个值必须完全等价匹配。

不同包含是contains  搜索值在属性值里的任何地方,然而 所有的分字符串必须是相同的对于isequal

因此 isequal  对于字段像syslogtag 或者FROMHOST是有用的,在那里你知道确切的内容。

startswith: 从开始

检查是否值是被准确找到在属性值的开始,比如 如果你搜索"val" :

:msg, startswith, "val"

它是一个匹配如果msg 包含  “values are in this message”

但是它不会匹配 如果 msg 是 “There are values in this message" (这种情况,“contains” would match).

注意  “startswith”到目前为止最快的相比正则表达式。

因此 一旦它们被实施,它可以非常有意思(性能) 来使用  “startswith”.

regex:

比较 属性提供正则表达式

ereregex

你可以使用 "!" 在比较操作符的前面, 这个操作的结果是否定的。比如, 如果msg 包含 “This is an informative message”,

下面的例子不会匹配

! 表示否定

:msg, contains, "error"

but this one matches:

:msg, !contains, "error"

使用否定可能是有用的 如果你想做一些通用的处理,但是排除一些特定的值。

你可以使用discard action 连接,例子将是:

*.* /var/log/allmsgs-including-informational.log
:msg, contains, "informational"  ~
*.* /var/log/allmsgs-but-informational.log

不要忽略波浪线在第2行,在这个例子,所有的消息是写入到文件 allmsgs-including-informational.log.

然后,所有的消息包含 字符串 “informational” 会被丢弃。

这意味着 配置文件 行 在  “discard line” (在第2行在我们的例子)不会英语这个消息

然后,所有剩下的行会写入到文件 allmsgs-but-informational.log.

值的一部分:

值是一个引号引起来的字符串,它支持一些转义序列:

\" 引号字符(例如  “String with \”Quotes\””)

\\  反斜杠字符 (e.g. “C:\\tmp”) 正常 C:\app

转义字符总是以一个\开始,二外的转义字符 可能被增加。

反斜杠字符必须被转义。

可能的,"msg" 是最突出使用的情况 在属性基于过滤器,它是实际的消息文本,如果 你想要规律基于一些消息内容

(例子: 特定代码的存在)的基础上,这个可以简单的实现:

:msg, contains, "ID-4711"

这个过滤器匹配当消息包含字符串  “ID-4711”.

过滤器必须匹配当消息包含 字符串 “ID-4711”. 请注意 比较是区分大小写的,

所以 它不会匹配如果 “id-4711”  会包含在消息内

:msg, regex, "fatal .* error"

这个过滤器使用一个POSIX 正则表达式,它匹配当字符串包含字符“fatal” and “error”  和任何其他在它们之间

(比如 “fatal net error” and “fatal lib error” but not “fatal error” )

获得基于属性的过滤器可能有时候是具有挑战的,

为了帮助你尽可能小的努力,rsyslogs 分隔debug信息对于所有基于属性的过滤器 在它们的评估阶段。

为了启用它,运行rsyslogd 在前台指定-d 选项

基于表达式的过滤器:

基于表达式过滤器允许过滤 在任意复杂的表达式,可以包含布尔运算,算术运算和字符串操作。

表达式过滤会变成一个完整配置脚本语言。

不幸的是,它们的语法会轻微的变化在这个过程中。

因此如果你现在使用它们,你需要准备改变你的配置文件 。然而, 我们尝试实现脚本facility 尽可能的

基于表达式的过滤器通过关键字if ,它们有这种格式:

if expr then action-part-of-selector-line

if和then  是固定的关键字,必须是存在的。"expr" 是一个表达式,

因此表达式文档的细节

“action-part-of-selector-line”  是一个action,就像你知道的(例如 “/var/log/logfile”来写整个文件)

*.* /var/log/file1 # the traditional way
if $msg contains 'error' then /var/log/errlog # the expression-based way

BSD 风格Blocks:

注意:rsyslog v7+ 不再支持BSD-风格的blocks 由于技术原因,因此 强烈不推荐使用它们

Examples 例子:

*.* /var/log/file1 # the traditional way
if $msg contains 'error' then /var/log/errlog # the expression-based way

现在,你需要指定数值的值如果你想要检查facilities and severity.

那些可以找到在 RFC 5424. 如果你喜欢那样,你也可以使用文本属性。

确保使用正确的。 作为表达式支持是启用的, 这个会改变。

比如,如果你想要过滤消息  有 facility local0, start with “DEVNAME” and have either “error1” or “error0”

在消息内容里,你可以使用下面的过滤器:

if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and ($msg contains 'error1' or $msg contains 'error0') then

/var/log/somelog

请注意,上面的必须在一行上! 如果你想要存储所有的信息除了那些包含"err01"和"err02",你只要加上一个 not

if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and not ($msg contains 'error1' or $msg contains 'error0') then

/var/log/somelog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: