如何向我的 logstash grok 过滤器添加条件?

How to add condition to my logstash grok filter?

我有 3 个服务器:

  1. 弹性搜索/Kibana
  2. Logstash
  3. 网络服务器

在网络服务器上,我有 filebeat 和 metricbeat 运行。我希望 filebeat 发送的 apache 日志被 grok'd,而不是 metricbeat 系统日志。

在我的 logstash 服务器上,我在 /etc/logstash/conf.d/ 中有一个名为 "apache-filter.conf" 的文件,这是该文件工作时的样子:

filter {
    grok {
    match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    grok {
    match => { "message" => "%{IP:client}"}
    }
    geoip {
    source => "client"
    }
}

然后我添加了一个条件,但它坏了(数据被传递到 elasticsearch raw 没有应用过滤器):

filter {
  if [filebeat] in [_index] {
    grok {
    match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    grok {
    match => { "message" => "%{IP:client}"}
    }
    geoip {
    source => "client"
    }
  }
}

我做错了什么?

下面是 Kibana 中“发现”选项卡中的“_index”字段示例:

_index          filebeat-2018.04.06

in 运算符对字符串列表进行精确匹配。您需要模式匹配:

if ([_index] =~ /filebeat/) {
  // filters here
}