如何让logstash删除与一组正则表达式不匹配的所有事件?

时间:2014-12-12 12:09:49

标签: logstash

我正在尝试将事件消息与几个正则表达式进行匹配。我打算使用grep过滤器,但是它已被弃用了,所以我正试着用否定来放弃。

我正在寻找的功能是删除所有事件,除非消息与几个正则表达式匹配。

过滤器波纹管不起作用,但单独测试两个表达式都能正常工作。 我错过了什么?

filter {    
    if ([message] !~ ' \[critical\]:  ' or [message] !~ '\[crit\]: ') {
        drop { }
    }
}

3 个答案:

答案 0 :(得分:13)

我正在阅读更多内容并继续使用grok绘制事件,添加标记并最终删除它们,如果标记不存在:

filter {
  grok {
    add_tag => [ "valid" ]
    match => [ 
      "message", ".+ \[critical\]: ?(.+)",
      "message", ".+ \[crit\]: ?(.+) ",
      "message", '.+ (Deadlock found.+) ',
      "message", "(.+: Could not record email: .+) "
    ]
  }

  if "valid" not in [tags] {            
    drop { }
  }

  mutate {
    remove_tag => [ "valid" ]
  }
} 

答案 1 :(得分:6)

if "_grokparsefailure" in [tags] {
  drop {}
}

答案 2 :(得分:3)

您在条件中使用正则表达式,但没有以正确的格式传递参数。该文件显示了这一点:

if [status] =~ /^5\d\d/ {
  nagios { ...  }
} 

请注意,正则表达式没有引用,并用斜杠包围。