共计 1263 个字符,预计需要花费 4 分钟才能阅读完成。
Logstash Filter Plugin Grok
Logstash 提供了一系列 filter 过滤 plugin 来处理收集到的 log event,根据 log event 的特征去切分所需要的字段,方便 kibana 做 visualize 和 dashboard 的 data analysis。所有 logstash 支持的 event 切分插件查看这里。下面我们主要讲 grok 切分。
Grok 基本介绍
1.Grok 使用文本片段切分的方式来切分日志事件,语法如下:
SYNTAX 代表匹配值的类型,例如,0.11 可以 NUMBER 类型所匹配,10.222.22.25 可以使用 IP 匹配。
SEMANTIC 表示存储该值的一个变量声明,它会存储在 elasticsearch 当中方便 kibana 做字段搜索和统计,你可以将一个 IP 定义为客户端 IP 地址 client_ip_address,eg:%{IP:client_ip_address},所匹配到的值就会存储到 client_ip_address 这个字段里边,类似数据库的列名,也可以把 event log 中的数字当成数字类型存储在一个指定的变量当中,比如响应时间 http_response_time,假设 event log record 如下:
可以使用如下 grok pattern 来匹配这种记录
在 logstash conf.d 文件夹下面创建 filter conf 文件,内容如下
以下是 filter 结果
grok 内置的默认类型有很多种,读者可以自行查看。
2. 使用自定义类型 更多时候 logstash grok 没办法提供你所需要的匹配类型,这个时候我们可以使用自定义。
第一种,直接使用 oniguruma 语法去匹配文本片段,语法如下
假设你需要匹配的文本片段为一个长度为 10 或 11 的十六进制的值,使用下列语法可以获取该片段,并把值赋予 queue_id
第二种,创建自定义 pattern 文件
创建文件夹 patterns,在此文件夹下面创建一个文件,文件名随意,eg: postfix
然后将 patterns file 引入,告诉 logstash 你的自定义类型文件,以下面的 event log record 为例子:
在 logstash conf.d 文件夹下面创建 filter conf 文件,内容如下
匹配结果如下:
推荐使用 grokdebugger 来写匹配模式,输入 event log record,再逐步使用 pattern 微调切分,下方会根据你所写的模式将输入切分字段。
3. 其他常用内置方法
add_field: 当 pattern 匹配切分成功之后,可以动态的对某些字段进行特定的修改或者添加新的字段,使用 %{fieldName}来获取字段的值 Exmaple:
如果 somefield=dad,logstash 会将 foo_dad 新字段加入 elasticsearch,并将值 Hello world, dad 赋予该字段
add_tag: 为经过 filter 或者匹配成功的 event 添加标签 Example:
马哥想听你动人的成长故事,所以发起了一个征文活动。
点击阅读原文或长按二维码添加我的个人微信,立刻了解详情。