来自Filebeat的自定义字段上的Logstash条件逻辑

时间:2018-03-09 16:32:56

标签: logstash elastic-stack logstash-grok filebeat

我是ELK堆栈的新手,我首先将我的Windows Server 2012应用服务器上的IIS日志推送到使用Filebeat和Logstash的Elastic Search。

我计划扩展它,以便它还推送由我们的应用程序(而不是IIS)编写的自定义应用程序日志。要做到这一点,我需要在Logstash中区分一种类型的日志。

所以在filebeat.yml中我添加了一个名为" log_type":

的自定义字段
  type: log
  enabled: true
  paths:
     - C:\inetpub\logs\LogFiles\*\*
  fields:
    log_type: iis

在我的Logstash中,我试图根据" log_type"的值来执行一些条件逻辑。但它不起作用。如果我删除了条件逻辑,则过滤器可以工作。

filter {
  if [fields.log_type] == "iis" {
    grok {
      match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{IPORHOST:site} %{WORD:method} %{URIPATH:page} %{NOTSPACE:querystring} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clienthost} %{NOTSPACE:useragent} %{NOTSPACE:referer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:scstatus} %{NUMBER:timetaken:int}"}
    }
    date {
        match => [ "log_timestamp", "ISO8601" ]
        target => "@timestamp"
    }
  }
}

我已经搜索过并搜索过,但无法知道如何执行此操作。真的很感激一些帮助。

2 个答案:

答案 0 :(得分:1)

要访问Logstash中的字段,语法应为[fields][log_type]而不是[fields.log_type]

参考

答案 1 :(得分:1)

您的配置中是否有此行? fields_under_root: true。如果是,您可以简单地尝试[log_type],不带任何前缀。