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

Logstash conditional logic on custom field from Filebeat

我是 ELK 堆栈的新手,我首先使用 Filebeat 和 Logstash 将我的 Windows Server 2012 应用程序服务器上的 IIS 日志推送到 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"
    }
  }
}

我搜索了又搜索,但找不到如何执行此操作。非常感谢您的帮助。

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

参考

你的配置中有这一行吗? fields_under_root: true。如果是,您可以直接 [log_type] 尝试,不带任何前缀。