Logstash:使用环境变量

问题描述 投票:0回答:3

我已尝试遵循文档 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"]

它有效。

我做错了什么?

elasticsearch logstash
3个回答
0
投票

根据 https://www.elastic.co/guide/en/logstash/current/environment-variables.html 此文档 ${var} 仅在以下情况下有效。

  • 端口=>“${TCP_PORT}”,导出TCP_PORT=12345
  • add_tag => [ "tag1", "${ENV_TAG}" ] , 导出 ENV_TAG="tag2"
  • add_field => {"my_path" => "${HOME}/file.log" , 导出 HOME="/path"

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


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

    环境: - 输入日期

  2. 您需要运行

    export INPUT_DATE="2017.09.07"
    并在同一命令行会话中启动 docker。


0
投票

替换变量

INPUT_DATE
未在

中定义
  • Logstash 秘密商店
  • 或作为环境条目
  • 并且没有给出默认值。",

这可能意味着 Logstash .conf 文件无法访问从外部 shell 脚本设置的环境变量。

© www.soinside.com 2019 - 2024. All rights reserved.