Logstash条件输出到elasticsearch(每个filebeat主机名的索引)

时间:2017-05-11 11:39:21

标签: elasticsearch logstash logstash-grok logstash-configuration

我有几个安装了filebeat的Web服务器,我希望每个主机有多个索引。

我当前的配置显示为

input {
  beats {
    ports => 1337
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}"}
  }
  geoip {
    source => "clientip"
  }
}

output {
  elasticsearch {
  if [beat][hostname] == "luna"
  {
         hosts => "10.0.1.1:9200"
         manage_template => true
         index => "lunaindex-%{+YYYY.MM.dd}"
         document_type => "apache"
  }
  }
}

然而,上述结果导致

  

给定的配置无效。原因:预期的一个#,=>在   第22行,第6列(字节346)

这是if语句发生的地方。有什么帮助吗?

我希望以嵌套格式将上述内容作为

if [beat][hostname] == "lina"
{
index = lina
}
else if [beat][hostname] == "lona"
{
index = lona
}

等。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

要访问任何内部字段,您必须使用%{}将其括起来。

试试这个

%{[beat][hostname]}

有关详细说明,请参阅this

更新:

将%{[beat] [hostname]}与==一起使用将无效,请尝试

if "lina" in [beat][hostname]{
    index = lina
}

答案 1 :(得分:1)

线程很旧,但希望有人会发现它有用。插件定义不允许使用条件,因此会出现错误。条件必须包括整个定义,如下所示。另外,有关详细信息,请参见documentation

output {
    if [beat][hostname] == "luna" {
        elasticsearch {
            hosts => "10.0.1.1:9200"
            manage_template => true
            index => "lunaindex-%{+YYYY.MM.dd}"
            document_type => "apache"
        }
    } else{
       elasticsearch {
            // alternate configuration
       }
    }
}