Grok 预定义字段和自定义字段

2019-05-07 0 By admin

在管理 Logstash 服务时,我们会接触到很多其提供的插件。其中最常用到的插件之一Grok,帮助我们将文本内容按行处理,分割为多个字段;实现数据的格式化。
另外grok 默认内置了很多预定义字段类型,减少了我们自己编写匹配模式的时间和精力,也提高了字段匹配的精准度。
预定义字段类型:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

一、预定义字段常规使用

一般我们使用 grok 提供的预定义字段,就可以解决大多数需求了。使用方式:
%{INT:thenumber} 匹配到INT类型的内容,赋值给thenumber。

二、自定义正则匹配类型

Grok位于正则表达式之上,所以任何正则表达式在grok中都是有效的。正则表达式库是Oniguruma,您可以在Oniguruma网站上看到完整支持的regexp语法。
一般情况下,Grok提供的字段类型已经足够我们使用了;但是当我们有特殊需求的时候,我们还是会需要自定义匹配字段类型。

1、直接捕获匹配内容到字段

(?<field_name>the pattern string)
例如:
(?<info_log>info:%{NOTSPACE}) 匹配以“info:”开始的没有空格的字符串;匹配成功后,包括“info:”一起,赋值给info_log
直接使用正则捕获匹配内容,非常灵活;比如可以设置一个匹配多个预定义字符的字段。

2、创建自定义patterns文件

创建patterns文件,将自定义的字段写入到文件中,并在grok插件里使用patterns_dir参数加载这个目录。

三、Grok 插件的配置参数说明

1、break_on_match
match可以一次设定多组,预设会依照顺序设定处理,如果日志满足设定条件,则会终止向下处理。但有的时候我们会希望让Logstash跑完所有的设定,这时可以将break_on_match设为false。
2、keep_empty_captures
如果为true,捕获失败的字段将设置为空值
3、match
字段=》值匹配
4、overwrite
设定重写执行字段,字段将使用新的值覆盖旧的值。
5、patterns_dir
一些复杂的正则表达式,不适合直接写到filter中,可以指定一个文件夹,用来专门保存正则表达式的文件,需要注意的是该文件夹中的所有文件中的正则表达式都会被依次加载,包括备份文件。
6、patterns_file_glob
针对patterns_dir属性中指定的文件夹里哪些正则文件,可以在这个filter中生效,需要本属性来指定。默认值“*”是指所有正则文件都生效。
7、ag_on_failure
没有成功匹配时,将值附加到字段。
8、tag_on_timeout
如果Grok正则表达式超时,则应用标记。
9、timeout_millis
尝试在这段时间后终止正则表达式。如果应用了多个模式,则这适用于每个模式。这将永远不会提前超时,但超时可能需要一些时间。实际的超时时间是基于250ms量化的近似值。设置为0以禁用超时。