logstash的filter之grok
Logstash中的filter可以支持对数据进行解析过滤。
grok:支持120多种内置的表达式,有一些简单常用的内容就可以使用内置的表达式进行解析
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
自定义的grok表达式 格式(?<usetime>PATTERN) usertime:
表示定义的字段名称 PATTERN:此处需要写正则表达式
filebeat采集输出到logstash
[root@bigdata-sg-a-01 log]# echo qq5201314 >>data.log
input {
beats {port => 5044}
}
filter{
grok{
match=>{"message"=>"%{NUMBER:usertime}"}
}
}
output {
stdout { codec => json}
}
#################output 多了个usertime 字段
{"message":"qq5201314","@version":"1","@timestamp":"2018-07-27T09:21:32.080Z","offset":46,"input_type":"log","fields":null,"count":1,"beat":{"hostname":"bigdata-sg-a-01","name":"bigdata-sg-a-01"},"source":"/mnt/log/data.log","type":"log","host":"bigdata-sg-a-01","tags":["beats_input_codec_plain_applied"],"usertime":"5201314"}
logstash中的if else
如果我们在获取日志的话是需要同时读取多个文件,那这多个文件的解析规则肯定不一样,那就需要根据不同的文件执行
不同的解析逻辑了。 假设我们要解析ngnix日志和tomcat的日志,这样就需要判断数据是属于那个文件的,使用对应的解析规则
根据自己的业务规则修改