1

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

我已经在 在线 grok 构造函数中对其进行了测试。有用。

但是相同的模式在我的 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 

标准输出导致 docker 容器

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

4

1 回答 1

4

您需要设置keep_empty_captures默认情况下,它设置true为:false

keep_empty_captures
- 值类型为布尔值
- 默认值为false
If true,将空捕获保留为事件字段。

所以,使用

grok { 
  keep_empty_captures => true
  match => { "message" => "%{TIME:time} %{LOGLEVEL:severity} %{GREEDYDATA:message}(?<zero_length_field>)"}
}
于 2019-08-22T11:14:48.630 回答