10 Переменные окружения

Обзор

Переменные окружения позволяют настраивать компоненты Zabbix без жёсткого задания значений в конфигурационных файлах. Это упрощает управление конфигурациями в динамических средах, таких как Docker, где переменные могут передаваться во время выполнения для адаптации к различным вариантам настройки.

В простейшем случае, задав значение параметра конфигурации сервера Zabbix DebugLevel через переменную окружения, вы затем можете использовать её для настройки сервера при запуске:

# Конфигурационный файл сервера Zabbix:
DebugLevel=${NEW_DEBUG_LEVEL}

# Запуск сервера Zabbix:
NEW_DEBUG_LEVEL=5 /usr/sbin/zabbix_server

Переменные окружения поддерживаются следующими компонентами Zabbix:

Важные примечания

  • Если параметр конфигурации задан через переменную окружения, которая не указана при запуске компонента, используется значение параметра по умолчанию.
  • При использовании команд времени выполнения (например, для увеличения уровня журналирования агента) необходимо указывать все ранее использованные переменные окружения. Это связано с тем, что компоненты 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

1. Задайте переменные окружения в файле конфигурации агента:

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. Запустите агент с переменными окружения:

ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

При использовании команд времени выполнения (например, для увеличения уровня логирования агента) необходимо указывать все ранее использованные переменные окружения:

ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R log_level_increase

Это связано с тем, что агент использует свой файл конфигурации для выполнения команд времени выполнения; если переменные окружения не указаны, будут использованы значения параметров конфигурации по умолчанию.

В качестве альтернативы, после задания переменных окружения в файле конфигурации агента, вы можете сделать их доступными для процессов (например, с помощью команды 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 для контейнера

Если вы создаёте и настраиваете собственный пользовательский образ для компонентов Zabbix (например, агента Zabbix), вы можете задать параметры конфигурации с помощью переменных окружения, а затем запустить контейнер с этими переменными.

1. При подготовке образа задайте переменные окружения в файле конфигурации агента:

Hostname=${ZBX_HOSTNAME}
BufferSize=${BUFSZ}
ListenPort=${LISTENPORT}
UserParameter=${_UsrPar01}
UserParameter=${_UsrPar02}

2. После сборки образа контейнера запустите контейнер агента (например, 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. При использовании команд времени выполнения (например, для увеличения уровня журналирования агента) откройте оболочку контейнера и выполните команду времени выполнения:

docker exec -it <containerid> sh
/usr/sbin/zabbix_agentd -R log_level_increase

Команда времени выполнения userparameter_reload не поддерживает перезагрузку переменных окружения. Во время перезагрузки переменные игнорируются, и повторно загружаются только параметры с обычными значениями.