zoukankan      html  css  js  c++  java
  • Filter Conditions

    选择器字段本身有两个部分组成,一个设备和一个优先级,
    
    通过一个句号(".").
    
    
    两部分都是不区分小写的,也可以指定为十进数,但是不要那么做,你会被警告。
    
    facilities and priorities是在syslog(3)描述。
    
    
    facility 是下面关键字中的一个:auth,authpriv, cron, daemon, kern, lpr, mail, mark, news, security (same as auth), syslog, user, uucp and
    
    local 0 到local 7.
    
    
    关键字security  不应该再被使用,标记为内部使用,因此不能被应用使用。
    
    
    priority 是下面中的一个关键字,升序顺序:debug, info, notice, warning, warn (same as warning), err, error (same as err), crit, alert, emerg, panic (same as emerg). 
    
    关键字error,wrn和panic 是过时的,不再被使用。priority  定义消息的严重性
    
    
    原始的BSD syslogd 行为是 特定的priority  或者更高的所有消息是记录根据给定的动作
    
    除了额外的上面提到的理解下面的扩展:
    
    一个asterisk ("*") 代表所有的 facilities or all priorities, 
    
    
    取决于 它被用在哪里(句号之前或者之后).
    
    
    keyword  none 表示用于没有给定的facility的优先级。
    
    你可以指定多个facilities 使用相同的优先级模式在一个语句使用逗号,
    
    
    多个selectors 可以指定用于一个单独的动作使用,分隔符。
    
    
    基于属性的过滤器:
    
    
    基于属性的过滤器是唯一的对于rsyslogd.
    
    它们允许过滤任何property(属性), 像HOSTNAME,systag和msg.
    
    所有的当前支持的属性的列表可以在属性替换文档中找到(但是记住只有属性,不是替换)
    
    
    基于属性过滤器必须以一个:开始在第一个列,这个告诉rsyslog 它是一个新的filter 类型。
    
    
    冒号必须跟着属性名字,一个逗号,比较表达式的名字来完成,另外的逗号,和然后比对的值。
    
    这个值必须被引号引起。
    
    
    可以是空格和tabs 在逗号之间。
    
    属性名称和比较操作是区分大小写的,因此"msg"工作,当"MSG"是一个无效的属性名
    
    :property, [!]compare-operation, "value"
    
    Compare-Operations:
    
    下面的比较操作当前是支持的:
    
    contains:
    
    检查 如果提供的字符串是包含在属性中, 必须有一个精确的匹配,不支持通配符。
    
    isequal:
    
    
    比较:
    
    
    比较提供的值和属性的内容,那些两个值必须完全相等。
    
    和contain不同的是contains 搜索值在属性值的任何地方,
    
    而所有字符必须相等对于isequal.
    
    因此,isequal 是最重要的用于字段像 syslogtag or FROMHOST,
    
    在哪里你可能知道确切的内容。
    
    startswith:
    
    检查如果值是准确找到在属性值的开始, 例如,如果你搜索"val":
    
    
    :msg, startswith, "val"
    
    
    它会是一个匹配如果msg 包含"值是在这个消息",但是它不会匹配如果msg包含"有值在这个消息里"
    
    (在后面的例子,"contain"会匹配)。注意"startwith" 是比正则表达式快的。
    
    所以一旦实施,它会变的非常高性能 使用"startwith"
    
    
    regex:
    
    比较属性和提供的POSIX BRE正则表达式
    
    你可以使用!在比较操作的前面, 这个操作的结果被否定。
    
    例如,如果 msg contains  “This is an informative message” 下面例子不会匹配:
    
    
    :msg, contains, "error"
    
    
    
    但是这个会匹配:
    
    :msg, !contains, "error"
    
    
    使用~!可以是有用的如果你想要做一些特定的处理,
    
    但是排除一些指定的事件。你可以使用discard action 
    
    
    *.* /var/log/allmsgs-including-informational.log
    :msg, contains, "informational"  ~
    *.* /var/log/allmsgs-but-informational.log
    
    
    
    Value Part  值部分:
    
    值是引号字符串,它支持一些转义字符:
    
    " 引号字符
    
    \ 转义反斜杠
    
    转义字符总是开始一个反斜杠,额外的转义可能被增加。
    
    反斜杠字符必须是被转义
    
    可能的,"msg" 是最突出的属性基于过滤器的使用例子。
    
    它实际上是文本消息。
    
    如果你想要基于一些消息内容过滤 ,可以这么搞
    
    :msg, contains, "ID-4711"
    
    过滤器 会匹配当消息包含字符串 “ID-4711”. 
    
    请注意 比较是大小写敏感的,
    
    因此它不会匹配如果 “id-4711”  会包含在消息里。
    
    
    :msg, regex, "fatal .* error"
    
    
    这个过滤器使用一个POSIX 恒泽表达式。它包含当字符串包含字符"fatal"和"error" 
    
    
    和任何其他(比如: “fatal net error” and “fatal lib error” but not “fatal error”
    
    因为两个空格是需要的通过正则表达式)
    
    
    获取基于属性过滤器有时是具有挑战性的。
    
    为了帮助你用最小的努力,rsyslogd 分割我们的debug信息用于所有基于属性的过滤器在它们的评估
    
    表达型过滤器:
    
    表达式基于过滤器允许过滤任何复杂的表达式,可以包含布尔运算,算术运算和字符串操作。
    
    表达式过滤器会进化到一个完整的配置脚本语言。
    
    不幸的是, 它们的语法会轻微的改变在那个过程中。
    
    因此如果你使用它们,你需要准备改变你的配置文件。
    
    
    表达式基于filter 是通过关键字if 表明,它们有这种格式:
    
    if expr then action-part-of-selector-line
    
    例子:
    
    *.* /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,
    
    以DEVNAME开始和有 error1或者error0 在消息内容里,你可以使用下面的过滤:
    if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and
     ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
    
    请注意上面的必须在一行! 如果你想要存储所有的消息除了那些包含n “error1” or “error0”, 你可以增加一个not:
    
    if $syslogfacility-text == 'local0' and $msg startswith 'DEVNAME' and not ($msg contains 'error1' or $msg contains 'error0') then /var/log/somelog
    

  • 相关阅读:
    [linux] ARCH LINUX 常见问题及实用工具汇总
    [TLSR8267] 泰凌微 telink tlsr8267 ble ADC 用法浅谈
    [小黑科技] 破解一个电控升降桌,并改造成语音控制(上)—— 模拟中间人与控制手柄交互
    [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)
    [Node.js] 3、搭建hexo博客
    [IOT] 自制蓝牙工牌办公室定位系统 (二)—— 基于ESP32的蓝牙信号扫描系统
    [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核·干货)
    [python] PyMouse、PyKeyboard用python操作鼠标和键盘
    [python] bluepy 一款python封装的BLE利器
    [安卓] 20、基于蓝牙BLE的广播包高频快速搜索
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349673.html
Copyright © 2011-2022 走看看