Logstash 不处理 docker 容器中 grok 模式中的零长度正则表达式

Logstash does not process zero-length regexs in grok pattern in docker container

我必须在 Grok 模式中使用零长度正则表达式。

我已经在 online grok constructor 中测试过了。有效。

但同样的模式在我的 docker 容器中不起作用。我在 Logstash v6.6.1、v7.3.0 中测试过。 我还尝试了不同的正则表达式:.{0}, ^$.

日志示例:

17:16:09,691 信息 blablabla

Logstash 模式

%{TIME:time} %{LOGLEVEL:severity} %{GREEDYDATA:message}(?<zero_length_field>())

Grok 构造函数结果。预计

MATCHED
time    17:16:09,691
severity    INFO
message blablabla
zero_length_field 

Stdout 生成 docker 容器

   "severity" => "info",
   "time" => 17:16:09,691
   "version" => "0.3.0",
   "message" => " blablabla",

您需要将keep_empty_captures设置为true,因为by default,它设置为false:

keep_empty_captures
- Value type is boolean
- Default value is false
If true, keep empty captures as event fields.

所以,使用

grok { 
  keep_empty_captures => true
  match => { "message" => "%{TIME:time} %{LOGLEVEL:severity} %{GREEDYDATA:message}(?<zero_length_field>)"}
}