Logstash(三)filter插件简介

Filter Plugin

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

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

Filter Plugin - date

将日期字符串解析为日期类型,然后替换 @timestamp 字段或者指定其他字段(使用target 替换成其他字段;target 默认: @timestamp)
如下列:这里是如果logdate跟后面的格式匹配上了就会去替换,替换什么呢?target默认指的就是@timestamp,所以就是以client_time的时间更新@timestamp的时间
在这里插入图片描述

配置参数

match

  • 类型为数组,用于指定日期匹配的格式,可以一次指定多种日期格式
  • match => [ “logdate”, “MMM dd yyyy HH:mm:ss”,“MMM d yyyyHH:mm:ss”, “ISO8601”]

target

  • 类型为字符串,用于指定赋值的字段名,默认是@timestamp

timezone

  • 类型为字符串,用于指定时区

Filter Plugin – grok

将非结构化的数据解析为json
在这里插入图片描述
匹配这样的日志的数据结构需要考虑的很多情况非常复杂,因此出现了 grok
在这里插入图片描述
其实grok是带有名字的正则表达式组成如下:在这里插入图片描述
Grok内置的正则表达式 参考地址
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

Grok语法如下:

  • %(SYNTAX:SEMANTIC)
  • SYNTAX为grok pattern的名称, SEMANTIC为赋值字段名称
  • %(NUMBER:duration}可以匹配数值类型,但是grok匹配出的内容都是字符串类型,可以通过在最后指定为int或者float来强制转换类型。%(NUMBER:duration:float)
  • 熟悉常见的一些Pattern利于编写匹配规则
  • https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
    后面加了一个-r 开启热加载;就是改过配置文件logstash会进行重新加载
    bin/logstash -f demo.conf -r

基于正则自定义匹配规则

  • (?< service_name >[0-9a-z]{ 10 - 11) service_name 新增一个service_name 字段

在这里插入图片描述

自定义grok pattern

  • pattern_definitions参数,以键值对的方式定义pattern名称和内容
  • pattern_dir参数,以文件的形式被读取,写在该目录下自动加载配置在这里插入图片描述
  • 这种方式可以重复的利用自定义表达式
  • 在这里插入图片描述

match匹配多种样式

数组里面属于或的关系
在这里插入图片描述

overwrite

覆盖 “message”字段
在这里插入图片描述

匹配失败会出现以下字段

  • tag_on_failure
    - 默认是 _grokparsefailure,可以给予此做判断(使用if)

Filter Plugin – grok调试建议

  • 正则表达式:
    https://www.debuggex.com/
    http://www.regexr.com/
  • grok调试
    http://grokdebug.herokuapp.com/
    http://grok.elasticsearch.cn/
    x-pack grok debugger

Filter Plugin – dissect

基于分割符原理解析数据,解决grok解析时消耗过多cpu资源的问题
在这里插入图片描述

  • 性能对比
    在这里插入图片描述

dissect的应用有一定的局限性:

  • 主要适用于每行格式相似且分隔符明确简单的场景

dissect语法

  • dissect语法比较简单,有一系列字段(field)和分隔符(delimiter)组成

      - %{}字段
      - %{}之间是分隔符
    
案例

在这里插入图片描述
在这里插入图片描述

+代表改匹配值追加到 ts 字段下

  • 指定追加顺序
    在这里插入图片描述
  • url 解析key-value在这里插入图片描述
  • dissect 可以自动处理空的匹配值在这里插入图片描述
  • dissect分割后的字段值都是字符串,可以使用convert_datatype属性进行类型转换
    在这里插入图片描述

Filter Plugin – mutate

使用最频繁的操作,可以对字段进行各种操作,比如重命名、删除、替换、更新等,主要操作如下:

  • convert类型转换
  • gsub字符串替换
  • split/join/merge字符串切割、数组合并为字符串、数组合并为数组-rename字段重命名
  • update/replace字段内容更新或替换
  • remove field删除字段

Filter Plugin – mutate convert在这里插入图片描述

Filter Plugin – mutate gsub

对字段内容进行替换,类型为数组,每3项为一个替换配置

  • abc/d/e 转化成 abc_d_e
    在这里插入图片描述

Filter Plugin – mutate split

将字符串切割位数组
在这里插入图片描述

Filter Plugin – mutate join

将数组拼接为字符串
在这里插入图片描述

Filter Plugin – mutate merge

将两个数组合并为1个数组,字符串会被转为1个元素的数组进行操作(吧spurce_arr 合并到 dest_arr)
在这里插入图片描述

Filter Plugin – mutate rename

将字段重命名
在这里插入图片描述

Filter Plugin – mutate update/replace

  • 更新字段内容,区别在于update只在字段存在时生效,而replace在字段不存在时会执行新增字段的操作
  • 在这里插入图片描述
    Filter Plugin – mutate remove
    删除字段
    在这里插入图片描述

Filter Plugin – json

将字段内容为json格式得数据进行解析在这里插入图片描述

Filter Plugin – geoip

  • 常用的插件,根据ip地址提供对应的地域信息,比如经纬度、城市名等,方便进行地理数据分析在这里插入图片描述

Filter Plugin – ruby

  • 最灵活的插件,可以以ruby语言来随心所欲的修改Logstash Event对象
  • 在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/agonie201218/article/details/104664002