Logstash 过滤掉嵌套 json 数组中键的空值

Logstash filter out values with null values for a key in a nested json array

我有一个相当广泛的 Logstash 管道,以 Json 结尾:

{
    "keyA": 1,
    "keyB": "sample",
    "arrayKey": [
        {
            "key": "data"
        },
        {
            "key": null
        }
    ]
}

我想要实现的是过滤 "arrayKey" 并删除 "key" 值为 null 的对象。

试过这个没有运气:

filter {
    ruby {
      code => "
        event.get('arrayKey').each do |key|
          [key].delete_if do |keyCandidate|
            if [keyCandidate][key] != nil
              true
            end
          end
        end
      "
    }
}

这没有从 |hash|:|Int| 中找到隐式转换器错误。我如何实现这一目标?有更简单的方法吗?

正如 Aleksei 所指出的,您可以使用 reject 创建不包含 [key] 为 null 的条目的数组副本。您必须使用 event.set 覆盖 [arrayKey]

的初始值
    ruby {
        code => '
            a = event.get("arrayKey")
            if a
                event.set("arrayKey", a.reject { |x| x["key"] == nil })
            end
        '
    }