Logstash配置变量扩展

时间:2018-07-03 07:13:37

标签: logstash filebeat

我在使用logstash过滤器时遇到了一个奇怪的问题,该问题一直持续到昨天。

这是我的.conf文件:

input {
  beats {
    port => 5044
  }
}

filter {
  if "access.log" in [source] {
    grok {
      match => { "message" => "%{GREEDYDATA:messagebefore}\[%{HTTPDATE:real_date}\]\ %{GREEDYDATA:messageafter}" }
    }

    mutate {
      replace => { "[message]" => "%{messagebefore} %{messageafter}" }
      remove_field => [ "messagebefore" ]
      remove_field => [ "messageafter" ]
    }

    date {
      match => [ "real_date", "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
  }
}

问题在于,在输出中,派生变量%messagebefore和%messageafter作为文字文本而不是内容进行传递。

示例:

source:/var/log/nginx/access.log message:%{messagebefore} %{messageafter}...

奇怪的是,这在昨天下午之前运行良好。我也很欣赏这可能不是处理nginx日志的最佳方法,但是我仅以它为例,因为它也会影响我的所有其他配置文件。

我的环境:

ELK堆栈在Centos 7上作为docker容器运行,源自docker.io/sebp/elk。

在Centos 7客户端上运行的Filebeat。

有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题,并在此处发布以防有人遇到相同的问题。

在构建Docker容器时,我无意中遗忘了另一个.conf文件,其中也包含对access.log的引用。这两个.conf文件在logstash处理这两个文件时发生冲突。我删除了错误的文件,它全部开始工作。