Logstash在JSON解析后删除字段

时间:2015-01-14 03:19:07

标签: json elasticsearch logstash

在Ubuntu 14.04 LTS上使用Logstash 1.4.2和ElasticSearch 1.3(我知道它不是最新的ES版本)。

我们有一个事件流,在其名为“message”的字段中包含JSON。

我们想用该字段的JSON替换事件字段(如果已找到)。

如果找到并解析了,我们还想删除ORIGINAL“message”字段(包含JSON字符串的字段)。

问题是字段文本中的JSON对象可以定义一个新的“消息”字段,我们必须保留它。

以下内容在解析之后始终会删除“message”字段:

json {
  source => "message"
  remove_field => [ "message" ]
}

哪个错误,我们希望保留它,以防原始“消息”字段的值中有“消息”字段。

我尝试了以下技巧,但它似乎仍然从结果中删除了“消息”字段:

mutate {
  rename => [ "message", "___temp_logstash_filter_message___" ]
}
json {
  source => "___temp_logstash_filter_message___"
}
mutate {
  remove_field => [ "___temp_logstash_filter_message___" ]
}

即。我尝试将原始“消息”字段重命名为任意内部名称,我不希望在输入值中出现,使用该临时名称作为源解析JSON字符串,然后删除重命名的原始字段。

这样我希望区分“原始”消息字段和可能包含在其JSON值中的任何“消息”字段。但这似乎没有什么区别 - 结果中仍然缺少“消息”字段。

有没有办法达到我的需要?

感谢。

1 个答案:

答案 0 :(得分:0)

不是重命名字段,而是将第一个字段复制到新字段中。

这可以通过以下方式完成:

filter {
    ...
    ruby {
        code => "event['new_field'] = event['old_field']"
    }
    ...
}