Logstash mutate 添加来自 json 的所有字段
Logstash mutate add all fields from json
我正在使用 Logstash 插件 (logstash-input-rethinkdb)。
该插件获取数据库中的所有编辑并输出包含以下结构的 json 对象:
{
"db":"itjobs",
"table":"countries",
"old_val":null,
"new_val":{
"code":"USA3",
"country":"USA3",
"id":"7c8c9e4e-aa37-48f1-82a5d624cde4a3a0"
},
"@version":"1",
"@timestamp":"2016-12-19T19:54:08.263Z"
}
我将这个文档插入到 elasticsearch 中。
但问题是在弹性中我得到了相同的结构 -> new_val:{code:''}
我需要做一个过滤器或其他东西来从 new_val
中提取所有内容并将其添加到根
我试过过滤器 json
但它得到 string
并且插件已经输出 json
编辑后我需要它看起来像:
{
"db":"itjobs",
"table":"countries",
"code":"USA3",
"country":"USA3",
"id":"7c8c9e4e-aa37-48f1-82a5d624cde4a3a0"
"@version":"1",
"@timestamp":"2016-12-19T19:54:08.263Z"
}
您可以使用 ruby 过滤器:
filter {
ruby {
code => "
event['new_val'].each {|k, v|
event[k] = v
}
event.remove('new_val')
"
}
}
使用 Logstash 2.2 测试,版本 5+ 应该有所不同。
这在他们将 class Logstash::Event 更改为 API 后有效:
https://www.elastic.co/guide/en/logstash/current/event-api.html
filter {
ruby {
code => "
event.get('new_val').each {|k, v|
event.set(k,v)
}
event.remove('new_val')
"
}
}
我正在使用 Logstash 插件 (logstash-input-rethinkdb)。 该插件获取数据库中的所有编辑并输出包含以下结构的 json 对象:
{
"db":"itjobs",
"table":"countries",
"old_val":null,
"new_val":{
"code":"USA3",
"country":"USA3",
"id":"7c8c9e4e-aa37-48f1-82a5d624cde4a3a0"
},
"@version":"1",
"@timestamp":"2016-12-19T19:54:08.263Z"
}
我将这个文档插入到 elasticsearch 中。
但问题是在弹性中我得到了相同的结构 -> new_val:{code:''}
我需要做一个过滤器或其他东西来从 new_val
中提取所有内容并将其添加到根
我试过过滤器 json
但它得到 string
并且插件已经输出 json
编辑后我需要它看起来像:
{
"db":"itjobs",
"table":"countries",
"code":"USA3",
"country":"USA3",
"id":"7c8c9e4e-aa37-48f1-82a5d624cde4a3a0"
"@version":"1",
"@timestamp":"2016-12-19T19:54:08.263Z"
}
您可以使用 ruby 过滤器:
filter {
ruby {
code => "
event['new_val'].each {|k, v|
event[k] = v
}
event.remove('new_val')
"
}
}
使用 Logstash 2.2 测试,版本 5+ 应该有所不同。
这在他们将 class Logstash::Event 更改为 API 后有效: https://www.elastic.co/guide/en/logstash/current/event-api.html
filter {
ruby {
code => "
event.get('new_val').each {|k, v|
event.set(k,v)
}
event.remove('new_val')
"
}
}