过滤器

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

转载于:https://www.cnblogs.com/zhaoyangjian724/p/6199396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值