logstash块中的条件或变量

时间:2015-11-09 10:59:17

标签: logstash logstash-configuration

在某些logstash配置中,我想有条件地在配置块中设置一个字段的值,而不必重复整个块。

例如,我有两个http输出设置非常相似:

output {
    if "foo" in [tags] {
        http {
            url => "http://example.com/x"
            http_method => "post"
            follow_redirects => true
            keepalive => false
            connect_timeout => 20
            cookies => true
        }
    } else {
        http {
            url => "http://example.com/y"
            http_method => "post"
            follow_redirects => true
            keepalive => false
            connect_timeout => 20
            cookies => true
        }
    }
}

什么是避免重复这两个块内容的最佳方法,只是改变我感兴趣的单个字段?我希望我可以设置一个变量并在块中使用它,或者在块中使用if,但是找不到任何一个例子。

我一直在寻找类似以下的东西(这是无效的配置):

output {
    http {
        if "foo" in [tags] {
            url => "http://example.com/x"
        } else {
            url => "http://example.com/y"
        }
        http_method => "post"
        follow_redirects => true
        keepalive => false
        connect_timeout => 20
        cookies => true
    }
}

1 个答案:

答案 0 :(得分:2)

在filter {}部分设置一个变量(可能是mutate-> gt; add_field),然后在输出节中引用该变量,例如:

[@metadata][myField]

如果您不想将变量存储在elasticsearch中,请在两个地方使用元数据,例如:

>>