Logstash ruby​​过滤器用于解析json并获取键字段作为值

时间:2018-03-27 13:18:34

标签: ruby logstash

我的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”。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

一般来说,如果您收到的活动不是您要尝试取消引用的字段,则会导致此类错误。如果用:

包围ruby过滤器
if [json] {
// ruby filter here
}

错误可能会消失。即使您的源数据始终具有填充的值,我也会遇到您在过滤器中获得可能不期望的事件的情况。