环境变量

概述

环境变量允许在不将值硬编码到配置文件中的情况下配置 Zabbix 组件。 这使得在动态环境中(例如 Docker)更容易管理配置,因为可以在运行时传递变量,以适应不同的设置。

在最简单的情况下,只需将 Zabbix 服务器 DebugLevel 配置参数的值设置为一个环境变量,然后就可以在启动时用它来配置服务器:

# Zabbix server 配置文件:
DebugLevel=${NEW_DEBUG_LEVEL}

# 启动 Zabbix server:
NEW_DEBUG_LEVEL=5 /usr/sbin/zabbix_server

以下 Zabbix 组件支持环境变量:

重要说明

  • 当某个配置参数设置为环境变量,而在运行该组件时未指定该环境变量时,将使用该参数的默认值。
  • 使用 运行时命令 时(例如,提高 agent 日志级别),必须指定之前使用过的任何环境变量。这是因为 Zabbix 组件会使用其配置文件来执行运行时命令;如果省略环境变量,则会使用配置参数的默认值。请参见 示例
  • userparameter_reload 运行时命令 不支持重新加载环境变量。在重新加载期间,变量会被忽略,只会重新加载具有常规值的参数。
  • 在 Zabbix 组件启动后,配置文件中使用的当前进程环境变量会被清除。这样可以确保子进程(例如,Zabbix 执行的远程脚本)无法访问这些变量。不过请注意,进程的初始变量仍然可以被检索到(例如,通过 /proc/<PID>/environ 文件)。

语法

环境变量必须使用以下语法:${字母数字/下划线}。

变量名只能包含字母(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 运行时命令不支持重新加载环境变量。 在重新加载期间,变量会被忽略,只有具有常规值的参数会被重新加载。