在配置中使用环境变量
Elastic Stack
此文档仅适用于 APM Server 二进制文件用户。
您可以在配置文件中使用环境变量引用来设置需要在部署期间配置的值。为此,请使用
${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:?You need to set the NAME environment variable} |
无设置 | 无。 返回一个错误消息,该消息以自定义文本作为前缀。 |
name: ${NAME:?You need to set the NAME environment variable} |
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"'
不要使用双引号 ("
) 来包装正则表达式。 否则,反斜杠 (\
) 将被解释为转义字符。