2023年7月17日发(作者:)
ELK⽇志监控分析系统Logstash详解之——filter模块摘要: Logstash三个组件的第⼆个组件,也是真个Logstash⼯具中最复杂,最蛋疼的⼀个组件,当然,也是最有作⽤的⼀个组件。 1、grok插件 grok插件有⾮常强⼤的功能,他能匹配⼀切数据,但是他的性能和对资源的损耗同样让⼈诟病。Logstash三个组件的第⼆个组件,也是真个Logstash⼯具中最复杂,最蛋疼的⼀个组件,当然,也是最有作⽤的⼀个组件。1、grok插件 grok插件有⾮常强⼤的功能,他能匹配⼀切数据,但是他的性能和对资源的损耗同样让⼈诟病。filter{
grok{ #只说⼀个match属性,他的作⽤是从message 字段中吧时间给抠出来,并且赋值给另个⼀个字段logdate。 #⾸先要说明的是,所有⽂本数据都是在Logstash的message字段中中的,我们要在过滤器⾥操作的数据就是message。 #第⼆点需要明⽩的是grok插件是⼀个⼗分耗费资源的插件,这也是为什么我只打算讲解⼀个TIMESTAMP_ISO8601正则表达式的原因。 #第三点需要明⽩的是,grok有超级多的预装正则表达式,这⾥是没办法完全搞定的,也许你可以从这个⼤神的⽂章中找到你需要的表达式 #/liukuan73/article/details/52318243 #但是,我还是不建议使⽤它,因为他完全可以⽤别的插件代替,当然,对于时间这个属性来说,grok是⾮常便利的。 match => ['message','%{TIMESTAMP_ISO8601:logdate}'] }}2、mutate插件 mutate插件是⽤来处理数据的格式的,你可以选择处理你的时间格式,或者你想把⼀个字符串变为数字类型(当然需要合法),同样的你也可以返回去filter { mutate { #接收⼀个数组,其形式为value,type #需要注意的是,你的数据在转型的时候要合法,你总是不能把⼀个‘abc’的字符串转换为123的。 convert => [ #把request_time的值装换为浮点型 "request_time", "float", #costTime的值转换为整型 "costTime", "integer" ] }}3、ruby插件 官⽅对ruby插件的介绍是——⽆所不能。ruby插件可以使⽤任何的ruby语法,⽆论是逻辑判断,条件语句,循环语句,还是对字符串的操作,对EVENT对filter { ruby { #ruby插件有两个属性,⼀个init 还有⼀个code #init属性是⽤来初始化字段的,你可以在这⾥初始化⼀个字段,⽆论是什么类型的都可以,这个字段只是在ruby{}作⽤域⾥⾯⽣效。 #这⾥我初始化了⼀个名为field的hash字段。可以在下⾯的coed属性⾥⾯使⽤。 init => [field={}] #code属性使⽤两个冒号进⾏标识,你的所有ruby语法都可以在⾥⾯进⾏。 #下⾯我对⼀段数据进⾏处理。 #⾸先,我需要在把message字段⾥⾯的值拿到,并且对值进⾏分割按照“|”。这样分割出来的是⼀个数组(ruby的字符创处理)。 #第⼆步,我需要循环数组判断其值是否是我需要的数据(ruby条件语法、循环结构) #第三步,我需要吧我需要的字段添加进⼊EVEVT对象。 #第四步,选取⼀个值,进⾏MD5加密 #什么是event对象?event就是Logstash对象,你可以在ruby插件的code属性⾥⾯操作他,可以添加属性字段,可以删除,可以修改,同样可以进⾏树脂运算。 #进⾏MD5加密的时候,需要引⼊对应的包。 #最后把冗余的message字段去除。 code => " array=event。get('message').split('|') do |value| if e? 'MD5_VALUE' then
require 'digest/md5' md5=Digest::est(value) ('md5',md5) end if e? 'DEFAULT_VALUE' then ('value',value) end end remove_field=>"message" " }}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就是我的数据库的⼀个关于时间的字段。 #如果没有这个字段的话,千万不要试着去修改它。 }}5、json插件,这个插件也是极其好⽤的⼀个插件,现在我们的⽇志信息,基本都是由固定的样式组成的,我们可以使⽤json插件对其进⾏解析,并且得到每个字段对应filter{ #source指定你的哪个值是json数据。 json { source => "value" } #注意:如果你的json数据是多层的,那么解析出来的数据在多层结⾥是⼀个数组,你可以使⽤ruby语法对他进⾏操作,最终把所有数据都装换为平级的。}json插件还是需要注意⼀下使⽤的⽅法的,下图就是多层结构的弊端:对应的解决⽅案为:ruby{ code=>" kv=('content')[0] do |k,v| (k,v) end" remove_field => ['content','value','receiptNo','channelId','status'] }Logstash filter组件的插件基本介绍到这⾥了,这⾥需要明⽩的是:add_field、remove_field、add_tag、remove_tag 是所有 Logstash 插件都有。相关使⽤反法看字段名就可以知道。不如你也试试吧。版权声明:本⽂内容为转载,版权归作者所有。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689546067a265082.html
评论列表(0条)