• 过滤器


    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

  • 相关阅读:
    P5664 Emiya 家今天的饭
    P3944 肮脏的牧师
    P1233 木棍加工
    P4017 最大食物链计数
    P1287 盒子与球
    Java之未来已来(1)
    java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4
    java-信息安全(一)-BASE64,MD5,SHA,HMAC,RIPEMD算法
    SpringBoot集成Caffeine作本地缓存
    联想拯救者-触摸板手势
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6199395.html
Copyright © 2020-2023  润新知