Logstash 问题与自定义字段的子字符串匹配

Logstash 问题与自定义字段的子字符串匹配

我有以下 Logstash 设置。

日志通过以下方式从 Logspout 传输到 Logstash:logspout-logstash适配器,它在日志消息中添加了几个字段,即docker.image字段。

我可以提取日志,但解析它们时遇到了麻烦。我想根据 Docker 镜像字段制作一些过滤器,下面我尝试解析和匹配nginx完整 Docker 镜像中的部分内容,这类似于dockerhubuser/nginx:tag

但是我的配置有问题,因为标签看起来不像是被创建的,消息字段看起来也不像被解析的。

以下是我目前的配置内容:

input {

    # Logspout UDP input
    udp {
        port => 5000
        type => logspout
        codec => json
    }
}

filter {

  # Nginx access logs
  if [docker.image] =~ /nginx/ {
    grok {
      match => [ "message", "%{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:agent}" ]
      add_tag => [ "nginx" ]
    }
  }
}

正则表达式不匹配吗?有没有办法检查日志是否符合我的过滤器?

答案1

我找到了解决方案。要访问 logstash 配置中的嵌套字段,我必须使用[docker][image]。因此,固定配置如下所示:

if [docker][image] =~ /nginx/ {
    grok {
      match => [ "message", "%{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:agent}" ]
      add_tag => [ "nginx" ]
    }
  }

相关内容