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对象