grokedit
Version: 3.3.1
Released on: 2016-12-26
Changelog
解析任意文本并构造它:
Grok 是当前 最好的方式在logstash 来解析非结构化日志数据到一些结构化和可查询的
这个工具对于syslog logs是完美的, apache和其他webserver日志,mysqllogs 和通常的,
任何日志格式是对人可读的
Grok 基础:
Grok 通过结合文本模式来匹配你的日志
grok 模式是 %{SYNTAX:SEMANTIC}
语法是 模式的名字 会匹配你的文本,比如,3.44 通过NUMBER 模式来匹配
55.3.244.1 会通过一个IP模式匹配
语义是识别你给定的一个被匹配的文本片段。
比如,3.44 可以是一个事件的持续事件,这样你可以称为它一个简单的持续事件
此外,一个字符串55.3.244.1 可能客户端发出的请求
在上述的例子中,你获得的过滤器是这个样子:
%{NUMBER:duration} %{IP:client}
你可以增加一个数据类型转换到你的Grok 模式。
默认 所有的语义都保存为字符串。
如果你希望转一个语义的数据类型,比如改变一个字符串为一个整型 然后 在后面为目标数据类型。
比如 %{NUMBER:num:int} 转换num语义从一个字符串为一个整型。
例子:
55.3.244.1 GET /index.html 15824 0.043
The pattern for this could be:
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
更现实的例子,让我们从文件读取这些日志:
input {
file {
path => "/var/log/http.log"
}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}
}
正则表达式:
Grok 基于正则表达式,因此任何正则表达式是正确的在grok里。
正则表达式库是 Oniguruma
Custom Patterns
自定义模式:
有时候 logstash 没有你需要的模式,为此,你有一些选项:
1.你可以使用Oniguruma 语法用于捕获让你匹配的文本部分 保存它作为一个字段:
(?<field_name>the pattern here)
比如,后缀日志有一个队列id 是10或者11字符的十六进制,你可以像这样轻易的捕获:
(?<queue_id>[0-9A-F]{10,11})
或者,你可以创建自定义模式文件:
创建一个目录 名为pattern 里面文件称为额外的(文件名不重要,但命名得有意义)
在该文件,写下你需要的模式
简介:
详情:
add_field
如果第一个filter是成功的,增加另外的任意的字段到这个事件。
字段名字可以是动态的包含事件的部分 使用 %{field}.
Example:
filter {
grok {
add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
}
}
# You can also add multiple fields at once:
filter {
grok {
add_field => {
"foo_%{somefield}" => "Hello world, from %{host}"
"new_field" => "new_static_value"
}
}
}
如果event 有字段 "somefield" == "hello" 这个过滤器,成功,会增加字段foo_hello 如果它是存在的,
add_tag
如果这个过滤器成功,增加任意的tags到这个事件。Tag 可以是动态的
包含事件的部分 使用%{field} syntax.
Example:
filter {
grok {
add_tag => [ "foo_%{somefield}" ]
}
}
# You can also add multiple tags at once:
filter {
grok {
add_tag => [ "foo_%{somefield}", "taggedy_tag"]
}
}
break_on_match:
在第一次匹配后终止,第一次成功匹配通过grok 会导致filter 完成。
如果你需要grok 尝试所有的模式,设置为false