Logstash之filter学习(官网)(GROK+GEO IP+FINGERPRINT+DATE)

本文档详细介绍了Logstash的filter插件,包括GROK、GEO IP、FINGERPRINT和DATE的使用。GROK用于从非结构化数据中提取结构,GEO IP用于解析IP地址获取地理位置信息,FINGERPRINT用于生成一致的哈希指纹,DATE则用于解析日期时间戳。文中还涵盖了各种配置选项,以帮助用户更好地理解和配置这些插件。
摘要由CSDN通过智能技术生成

写在前面:logstash的插件有很多,即使filter的插件也有很多,因为生产马上要实践了,这边做一个归类总结
学习来源:官方文档

基本说明


官方的文档里面,主要讲了以下几个filter的作用。

首先,filter的定义是为了即时解析和转换您的数据

当数据从源传输到存储时,Logstash过滤器会解析每个事件,识别命名字段以构建结构,并将它们转换为汇聚在通用格式上,以便更轻松,更快速地进行分析和业务价值。
这边把他总结成下面四点
- 1.使用grok从非结构化数据中导出结构
- 2.从IP地址解密地理坐标
- 3.匿名化PII数据,完全排除敏感字段
- 4.简化整体处理,独立于数据源,格式或模式。

这边讲一下GROK,GEO IP,FINGERPRINT,DATE这四个插件。

备注:以下说明大部分都为翻译,如有出错,敬请见谅

一、GROK

1.描述


Grok是一种很好的解析文本并构造它方法,它可以将非结构化日志数据解析为结构化和可查询的内容。

此工具非常适用于syslog日志,apache和其他Web服务器日志,mysql日志,以及通常为人类而非计算机使用而编写的任何日志格式。

Logstash默认提供约120种模式(解析日志的规则)。你可以在这里找到它们:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns。你可以轻松添加自己的。(见patterns_dir设定)

重要辅助工具: debug

2.基础知识


语法

grok模式的语法是 %{SYNTAX:SEMANTIC}

SYNTAX是与您的文本匹配的模式的名称。例如,3.44将与NUMBER模式匹配,55.3.244.1将与IP模式匹配。

SEMANTIC是您为匹配的文本提供的标识符。例如,3.44可能是事件的持续时间,因此您可以简单地调用它duration。此外,字符串55.3.244.1可以标识client 发出请求。

对于上面的示例,您的grok过滤器看起来像这样:

{NUMBER:duration}{IP:client}

默认情况下,所有语义都保存为字符串。如果您希望转换语义的数据类型,例如将字符串更改为整数,则使用目标数据类型将其后缀。例如%{NUMBER:num:int},它将num语义从字符串转换为整数。目前唯一支持的转化是intfloat

示例

通过语法和语义的概念,我们可以从示例日志中提取有用的字段,如虚构的http请求日志:
55.3.244.1 GET /index.html 15824 0.043
这种模式可能是:

{IP:client}{WORD:method}{URIPATHPARAM:request}{NUMBER:bytes}{NUMBER:duration}

详细点的logstash的配置就是

input {
  file {
    path => "/var/log/http.log"
  }
}
filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

在grok过滤器之后,该事件将包含一些额外的字段:

  • client: 55.3.244.1
  • method: GET
  • request: /index.html
  • bytes: 15824
  • duration: 0.043

3.正则表达式


首先,Grok位于正则表达式之上,因此任何正则表达式在grok中也是有效的
正则表达式库是Oniguruma,您可以在Oniguruma站点上看到完整支持的regexp语法。

自定义模式

有时logstash没有您需要的模式。为此,您有几个选择。

1.首先,您可以使用Oniguruma语法进行命名捕获,它可以匹配一段文本并将其保存为字段:

(?<field_name>the pattern here)

例如,后缀日志具有queue id10或11个字符的十六进制值。我可以像这样轻松捕获:

(?<queue_id>[0-9A-F]{10,11})

2.或者,您可以创建自定义模式文件

  • 创建一个名为patterns其中调用文件的目录extra (文件名无关紧要,但为自己命名有意义)
  • 在该文件中,将您需要的模式写为模式名称,空格,然后是该模式的正则表达式。

例如:执行上面的postfix queue id示例

# contents of ./patterns/postfix:
POSTFIX_QUEUEID [0-9A-F]{
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值