Rsyslog Properties and the Property Replacer

rsyslog Properties

  数据项在rsyslog称为"属性",每当你想要访问数据项,你需要访问resprective属性。  


 

  Properties被用于:

    templates(模板)
    conditional statements(条件控制语句)

  Message Properties

   这些都是通过rsyslog解析器从原始消息中提取,所有消息属性从一个字母开始:

        msg:message的MSG部分
        rawmsg:从socket接收到的原始信息,一般用于debug。
        hostname:message中的主机名
        source:HOSTNAME的别名
        fromhost:接受message的系统主机名,在多级收集的模式下不一定是原始的发送者的主机名,这是DNS解析的名称。
        fromhost-ip:和fromhost一样,总是表现为一个IP地址,本地作为input的话,地址为127.0.0.1。
        syslogtag:message的TAG部分
        programname:tag的static部分,named[12345]的programname是named。
        pri:message的PRI部分,未编码的。
        pri-text:PRI的一部分,以文本的形式。
        iut:略
        syslogfacility:message的facility,以数字的形式
        syslogfacility-text:message的facility,以文本的形式
        syslogseverity:message的severity,以数字的形式
        syslogseverity-text:message的severity,以文本的形式
        syslogpriority:syslogseverity的别名
        syslogpriority-text:syslogseverity-text的别名
        timegenerated:接受到message是的timestamp,精度高
        timereported:从message里面获取timestamp,时间进度取决于message本身
        timestamp:timereported的别名
        protocol-version:draft-ietf-syslog-protcol中的PROTCOL-VERSION字段
        structured-data:draft-ietf-syslog-protocol中的STRUCTURED-DATA
        app-name:draft draft-ietf-syslog-protocol中的APP-NAME字段
        procid:draft-ietf-syslog-protocol中的PROCID字段
        msgid:draft-ietf-syslog-protocol中的MSGID字段
        inputname:生成的信息中输入模块的名字,并不是所有模块都提供这个属性。

  System Properties

  这些属性由rsyslog核心引擎提供。 它们与消息无关。 所有系统属性都以$开始。
  例如timereported就包含message的时间戳信息,由于日志在中继的过程中可能时间戳比较滞后,使用$now表示的是系统当前处理的时间

        $bom:utf-8编码的Unicode字节顺序,前提是知道是unicode字符集。
        $now:当前的时间戳,YYYY-MM-DD
        $year:当前时间的年份,4位数。
        $month:当前的月份,2位数。
        $day:当前的日,2位数。
        $hour:当前的小时,2位数,24小时制。
        $hhour:半小时制。
        $qhour:略
        $minute:当前时间的分钟数
        $myhostname:当前主机的名称

The Property Replacer

property replacer是字符串模块的核心组件,syslog消息有很多明确的属性,每一个属性都可以被Property Replacer访问和操纵。例如将所有字符转换成小写。

Accessing Properties

  syslog消息的属性被用于模板的内部,通过百分号访问,属性可以由替代属性修改。示例:

    %property:fromChar:toChar:options%

  Available Properties

    参考上一节的rsyslog Properties部分

  Character Positions

    FromChar and toChar被用于建立子串,示例:

        %msg:1:2%:截取前两个字符
        %msg:::lowercase:::表示整个字符串,将全部字符串转换成小写
        %msg:10:$%:$表示结尾,第10个字符一直到结尾。

    支持正则匹配的方式:

    %msg:R:.*Sev:. \(.*\) \[.*–end%:R表示正则匹配,–end表示结尾。

    R后面可以指定参数,格式:  

      R,<regexp-type>,<submatch>,<nomatch>,<match-number>
      regexp-type:正则表达式的类型,默认是BRE
      submatch:子匹配标识要与结果一起使用的子匹配,0标志完整匹配,可以使用0-9.
      match-number:表示匹配的模数,引用前面的匹配对象
      nomatch:指定在找不到匹配的情况下应该使用的内容。
      示例:

                %msg:R,ERE,1,FIELD:for (vlan[0-9]\*):--end%
                %msg:R,ERE,1,FIELD,1:for (vlan[0-9]\*):--end%

      提取也可以基于字段来完成,放入一个F之后,再定义分隔符,分隔符使用字符的ascii码字符来表示
        %msg:F,59:3% #59为分号
      基于子串来做字段提取工作(6.3.9版本以后)
        %msg:F,59,5:3,9% #F表示提取模式,59表示分隔符,5表示起始,3表示字段3,9表示提取的字符串位置
      需要使用多个分隔符可以用+号,示例:

            int n, m;
            ...
            syslog(LOG_ERR, "%d test %6d", n, m);    #使用空格作为分隔符,在遇到多个空格的情况下容易出现不唯一的情况
            "%msg:F,32:2%" to "%msg:F,32+:2%"        #使用+号来添加一个或多个相同分隔符的效果,来源与perl的风格

  Property Options

   属性选项是不区分大小写的。目前,定义以下选项:

        uppercase:将属性转换成小写
        lowercase:将属性文本转换成大写
        csv:生成的格式
        drop-last-lf:删除消息后面的换行符
        date-mysql:mysql的时间格式
        date-rfc3164:rfc3164的时间格式
        date-rfc3164-buggyday:类似于date-rfc3164
        date-rfc3339:rfc3339的时间格式
        date-subseconds:时间戳的秒数
        escape-cc:替换控制字符
        space-cc:用空格替换控制字符
        drop-cc:删除控制字符
        sp-if-no-1st-sp:略
        secpath-drop:去掉斜杠,e.g. "a/b" becomes "ab"
        secpath-replace:将斜杠替换,e.g. "a/b" becomes "a_b"

 

   

 

posted @ 2017-12-06 17:27  孤独的海浪  阅读(1323)  评论(0编辑  收藏  举报