首页 文章

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

提问于
浏览
1

我有3台服务器:

  • Elasticsearch / Kibana

  • Logstash

  • Web服务器

在Web服务器上,我运行了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的Discover选项卡中的“_index”字段示例:

_index          filebeat-2018.04.06

1 回答

  • 1

    in 运算符在字符串列表上执行完全匹配 . 你需要模式匹配:

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

相关问题