我已尝试遵循文档 https://www.elastic.co/guide/en/logstash/current/environment-variables.html 但似乎不起作用。
我有一堆日志文件要处理。 假设我有一个输入文件 /share/log-2017.09.07.json,我正在尝试使用logstash 进行处理。
我的logstash配置文件的摘录如下:
input { file {
'exclude' => ['*.gz']
'path' => ["/share/log-${INPUT_DATE}.json"]
'type' => 'json'
start_position => "beginning"
codec => json
sincedb_path => "/dev/null"
}
}
我按如下方式启动logstash:
export INPUT_DATE="2017.09.07"
logstash -f myconfigfile.conf
logstash 似乎找不到文件 /share/log-2017.09.03.json。 当我更换时
'path' => ["/share/log-${INPUT_DATE}.json"]
由
'path' => ["/share/log-2017.09.07.json"]
它有效。
我做错了什么?
根据 https://www.elastic.co/guide/en/logstash/current/environment-variables.html 此文档 ${var} 仅在以下情况下有效。
但是在您的代码中您在下面的位置使用了 ${var} 。
'path' => ["/share/log-${INPUT_DATE}.json"] 这里的 /log- 也必须在变量中。
导出 INPUT_DATE="log-2017.09.07.json"
根据文档示例,他们将此函数用于少数事件,而不是所有情况。
[如果您的logstash位于docker容器中]在docker-compose.yml中将变量设置为默认值(仅其名称):
环境: - 输入日期
您需要运行
export INPUT_DATE="2017.09.07"
并在同一命令行会话中启动 docker。替换变量
INPUT_DATE
未在中定义
这可能意味着 Logstash .conf 文件无法访问从外部 shell 脚本设置的环境变量。