Regular Expression

regex 正则表达式解析器使用自定义的 Ruby 正则表达式,使用名称捕获来定义哪些内容属于哪个字段名。

Fluent Bit 使用 Ruby 模式的 Onigmo 正则表达式库,您可以使用以下 Web 编辑器来测试您的表达式:

http://rubular.com/

{% hint style=”info” %} 重要提示: 如果您使用的是 tail 输入插件,请不要尝试在正则表达式中添加多行支持,因为每行都作为单独的实例进行处理。而是使用 Tail Multiline 支持的多行功能。 {% endhint %}

注意: 了解正则表达式的工作原理超出了本内容的范围

从配置的角度来看,当 format 配置项设置为 regex 时,Regex 配置项也必须存在。

以下解析器配置示例提供了可应用于 Apache HTTP Server 日志记录的规则:

  1. [PARSER]
  2. Name apache
  3. Format regex
  4. Regex ^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$
  5. Time_Key time
  6. Time_Format %d/%b/%Y:%H:%M:%S %z

例如,使用以下 Apache HTTP Server 日志记录:

  1. 192.168.2.20 - - [29/Jul/2015:10:27:10 -0300] "GET /cgi-bin/try/ HTTP/1.0" 200 3395

以上内容没有为 Fluent Bit 提供结构化消息,但是启用适当的解析器后,我们可以对其进行结构化表示:

  1. [1154104030, {"host"=>"192.168.2.20",
  2. "user"=>"-",
  3. "method"=>"GET",
  4. "path"=>"/cgi-bin/try/",
  5. "code"=>"200",
  6. "size"=>"3395",
  7. "referer"=>"",
  8. "agent"=>""
  9. }
  10. ]

一个常见的陷阱是,字段名中不能使用字母,数字和下划线以外的字符。例如,像 (?<user-name>.*) 之类的字段名将由于包含无效字符(-)而导致错误。

为了理解,学习和测试像上述示例一样的正则表达式,建议您尝试如下 Ruby 正则表达式编辑器: http://rubular.com/r/X7BH0M4Ivm