Logstash filter 的使用

Filter插件(过滤器插件)是Logstash功能强大的主要原因,它可以对Logstash Event进行丰富的处理,比如说解析数据、删除字段、类型转换等等,常见的有如下几个:

  •  grok:正则匹配解析
  •  date: 日期解析
  •  dissect:分割符解析
  •  mutate:对字段做处理,比如重命名、删除、替换等
  •  json:按照json解析字段内容到指定字段中
  •  geoip:增加地理位置数据
  •  ruby: 利用ruby代码来动态修改Logstash Event

Grok插件

 grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据解析成结构化和方便查询的结构内容,将其定义成我们平时容易理解的一些字段名称。他是目前logstash 中解析非结构化日志数据最好的方式。
 使用grok filter需要在logstash的配置文件中加上这样的内容:

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

  这段代码中除了grok_pattern(grok表达式,[ˈpætərn]模式)以外都是logstash的关键字。grok_pattern部分需要使用者填充自己的解析方式。
 grok_pattern由零个或多个%{SYNTAX:SEMANTIC}组成
 其中SYNTAX是表达式的名字,即文本匹配的模式的名称,是由grok提供的,例如数字表达式的名字是NUMBER,IP地址表达式的名字是IP。
 SEMANTIC表示解析出来的这个字符的名字,即为匹配的文本提供的标识符,由自己定义,例如IP字段的名字可以是client。【syntax [ˈsɪntæks]语法,semantic [sɪˈmæntɪk]语义】
 对于下面这条日志:
 192.168.1.2 GET /index.html 15824 0.043
 可以这样解析:

 将会得到这样的结果:

* client: 192.168.1.2
* method: GET
* request: /index.html
* bytes: 15824
* duration: 0.043

 数字表达式的名字是NUMBER,%{NUMBER:duration}可以匹配数值类型,但是grok匹配出的内容都是字符串类型,可以通过在最后指定为int或者float来强制转换类型。%{NUMBER:duration:float}
 data_type 目前只支持两个值:int 和 float。
 grok提供了哪些SYNTAX?可以查看文件grok-patterns,它默认放在路径/usr/local/logstash-7.3.0/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/目录下。
 测试:创建一个测试配置文件,如test.conf,内容如下:

 [root@server01~]# vim /usr/local/logstash-7.3.0/config/test.conf

input {stdin{}}
filter {
     grok {
        match => {
            "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"
        }
     }
}
output {stdout{codec => rubydebug}}

 使用test.conf启动一个logstash实例,通过键盘输入如下内容:

192.168.1.2 GET /index.html 15824 0.043

logstash -f /usr/local/logstash-7.3.0/config/test.conf

  默认grok调用的是:
 /usr/local/logstash-7.3.0/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/这个目录下的正则
 假设现在要匹配一个正则表达式为regexp的字符串,而grok预定义的SYNTAX都不满足,也可以自己定义一个SYNTAX。
 自定义SYNTAX方式有两种:
 (1)直接在grok里面使

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值