在配置中使用环境变量

编辑

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

${VAR}

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

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

要指定默认值,请使用

${VAR:default_value}

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

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

${VAR:?error_text}

其中 error_text 是自定义文本,如果无法展开环境变量,它将添加到错误消息的前面。

如果您需要在配置文件中使用文字 ${,则可以编写 $${ 来转义展开。

更改环境变量的值后,您需要重新启动 APM Server 才能获取新值。

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

-E name=${NAME}

示例
编辑

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

配置来源 环境变量设置 替换后的配置

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

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

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

与 JSON 一样,字典和列表使用 {}[] 构建。但与 JSON 不同,该语法允许尾随逗号和略有不同的字符串引号规则。字符串可以是无引号的、单引号的或双引号的,以方便进行简单设置,并使您更容易在 shell 中混合使用引号。顶级的数组不需要括号 ([])。

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

ES_HOSTS="10.45.3.2:9220,10.45.3.1:9230"

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

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

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

选择退出复杂对象解析编辑

要选择退出此复杂对象解析行为,以便始终将环境变量解析为字符串,请将环境变量括在双引号 (") 中,并转义其中的所有双引号。

例如,给定以下配置

output.elasticsearch:
  password: '${ES_PASSWORD}'

如果预期的密码是 foo,bar"baz,为避免由于复杂对象解析导致的解析错误,应将环境变量设置为如下

ES_PASSWORD='"foo,bar\"baz"'

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