logstash grok

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 语法用于捕获让你匹配的文本部分 保存它作为一个字段:

(?the pattern here)


比如,后缀日志有一个队列id 是10或者11字符的十六进制,你可以像这样轻易的捕获:


(?[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

你可能感兴趣的:(logstash,自定义正则)