在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值中的任何“消息”字段。但这似乎没有什么区别 - 结果中仍然缺少“消息”字段。
有没有办法达到我的需要?
感谢。
答案 0 :(得分:0)
不是重命名字段,而是将第一个字段复制到新字段中。
这可以通过以下方式完成:
filter {
...
ruby {
code => "event['new_field'] = event['old_field']"
}
...
}