ELK从入门到精通(五)——Logstash常用Filter介绍


Filter是Logstash功能强大的主要原因,它可以对Logstash Event进行丰富的处理,比如说解析数据、删除字段、类型转换等等,常见的有如下几个:

  • date: 日志解析
  • grok:正则匹配解析
  • dissect:分割符解析
  • mutate:对字段做处理,比如重命名、删除、替换等
  • json:按照json解析字段内容到指定字段中
  • geoip:增加地理位置数据
  • ruby: 利用ruby代码来动态修改Logstash Event

从字段解析日期以用作事件的Logstash时间戳,以下配置解析名为logdate的字段以设置Logstash时间戳:

1
2
3
4
5
filter {
date {
match => [ "logdate", "MMM dd yyyy HH:mm:ss" ]
}
}12345

返回结果:

1
2
3
4
5
6
7
8
{"logdate":"Jan 01 2018 12:02:03"} 
{
"@version" => "1",
"host" => "Node2",
"@timestamp" => 2018-01-01T04:02:03.000Z,
"logdate" => "Jan 01 2018 12:02:03"
}
12345678

说明:
match:类型为数组,用于指定日期匹配的格式,可以一次指定多种日志格式

1
match => [ "logdate", "MMM dd yyyy HH:mm:ss" ,"MMM d yyyy HH:mm:ss","ISO8601"]1

target:类型为字符串,用于指定赋值的字段名,默认是@timestamp
timezone:类型为字符串,用于指定时区

关于logstash时区的问题可以参考:logstash 时间戳时区问题

将非结构化事件数据分析到字段中。 这个工具非常适用于系统日志,Apache和其他网络服务器日志,MySQL日志,以及通常为人类而不是计算机消耗的任何日志格式。

1
55.3.244.1 GET /index.html 15824 0.0431

以下配置将消息解析为字段:

1
2
3
4
5
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}
}12345

应用过滤器后,示例中的事件将具有以下字段:

1
2
3
4
5
client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.04312345

Grok语法:

1
2
3
4
5
%{SYNTAX:SEMANTIC}   # SYNTAX为grok pattern的名称,SEMANTIC为赋值字段名称

%{NUMBER:duration}可以匹配数值类型,但是grok匹配出的内容都是字符串类型,可以通过在最后指定为int或者float来强制转换类型。
%{NUMBER:duration:float}
12345

常见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
2
3
4
5
6
7
filter{
grok {
match => {"message"=>"%{SERVICE:service}"}
pattern_definitions => {"SERVICE" => "[a-z0-9]{10,11}"}
#patterns_dir => ["/opt/logstash/patterns", "/opt/logstash/extra_patterns"]
}
}

tag_on_failure: 默认是_grokparsefailure,可以基于此做判断

调试参考
正则表达式:https://regexr.com/
grok:
http://grokdebug.herokuapp.com/
http://grok.elasticsearch.cn/


文章作者: KavenRan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KavenRan !
 上一篇
ELK从入门到精通(四)——Elasticsearch连接Kibana ELK从入门到精通(四)——Elasticsearch连接Kibana
Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,并让您在 Elastic Stack 中进行导航。你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。 Kibana使得
2020-08-07
下一篇 
ELK从入门到精通(二)——Logstash 集成 Filebeat 日志采集 ELK从入门到精通(二)——Logstash 集成 Filebeat 日志采集
ELK架构Filebeat 日志数据采集,Logstash 过滤,Elasticsearch 存储,Kibana 展示 Fliebeat日志采集Logstash 致命的问题是它的性能以及资源消耗。Filebeat 是一个轻量级的日志传
2020-08-07
  目录