我的logstash ruby过滤器代码如下所示。
ruby {
code => "jsondata = event.get('[json]')
puts jsondata
jsondata.to_hash
jsondata.each { |key, value|
puts key
puts value
event.set(['json']['#{key}']['command_ip'], key)
}
"
}
我的json字符串是
{
"182.1xx.xx.xx": {
"status": "Failed",
"result": "Error String"
},
"192.1xx.xx.xx": {
"status": "Success"
}
}
我需要最终结果应该是这样的。如何将键值插入json块内部。
{
"182.1xx.xx.xx": {
"host" : "182.1xx.xx.xx"
"status": "Failed",
"result": "Error String"
},
"192.1xx.xx.xx": {
"host" : "192.1xx.xx.xx"
"status": "Success"
}
}
但是当我尝试插入我可以从json键中提取的主机值时,它抛出了异常,因为“发生了Ruby异常:没有将String隐式转换为Integer”。
请帮我解决这个问题。
答案 0 :(得分:0)
一般来说,如果您收到的活动不是您要尝试取消引用的字段,则会导致此类错误。如果用:
包围ruby过滤器if [json] {
// ruby filter here
}
错误可能会消失。即使您的源数据始终具有填充的值,我也会遇到您在过滤器中获得可能不期望的事件的情况。