logstash filter plugin
Posted kaka_jon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logstash filter plugin相关的知识,希望对你有一定的参考价值。
1. 基本语法
%{NUMBER:duration} %{IP:client}
2. 支持的数据类型
默认会把所有的匹配都当作字符串,比如0.043, 想要转成浮点数,可以%{NUMBER:num:float}匹配,目前只支持int和float两种。
3. 举例说明
有下面一段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}" }
}
}
这样匹配过滤后,将会额外增加下面的字段:
client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043
4. 自定义模式
有时候logstash没有适合的模式,就需要自定义如下,格式如下:
(?<field_name>the pattern here)
如匹配nginx中的访问时间:2017/07/29 12:12:04
自定义模式:(?<DateTime>%{YEAR}[./]%{MONTHNUM}[./]%{MONTHDAY} %{TIME})
匹配过滤后就会增加字段:DateTime: 2017/07/29 12:12:04
5. 自定义pattern文件
我们都知道logstash自带了许多匹配模式(/home/elk/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns/grok-patterns),
但是我们也可以自定义自己的pattern模式
5.1 创建目录patterns
5.2 创建一个文件,名字随意,比如extra
5.3 比如我们要匹配一个字段queue_id,那extra文件的内容如下
POSTFIX_QUEUEID [0-9A-F]{10,11}
5.4 然后我们在filter中就可以引用POSTFIX_QUEUEID模式来匹配了
filter {
grok {
patterns_dir => ["./patterns"]
match => { "message" => "%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}" }
}
}
日志:Jan 1 06:25:43 mailserver14 postfix/cleanup[21403]: BEF25A72965: message-id=<[email protected]>
匹配过滤后将输出下面字段:
timestamp: Jan 1 06:25:43
logsource: mailserver14
program: postfix/cleanup
pid: 21403
ueue_id: BEF25A72965
syslog_message: message-id=<[email protected]>
以上是关于logstash filter plugin的主要内容,如果未能解决你的问题,请参考以下文章
小姐姐教你定制一个Logstash Java Filter~
logstash 离线安装logstash-filter-json_encode 插件
Logstash之Logstash inputs(file和redis插件)Logstash outputs和Filter plugins