如何将不同的logstash事件发送到不同的输出

时间:2017-06-10 20:09:05

标签: elasticsearch logstash

有很多事件,因为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}"   
    }
  }

问题是所有事件都涉及到每个输出插件,但我想处理哪些事件发送到哪个输出插件。是否可以这样做?

2 个答案:

答案 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}"
    }
}