美文网首页
Logstash Filter(一)Grok

Logstash Filter(一)Grok

作者: 我是一名搬运工 | 来源:发表于2019-08-04 19:42 被阅读0次

Grok可以解析任何格式的文本,他是目前 logstash 中解析非结构化日志数据最好的方式,它可以从非结构化的日志中,解析出结构化的字段。

1、基本语法

Grok 的语法规则是:

%{语法 : 语义}

“语法”指的就是匹配的模式,例如使用 NUMBER 模式可以匹配出数字,IP 则会匹配出 127.0.0.1 这样的 IP 地址:
%{NUMBER:lasttime}%{IP:client}

默认情况下,所有“语义”都被保存成字符串,你也可以添加转换到的数据类型
%{NUMBER:lasttime:int}%{IP:client}
目前转换类型只支持 int 和 float

Logstash自带的匹配模式大概有70种,如USERNAME 、USER 、IPORHOST 、HOSTNAME等,可详见:
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

2、自定义匹配模式

Logstash自带的匹配模式毕竟有限,在实际使用时,经常需要根据文件格式的需要,自定义匹配模式。
匹配模式其实就是按照某个正则表达式进行匹配,因此自定义匹配模式,就是自定义匹配的正则表达式。

2.1 配置文件中直接定义

直接使用oniguruma语法去匹配文本片段,语法如下:

(?<field_name>the pattern here)

假设你需要匹配的文本片段为一个长度为10或11的十六进制的值,使用下列语法可以获取该片段,并把值赋予queue_id:

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

2.2 定义pattern文件

创建文件夹patterns,在此文件夹下面创建一个文件,文件名随意,比如: postfix。

# contents of ./patterns/postfix:
POSTFIX_QUEUEID [0-9A-F]{10,11}

然后将patterns file引入,告诉logstash你的自定义类型文件,以下面的event log record为例子:

55.3.244.1 GET /index.html 15824 0.043 ABC24C98567

在logstash conf.d文件夹下面创建filter conf文件,内容如下:

filter {
    grok {
        patterns_dir => ["./patterns"]
        match => {
           "message" => "%{IP:client_id_address} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:http_response_time} %{POSTFIX_QUEUEID:queue_id}" 
        }
    }
}

匹配结果如下:

client_id_address: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
http_response_time: 0.043
queue_id: ABC24C98567

推荐使用grokdebugger来写匹配模式,输入event log record,再逐步使用pattern微调切分,下方会根据你所写的模式将输入切分字段。

相关文章

网友评论

      本文标题:Logstash Filter(一)Grok

      本文链接:https://www.haomeiwen.com/subject/ynrvdctx.html