如果它与某个值不匹配,是否可以使用Logstash remove_field?

时间:2015-04-08 14:04:44

标签: regex logstash logstash-grok

如果字段不包含" _log",我们希望通过删除字段来使用Logstash过滤日志。 remove_field语法可用,但仅适用于删除符合特定条件的字段。

filter {
  grok {
    remove_field => [ "log_" ]
  }
}
# This works for removing the log_ field, we want to remove everything that does NOT match log_.

如果字段与某个条件不匹配,是否也可以删除该字段?

我们尝试使用正是这样做的正则表达式,但这不起作用(它是否记录在某处你不能使用正则表达式?)。删除所有其他字段也是一种选择,但需要付出更多努力。我们希望有人可以帮助我们适应所有不包含" log _"。

的字段

2 个答案:

答案 0 :(得分:3)

你可以做的一个方法是......

  • 标记与条件不匹配的字段(使用tag_on_failure
  • 删除上述标记字段

实施例: -

grok {
    match => ["log_"]
    tag_on_failure => ["_todelete"]
}

然后

grok {
    remove_tag => [ "_todelete" ]
}

答案 1 :(得分:2)

正则表达式应该有效:

filter {
  if [field] !~ /pattern/ {
    mutate {
      remove_field => [ "field" ]
    }
  }
}