Logstash:使用环境变量

时间:2017-09-07 09:20:57

标签: elasticsearch logstash

我试图按照文档说明 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"]

它有效。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

根据https://www.elastic.co/guide/en/logstash/current/environment-variables.html此文件,$ {var}仅适用于情况。

  • port => " $ {TCP_PORT}" ,导出TCP_PORT = 12345
  • add_tag => [" tag1"," $ {ENV_TAG}" ],导出ENV_TAG =" tag2"
  • add_field => {" my_path的" => " $ {HOME} /file.log" ,export HOME =" / path"

但是在您的代码中,您在下面使用了$ {var}。 '路径' =>此处/ log-中的[" / share / log - $ {INPUT_DATE} .json"]也必须是变量。 导出INPUT_DATE =" log-2017.09.07.json"
根据文档示例,他们将此功能用于少数事件,而不是针对所有情况。

答案 1 :(得分:0)

  1. [如果您的logstash在docker容器中],则在docker-compose.yml中将变量设置为默认值(仅是其名称):

    环境:       -INPUT_DATE

  2. 您需要运行export INPUT_DATE="2017.09.07"并在同一命令行会话中启动docker。