我正在使用 Logstash 将日志数据发送到 Elasticsearch(当然(,但我的一些最终用户也希望将数据发送到辅助 csv 文件,以便他们可以自己处理。我正在尝试使用环境变量来确定我们是否需要输出到辅助文件,如果是,该文件应该位于何处。
我的日志库看起来像这样:
input {
. . .
}
filter {
. . .
}
output {
elasticsearch {
. . .
}
if "${SECONDARY_OUTPUT_FILE:noval}" != "noval" {
csv {
fields => . . .
path => "${ SECONDARY_OUTPUT_FILE:noval}"
}
}
}
当SECONDARY_OUTPUT_FILE具有值时,它可以正常工作。如果没有,Logstash 会将 csv 输出写入名为"noval"的文件。我的结论是 if 语句无法与环境变量一起正常工作。
我在Windows 7机器上使用Logstash 2.3.2版本。
任何建议或见解将不胜感激。
实际上这是一个非常好的问题,正如 IrlJidel 在这个问题上提到的那样,github 上仍然有一个关于这个主题的持续增强,这个问题的解决方法是:
mutate {
add_field => { "[@metadata][SECONDARY_OUTPUT_FILE]" => "${SECONDARY_OUTPUT_FILE:noval}" }
}
if [@metadata][SECONDARY_OUTPUT_FILE] != "noval" {
csv {
fields => . . .
path => "${SECONDARY_OUTPUT_FILE}"
}
}
只是一个快速更新,因为在条件中使用变量的 Logstash 7.17 按预期工作:https://github.com/elastic/logstash/issues/5115#issuecomment-1022123571