Filter是Logstash功能强大的主要原因,它可以对Logstash Event进行丰富的处理,比如说解析数据、删除字段、类型转换等等,常见的有如下几个:
date:
日志解析grok:
正则匹配解析dissect:
分割符解析mutate:
对字段做处理,比如重命名、删除、替换等json:
按照json解析字段内容到指定字段中geoip:
增加地理位置数据ruby:
利用ruby代码来动态修改Logstash Event
从字段解析日期以用作事件的Logstash时间戳,以下配置解析名为logdate
的字段以设置Logstash时间戳:
1 | filter { |
返回结果:
1 | {"logdate":"Jan 01 2018 12:02:03"} |
说明:match:
类型为数组,用于指定日期匹配的格式,可以一次指定多种日志格式
1 | match => [ "logdate", "MMM dd yyyy HH:mm:ss" ,"MMM d yyyy HH:mm:ss","ISO8601"]1 |
target:
类型为字符串,用于指定赋值的字段名,默认是@timestamptimezone:
类型为字符串,用于指定时区
关于logstash时区的问题可以参考:logstash 时间戳时区问题
将非结构化事件数据分析到字段中。 这个工具非常适用于系统日志,Apache和其他网络服务器日志,MySQL日志,以及通常为人类而不是计算机消耗的任何日志格式。
1 | 55.3.244.1 GET /index.html 15824 0.0431 |
以下配置将消息解析为字段:
1 | filter { |
应用过滤器后,示例中的事件将具有以下字段:
1 | client: 55.3.244.1 |
Grok语法:
1 | %{SYNTAX:SEMANTIC} # SYNTAX为grok pattern的名称,SEMANTIC为赋值字段名称 |
常见pattern
可以查看:GitHub或者logstash家目录下的:
1 | vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns1 |
自定义匹配规则:
格式:(?the pattern here)
pattern_definitions
参数,以键值对的方式定义pattern名称和内容pattern_dir
参数,以文件的形式被读取
1 | filter{ |
tag_on_failure:
默认是_grokparsefailure
,可以基于此做判断
调试参考
正则表达式:https://regexr.com/
grok:
http://grokdebug.herokuapp.com/
http://grok.elasticsearch.cn/