在某些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
}
}
答案 0 :(得分:2)
在filter {}部分设置一个变量(可能是mutate-> gt; add_field),然后在输出节中引用该变量,例如:
[@metadata][myField]
如果您不想将变量存储在elasticsearch中,请在两个地方使用元数据,例如:
>>