有很多事件,因为logstash过滤器部分中的字段是从消息字段中提取的,如下所示:
match => ["message", "%{type1:f1} %{type2:f2} %{type3:f3}"]
目的是将f1,f2,f3发送到一个输出,只将f1和f3发送到其他输出插件,以便:
output {
elasticsearch {
action => "index"
hosts => "localhost"
index =>"indx1-%{+YYYY-MM}"
.
}
}
output {
elasticsearch {
action => "index"
hosts => "localhost"
index =>"indx2-%{+YYYY-MM}"
}
}
问题是所有事件都涉及到每个输出插件,但我想处理哪些事件发送到哪个输出插件。是否可以这样做?
答案 0 :(得分:0)
我通过使用filebeat将数据转发到logstash找到了解决方案。 如果运行filebeat的两个instancea和一个logstash实例,则每个filebeat将输入数据转发到同一个logstash但具有不同的类型,如:
document_type: type1
在logstash中,使用if子句:
来确定适当的过滤器和输出filter {
if [type] == "type1" {
}
else {
}
}
output {
if [type] == "type1" {
elasticsearch {
action => "index"
hosts => "localhost"
index => "%{type}-%{+YYYY.MM}"
}
}
else {
elasticsearch {
action => "index"
hosts => "localhost"
index => "%{type}-%{+YYYY.MM}"
}
}
}
答案 1 :(得分:0)
如果“过滤器”部分中有两个不同的匹配模式,则可以为每个匹配添加特定的“标记”。然后在输出部分使用这样的东西:
if "matchtype1" in [tags] {
elasticsearch {
hosts => "localhost"
index => "indxtype1-%{+YYYY.MM}"
}
}
if "matchtype2" in [tags]{
elasticsearch {
hosts => "localhost"
index => "indxtype2-%{+YYYY.MM}"
}
}