如何匹配grok中出现0次或1次的数据?

How to match a data that appears 0 or 1 times in grok?

如果有人能帮助我解决 logstash frok,我将不胜感激。

我正在尝试为以下示例创建一个 grok 定义。我的目标是将 subject 解析为一个字段。

  1. t1='t1', t2='t2', 主题='subj', t3='hoge'
  2. t1='t1'、主题='subj'、t3='hoge'
  3. t1='t1', t3='hoge'

如果 subject 始终存在,则以下工作正常。

t1=%{QS}, (%{NOTSPACE:key}=%{NOTSPACE:value}, )*subject=%{QS:subject}

但是,我需要处理 3 号样本,所以如果我如下更改 grok 定义,然后是 1 号样本。和No2。现在不工作。

t1=%{QS}, (%{NOTSPACE:key}=%{NOTSPACE:value}, )*(subject=%{QS:subject})?

是否有适用于所有示例的好的 grok 定义?

你最好的选择可能是有条件地解析主题:

if [message] =~ /subject/ {
  grok {
    match => { "message" => "subject=%{QS:subject}" }
  }
}

您仍然可以进行无条件 grok,所有比赛都将添加到活动中。