ELK之logstath的使用(3)----filter插件的使用

filter插件位于input和output中间的位置,我这边工作中主要用来处理event内字段的过滤。下面来具体说一下:
上回经过input将多行日志合并为一行进行采集,采集到的结果如下:

2017-08-03T02:55:48.382Z testserver2 2017-08-03 10:55:45,203 INFO smg.message.cdnws||||cd /data/Video && rsync -avrtuz -R ./2017/08/02/d14853fd5fe24d1691c23e7829367427.mp4.m3u8 chinacache@rsync4.upload.wscdns.com::chinacache_video --password-file=/etc/rsync_ws.passwd||||{"command":"[/usr/local/microservice/rsyncCommand.sh, cd /data/Video, rsync -avrtuz -R ./2017/08/02/d14853fd5fe24d1691c23e7829367427.mp4.m3u8 chinacache@rsync4.upload.wscdns.com::chinacache_video --password-file=/etc/rsync_ws.passwd]", "errorMessage":"null", "infoMessage": sending incremental file list 2017/08/02/d14853fd5fe24d1691c23e7829367427.mp4.m3u8 sent 279 bytes received 30 bytes 123.60 bytes/sec total size is 108 speedup is 0.35

然后发现logstath会在日志的前面加上时间戳和服务器的名字。在实际业务中还是采用原有日志的时间戳,所以使用filter插件来过滤掉这些不用的字段。
主要使用的filter插件有grokmutate两个插件。

grok:用来对日志进行正则匹配然后分配给相应的字段。

grok{match => ["message","%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:logmessage}"]}

在这个配置中message代表了原来的日志消息。将其通过正则匹配出三个字段来,时间戳匹配成timestamp,日志等级匹配成level,剩下的信息匹配成logmessage。这样就将原有的message信息分解成了三个字段信息。

mutate:用来对现有的字段进行增加删除处理。

mutate { 
      add_field => {"servicename" => "testName"}
      remove_field => "message"          
      remove_field => "@timestamp"      
      remove_field => "@version"      
      remove_field => "host"      
      remove_field => "path"        
      remove_field => "tags"    
    } 

其中删除的字段为logstath自己添加的字段信息,message因为已经分解为三个字段所以不再需要。添加的字段可以写死为一个字符串,相当于给日志信息做个标签名称。
现在的配置文件为:

input{
    file{
        path=>"/home/testfiles/command_service_amq.log"   //日志文件地址
        start_position=>"beginning"               //在第一次读文件时是否从第一行进行读取  默认为end
        codec => multiline { 
            pattern => "^%{TIMESTAMP_ISO8601:timestamp}"   //正则匹配,以iso8601时间为开始  
            negate => true          //如果没匹配则取消正则,没理解,反正true跟false都试试
            what => "previous"      //和上一行组成同一event
        }
    }
}  
filter{
    grok{match => ["message","%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level}: %{GREEDYDATA:syslog_message}"]} 
    mutate { 
      add_field => {"servicename" => "testName"}
      remove_field => "message"          
      remove_field => "@timestamp"      
      remove_field => "@version"      
      remove_field => "host"      
      remove_field => "path"        
      remove_field => "tags"    
    } 
    //这个if用于将日志级别是debug的日志抛掉
    if [level] == "DEBUG" {  
                drop {}  
                }  
} 
//为了输出好看一些将其变为json输出
output{stdout{codec => json}}

最后的输出结果为:

{"level":"INFO","logmessage":"smg.message.cdnws||||cd /data/Video && rsync -avrtuz -R ./2017/08/02/d14853fd5fe24d1691c23e7829367427.mp4.m3u8 chinacache@rsync4.upload.wscdns.com::chinacache_video --password-file=/etc/rsync_ws.passwd||||{\"command\":\"[/usr/local/microservice/rsyncCommand.sh, cd /data/Video, rsync -avrtuz -R ./2017/08/02/d14853fd5fe24d1691c23e7829367427.mp4.m3u8 chinacache@rsync4.upload.wscdns.com::chinacache_video --password-file=/etc/rsync_ws.passwd]\", \"errorMessage\":\"null\", \"infoMessage\":\n\rsending incremental file list\n\r2017/08/02/d14853fd5fe24d1691c23e7829367427.mp4.m3u8\n\rsent 279 bytes  received 30 bytes  123.60 bytes/sec\n\rtotal size is 108  speedup is 0.35","servicename":"cptn1","timestamp":"2017-08-03 13:48:09,564"}

大功告成!!!有问题之处烦请在留言中指出,非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值