logstash插件配置-过滤器插件filter学习笔记-grok正则捕获(1)

【linux命令】logstash插件配置-过滤器插件filter学习笔记-grok正则捕获(1)

我们已经知道,logstash从本地日志文件中读取信息并交给elasticsearch。然而直接把原始未加工的日志交给elasticsearch没有什么意义。logstash还有一个重要的工作就是解析日志。把解析出来的关键字与日志本身共同交给elasticsearch,elasticsearch才能很好地建立日志索引。logstash支持多种解析器,filters/grok插件是其中一种,将其定义成我们平时容易理解的一些字段名称,grok也算是logstash的一些核心内容。

使用grok filter需要在logstash的配置文件中加上这样的内容:

filter {
    grok {
        match => {
                    "message" => "grok_pattern" 
                }
    }
}

这段代码中除了grok_pattern以外都是logstash的关键字。grok_pattern部分需要使用者填充自己的解析方式。

grok_pattern由零个或多个%{SYNTAX:SEMANTIC}组成,其中SYNTAX是表达式的名字,是由grok提供的,例如数字表达式的名字是NUMBER,IP地址表达式的名字是IP。SEMANTIC表示解析出来的这个字符的名字,由自己定义,例如IP字段的名字可以是client。

对于下面这条日志:

55.3.244.1 GET /index.html 15824 0.043

可以这样解析:

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

grok提供了哪些SYNTAX?可以查看文件grok-patterns,它默认放在路径/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns下。

假设现在要匹配一个正则表达式为regexp的字符串,而grok预定义的SYNTAX都不满足,也可以自己定义一个SYNTAX

自定义SYNTAX 方式有两种:

(1)匿名SYNTAX

将%{SYNTAX:SEMANTIC} 写为(?<SEMANTIC>regexp)

(2)命名SYNTAX

  • 在dir下创建一个文件,文件名随意
  • 将dir加入grok路径: patterns_dir => “./dir”
  • 将想要增加的SYNTAX写入: SYNTAX_NAME regexp
  • 使用方法和使用默认SYNTAX相同:%{SYNTAX_NAME:SEMANTIC}

 

最后重点备注两个点:
1,在线调试地址Grok Debugger 来调试自己的 grok 表达式。

2,官方提供的grok表达式
https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

参考内容:
1, logstash grok解析 http://blog.csdn.net/mishifangxiangdefeng/article/details/50573205
2, logstash filgers/grok组件  :http://kibana.logstash.es/content/logstash/plugins/filter/grok.html
2, logstash filgers/grok组件  :http://kibana.logstash.es/content/logstash/plugins/filter/grok.html

 

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » logstash插件配置-过滤器插件filter学习笔记-grok正则捕获(1)