在配置中使用环境变量
本文档仅适用于 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:?你需要设置 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"'
请勿使用双引号 (") 将正则表达式括起来。否则,反斜杠 (\) 将被解释为转义字符。