Logstash详解之——filter模块-grok插件
1. grok插件:能匹配一切数据,但是性能和对资源的损耗也很大。
grok内置字段类型参见: https://blog.csdn.net/cui929434/article/details/94390617
filter{ grok{ #match属性,可以从message 字段中把时间给抠出来,并且赋值给另个一个字段logdate。 #首先要说明的是,所有文本数据都是在Logstash的message字段中中的,我们要在过滤器里操作的数据就是message。 #第二点:grok插件是一个十分耗费资源的插件。 #第三点:grok有超级多的预装正则表达式,基本上够用,不需要自己编写正则,内置字段类型参见 https://blog.csdn.net/cui929434/article/details/94390617。 #但是,我还是不建议使用它,因为他完全可以用别的插件代替,当然,对于时间这个属性来说,grok是非常便利的。 match => ['message','%{TIMESTAMP_ISO8601:logdate}'] } }
这里提供一个例子(kibana内置grok debugger可以测试grok字段):
![](https://img2018.cnblogs.com/blog/1392677/201907/1392677-20190731163744809-751085468.png)
2、mutate插件:
mutate插件是用来处理数据的格式的,你可以选择处理你的时间格式,或者你想把一个字符串变为数字类型(当然需要合法),同样的你也可以返回去做。可以设置的转换类型 包括: "integer", "float" 和 "string"。
3、ruby插件:
https://yq.aliyun.com/articles/154341
4、date插件:这里需要合前面的grok插件剥离出来的值logdate配合使用(当然也许你不是用grok去做)。
filter{ date{ #还记得grok插件剥离出来的字段logdate吗?就是在这里使用的。你可以格式化为你需要的样子,至于是什么样子。就得你自己取看啦。 #为什什么要格式化? #对于老数据来说这非常重要,应为你需要修改@timestamp字段的值,如果你不修改,你保存进ES的时间就是系统但前时间(+0时区) #单你格式化以后,就可以通过target属性来指定到@timestamp,这样你的数据的时间就会是准确的,这对以你以后图表的建设来说万分重要。 #最后,logdate这个字段,已经没有任何价值了,所以我们顺手可以吧这个字段从event对象中移除。 match=>["logdate","dd/MMM/yyyy:HH:mm:ss Z"] target=>"@timestamp" remove_field => 'logdate' #还需要强调的是,@timestamp字段的值,你是不可以随便修改的,最好就按照你数据的某一个时间点来使用, #如果是日志,就使用grok把时间抠出来,如果是数据库,就指定一个字段的值来格式化,比如说:"timeat", "%{TIMESTAMP_ISO8601:logdate}" #timeat就是我的数据库的一个关于时间的字段。 #如果没有这个字段的话,千万不要试着去修改它。 } }
引用自:https://yq.aliyun.com/articles/154341