10 环境变量
概述
环境变量允许在不将值硬编码到配置文件中的情况下配置 Zabbix 组件。 这使得在动态环境中管理配置变得更加容易,例如 Docker,在这类环境中可以在运行时传递变量,以适应不同的设置。
在最简单的情况下,将 Zabbix 服务器的 DebugLevel 配置参数值设置为环境变量后,便可以在启动时使用它来配置服务器:
# Zabbix 服务器配置文件:
DebugLevel=${NEW_DEBUG_LEVEL}
# 启动 Zabbix 服务器:
NEW_DEBUG_LEVEL=5 /usr/sbin/zabbix_server
以下 Zabbix 组件支持环境变量:
- 服务器
- Proxy
- agent(UNIX 或 Windows)
- Agent 2(UNIX 或 Windows),包括 插件
- Web 服务
- Zabbix sender(使用 -c, --config option 时)
重要说明
- 当某个配置参数被设置为环境变量,而在运行组件时未指定该环境变量时,将使用该参数的默认值。
- 使用运行时命令时(例如,提高 agent 日志级别),必须指定之前使用过的所有环境变量。这是因为 Zabbix 组件使用其配置文件来执行运行时命令;如果省略环境变量,将使用配置参数的默认值。请参见示例。
userparameter_reload运行时命令不支持重新加载环境变量。在重新加载期间,变量会被忽略,只有具有常规值的参数会被重新加载。- 在 Zabbix 组件启动后,配置文件中使用的进程当前环境变量会被清除。这可确保子进程(例如由 Zabbix 执行的远程脚本)无法访问这些变量。但请注意,进程初始变量仍然可以被获取(例如,通过
/proc/<PID>/environ文件)。
语法
环境变量必须使用以下语法:${alphanumerics/underscores}。
变量名只能包含字母 (a-z, A-Z)、下划线 (_) 和数字 (0-9),且不能以数字开头。
不符合所需语法或与常规值组合使用的变量将被视为常规值,这可能会产生错误。
正确的变量语法:
DebugLevel=${NEW_DEBUG_LEVEL}
Hostname=${ZBX_HOSTNAME}
LogFile=${LogFile_001}
错误的变量语法:
DebugLevel=${5_DebugLevel}
Hostname=${ZBX.HOSTNAME 1}
LogFile=/${HOME}/zabbix/zabbix_server.log
在 Windows 中,环境变量名称不区分大小写。
示例
以下示例展示了如何在 Zabbix 组件中配置和使用环境变量。
示例 1:配置并测试 Zabbix agent
1. 在 agent 配置文件中设置环境变量:
Hostname=${ZBX_HOSTNAME}
ServerActive=${ServerActive}
2. 测试配置文件:
ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf --test-config
3. 使用环境变量启动 agent:
ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
使用运行时命令时(例如,提高 agent 日志级别),必须指定之前使用过的所有环境变量:
ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R log_level_increase
这是因为 agent 会使用其配置文件来执行运行时命令;如果省略环境变量,将使用配置参数的默认值。
或者,在 agent 配置文件中设置环境变量后,您也可以使其对进程可用(例如,使用 export 命令)。
这样可以降低因变量缺失或设置不正确而导致意外行为的风险。
export ZBX_HOSTNAME="New Zabbix agent"
export ServerActive=127.0.0.1
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf --test-config
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R log_level_increase
示例 2:为容器配置 Zabbix agent
如果您正在为 Zabbix 组件(例如 Zabbix agent)创建并配置自己的自定义镜像,则可以使用环境变量定义配置参数,然后使用这些变量启动容器。
1. 准备镜像时,在 agent 配置文件中设置环境变量:
Hostname=${ZBX_HOSTNAME}
BufferSize=${BUFSZ}
ListenPort=${LISTENPORT}
UserParameter=${_UsrPar01}
UserParameter=${_UsrPar02}
2. 构建容器镜像后,使用环境变量启动 agent 容器(例如 Docker):
docker run --name my-zabbix-agent -e ZBX_HOSTNAME="new-hostname" -e BUFSZ=1000 -e LISTENPORT=20050 -e _UsrPar01="key1,ls" -e _UsrPar02="key2,pwd" --init -d my-zabbix-agent:latest
3. 使用运行时命令时(例如,提高 agent 日志级别),请进入容器 shell 并执行运行时命令:
docker exec -it <containerid> sh
/usr/sbin/zabbix_agentd -R log_level_increase
userparameter_reload 运行时命令不支持重新加载环境变量。
重新加载期间,这些变量会被忽略,只有具有常规值的参数会被重新加载。