简体   繁体   English

Logstash 有条件地检查该字段是 object 吗?

[英]Logstash conditional to check that field is an object?

When I know name of one of fields in expected object, I can use当我知道预期 object 中其中一个字段的名称时,我可以使用

if [check_if_this_is_an_object][known_field_name] { # object } else { # not an object }

But I would like a way to do a general check, without known field name.但我想要一种在没有已知字段名称的情况下进行一般检查的方法。

You will need to use a ruby filter is you do not know the name of any of the fields within the object. If you just need to check one field you could use如果您不知道 object 中任何字段的名称,您将需要使用 ruby 过滤器。如果您只需要检查一个字段,您可以使用

    ruby {
        code => '
            field = event.get("foo")
            if field.respond_to? "each"
                answer = true
            elsif field.is_a? LogStash::Timestamp
                answer = true
            else
                answer = false
            end
            event.set("[@metadata][fooObject]", answer)
        '
    }

If you need to check multiple fields then use a script file.如果您需要检查多个字段,请使用脚本文件。 The script would be脚本将是

def register(params)
    @fieldName = params["field"]
end

def filter(event)
    field = event.get(@fieldName)
    if field.respond_to? "each" # Array or Hash
        answer = true
    elsif field.is_a? LogStash::Timestamp
        answer = true
    else # boolean, integer, float or string
        answer = false
    end
    event.set("[@metadata][#{@fieldName}Object]", answer)
    [event]
end

and then call it using然后调用它使用

    ruby {
        path => "/home/user/isObject.rb"
        script_params => { "field" => "foo" }
    }
    ruby {
        path => "/home/user/isObject.rb"
        script_params => { "field" => "bar" }
    }

and then you can write a conditional using [@metadata][fooObject] or [@metadata][barObject]然后您可以使用 [@metadata][fooObject] 或 [@metadata][barObject] 编写条件

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM