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

时间:2017-08-07 02:23:55

标签: logstash logstash-grok

如果有人能帮我解决问题,我感激不尽。

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

  1. t1 ='t1',t2 ='t2',subject ='subj',t3 ='hoge'
  2. t1 ='t1',subject ='subj',t3 ='hoge'
  3. t1 ='t1',t3 ='hoge'
  4. 如果主题始终存在,则以下工作正常。

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

    但是,我需要处理3号样本,所以如果我改变如下的grok定义,那么样本No1。和No2。现在不行。

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

    是否有适用于所有样品的良好的grok定义?

1 个答案:

答案 0 :(得分:1)

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

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

您仍然可以执行无条件grok,所有匹配都会添加到活动中。