zoukankan      html  css  js  c++  java
  • Logstash的grok以及Ruby

      logstash的grok插件的用途是提取字段,将非格式的内容进行格式化,

    input {
        file {
            path => "/var/log/http.log"
        }
    }
    filter {
        grok {
            match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
        }
    }         

      匹配字段如下:

    client: 55.3.244.1

    method: GET

    request: /index.html

    bytes: 15824

    duration: 0.043

      更加震撼的是logstash内置很多的正则表达式,参见参考部分的链接。

      例如:对于字符串:

    Jan 1 06:25:43 mailserver14 postfix/cleanup[21403]: BEF25A72965: message-id=<20130101142543.5828399CCAF@mailserver14.example.com>

      可以用如下的解析

    1 filter {
    2     grok {
    3         patterns_dir => ["./patterns"]
    4         match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }
    5     }
    6 }         

      其中SYSLOGBASE以及GREEDYDATA都是logstash里面内置好的解析规则,可以再上面提供的github中找到,是不是很省劲?

      对于POSTFIX_QUEUEID而言,是一个我们自己定制的一个解析,放在根目录的patterns路径下,那么需要前面的patterns_dir参数中指定一下路径即可。文件的内容如下:

      # contents of ./patterns/postfix:

      POSTFIX_QUEUEID [0-9A-F]{10,11}

      我们来看一下grok里面令人兴奋的几个例子:

      1. override:

      消息:

    May 29 16:37:11 sadness logger: hello world

      grok规则:

    1 filter {
    2     grok {
    3         match => { "message" => "%{SYSLOGBASE} %{DATA:message}" }
    4         overwrite => [ "message" ]
    5     }
    6 }         

      解析结果:

      hello world

      2. addtag,addfield

      处于测试目的,你能希望添加一些字段来辅助跟踪,或者增强表达内容可以通过addtag以及addfield来进行统一设置。tag表达式有一个点,就是可以一次性添加多个,因为这些options的类型都是array,如果是多个,需要用"[... ...]"来包裹。

    filter {
      grok {
        add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
      }
    }
    # You can also add multiple fields at once:
    filter {
      grok {
        add_field => {
    "foo_%{somefield}" => "Hello world, from %{host}"
    "new_field" => "new_static_value"
        }
      }
    }
    filter {
        grok {
          add_tag => [ "foo_%{somefield}" ]
        }
    }
    # You can also add multiple tags at once:
    filter {
        grok {
            add_tag => [ "foo_%{somefield}", "taggedy_tag"]
        }
    } 

      3. 多个规则匹配

    1 filter {
    2     grok {
    3          match => { "message" => [ "%{NUMBER:duration}",  "%{NUMBER:speed}" ] } }
    4 } 

      关于Grok解析

      想要测试我们的grok而是解析正确可以通过下面的网站进行测试:

    http://grokdebug.herokuapp.com/

      例如,

    1. 匹配名字
    1 Demo:Lorry 2018-9-8 11:20:54
    2 
    3 模式:^%{USERNAME:name}$
    4 
    5 匹配结果:
    6 
    7 { "name": [ [ "Lorry" ] ] }

      2.匹配时间

    1 Demo:2018-9-8T11:19:57.333
    2 模式:%{TIMESTAMP_ISO8601 :lorry}
    3 匹配结果
    4 { "TIMESTAMP_ISO8601": [ [ "2018-9-8T11:19:57.333" ] ], "YEAR": [ [ "2018" ] ], "MONTHNUM": [ [ "9" ] ], "MONTHDAY": [ [ "8" ] ], "HOUR": [ [ "11", null ] ], "MINUTE": [ [ "19", null ] ], "SECOND": [ [ "57.333" ] ], "ISO8601_TIMEZONE": [ [ null ] ] } 

      3.下面是一个比较复杂的demo,就是匹配多部分:

    1 DemoLorry 2018-9-8T11:19:57.333
    2 %{USERNAME:Lorry}%{SPACE}%{TIMESTAMP_ISO8601:time} 

    Ruby

    最后是关于ruby,下面链接中就是一个比较好的Ruby教程,就ruby的语法以及日期等处理方式都有说明。

    参考:

      1. 关于grok内置好的正则表达式

    https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

      2. 下面是一篇很好的介绍logstash的文章(唉,只有google可以搜得到)

    https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

      3. Ruby教程

    https://code.ziqiangxuetang.com/ruby/ruby-tutorial.html

  • 相关阅读:
    rocketMQ
    RocketMQ 事务消息
    Serial,Parallel,CMS,G1四大GC收集器特点小结
    CMS垃圾收集器与G1收集器
    CMS垃圾回收过程
    MySQL中EXPLAIN解释命令 查看索引是否生效
    redis持久化的几种方式
    深入浅出数据库索引原理
    Java中堆内存和栈内存详解
    jvm垃圾回收机制
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/9614574.html
Copyright © 2011-2022 走看看