Logstash output::stdout 忽略条件语句

Logstash output::stdout ignores conditional statement

我遇到了一个问题,因为如果 DEBUG 环境变量设置为 true,我想让 logstash(版本 7.11.1)另外将输出重定向到 stdout。但似乎,只要在 output 部分的任何位置定义了此插件,它就会一直将输出发送到 stdout

output {
  if [@metadata][service] == "application" {
    elasticsearch {
      hosts => "${ELASTICSEARCH_HOST}"
      manage_template => false
      index => "app-%{+YYYY.MM.dd}"
    }
  }

  if "[${DEBUG}]" == "true" {
    stdout {}
  }
}

我已经尝试过其他永远不可能的语句 true,但它总是打印到标准输出。

我是不是做错了什么,或者这是 logstash 的标准?

[更新]

显然,docker 图像 (logstash:7.11.1) 中有默认的 logstash.conf 文件,默认包含 output { stdout {} }。这就是为什么我的 stdout.

总是收到提要

无论如何,在覆盖 logstash.conf 之后,我遇到了使用下面的答案很容易解决的问题。

谢谢!

似乎还不支持条件中的环境变量 (https://github.com/elastic/logstash/issues/5115)。解决方法是将 DEBUG env var 分配给元数据字段,然后在条件中使用该元数据字段。例如,

filter {
  mutate {
    add_field => { "[@metadata][debug]" => "${DEBUG}" }
  }
}

output {
  ...
  if [@metadata][debug] == "true" {
    stdout {}
  }
}

不支持在条件中引用环境变量。 github 上有一个 open issue 请求它。它自五年前开放以来一直没有得到解决,我不希望这种情况会改变。

解决方法是在过滤器中引用环境变量。

filter { mutate { add_field => { "[@metadata][debug]" => "${DEBUG}" } } }

然后在条件

中引用它
if [@metadata][debug] == "true" { ...