在配置中使用环境变量

edit

在配置中使用环境变量edit

您可以在配置文件中使用环境变量引用来设置部署期间需要配置的值。为此,请使用

${VAR}

其中 VAR 是环境变量的名称。

每个变量引用在启动时都会被环境变量的值替换。替换区分大小写,并且在解析 YAML 文件之前发生。对未定义变量的引用将被替换为空字符串,除非您指定了默认值或自定义错误文本。

要指定默认值,请使用

${VAR:default_value}

其中 default_value 是在环境变量未定义时使用的值。

要指定自定义错误文本,请使用

${VAR:?error_text}

其中 error_text 是在无法扩展环境变量时将附加到错误消息的自定义文本。

如果需要在配置文件中使用特殊字符,请使用 $ 来转义扩展。例如,您可以使用 $${$} 来转义 ${}

更改环境变量的值后,您需要重新启动 Packetbeat 以获取新值。

您还可以使用 -E 选项在从命令行覆盖配置设置时指定环境变量。例如

-E name=${NAME}

示例edit

以下是一些使用环境变量的配置示例,以及每个配置在替换后的样子

配置源 环境设置 替换后的配置

name: ${NAME}

export NAME=elastic

name: elastic

name: ${NAME}

未设置

name

name: ${NAME:beats}

未设置

name: beats

name: ${NAME:beats}

export NAME=elastic

name: elastic

name: ${NAME:?您需要设置 NAME 环境变量}

未设置

无。返回带有自定义文本的错误消息。

name: ${NAME:?您需要设置 NAME 环境变量}

export NAME=elastic

name: elastic

在环境变量中指定复杂对象edit

您可以使用类似 JSON 的语法在环境变量中指定复杂对象,例如列表或字典。

与 JSON 一样,字典和列表使用 {}[] 构建。但与 JSON 不同的是,该语法允许使用尾随逗号,并且字符串引号规则略有不同。字符串可以不带引号、单引号或双引号,这对于简单设置来说是一种便利,并且可以使您更轻松地在 shell 中混合使用引号用法。顶层的数组不需要括号 ([])。

例如,以下环境变量设置为一个列表

ES_HOSTS="10.45.3.2:9220,10.45.3.1:9230"

您可以在配置文件中引用此变量

output.elasticsearch:
  hosts: '${ES_HOSTS}'

当 Packetbeat 加载配置文件时,它会解析环境变量,并在读取 hosts 设置之前用指定的列表替换它。

不要使用双引号 (") 来包装正则表达式,否则反斜杠 (\) 将被解释为转义字符。