代码之家  ›  专栏  ›  技术社区  ›  John Mc

在Filebeat的自定义字段上记录条件逻辑

  •  0
  • John Mc  · 技术社区  · 6 年前

    我是ELK stack的新手,我从使用Filebeat和Logstash将Windows Server 2012应用程序服务器上的IIS日志推送到弹性搜索开始。

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

    在filebeat中也是如此。yml我添加了一个名为“log\u type”的自定义字段:

      type: log
      enabled: true
      paths:
         - C:\inetpub\logs\LogFiles\*\*
      fields:
        log_type: iis
    

    在我的日志库中,我试图根据“log\u 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 回复  |  直到 6 年前
        1
  •  1
  •   A J    6 年前

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

    参考

        2
  •  1
  •   sammy    6 年前

    您的配置中有这一行吗? fields_under_root: true 。如果是,您可以简单地尝试 [log_type] ,没有任何前缀。