10 Zmienne środowiskowe

Przegląd

Zmienne środowiskowe umożliwiają konfigurowanie komponentów Zabbix bez wpisywania na stałe wartości w plikach konfiguracyjnych. Ułatwia to zarządzanie konfiguracją w dynamicznych środowiskach, takich jak Docker, gdzie zmienne mogą być przekazywane w czasie uruchamiania, aby dostosować ustawienia do różnych konfiguracji.

W najprostszym przypadku, ustawiając wartość parametru konfiguracyjnego DebugLevel serwera Zabbix na zmienną środowiskową, można następnie użyć jej do skonfigurowania serwera podczas uruchamiania:

# Plik konfiguracyjny serwera Zabbix:
DebugLevel=${NEW_DEBUG_LEVEL}

# Uruchamianie serwera Zabbix:
NEW_DEBUG_LEVEL=5 /usr/sbin/zabbix_server

Zmienne środowiskowe są obsługiwane przez następujące komponenty Zabbix:

Ważne uwagi

  • Gdy parametr konfiguracyjny jest ustawiony na zmienną środowiskową, która nie została określona podczas uruchamiania komponentu, użyta zostanie wartość domyślna parametru.
  • W przypadku używania poleceń runtime (np. w celu zwiększenia poziomu logowania agent), należy określić wszystkie wcześniej używane zmienne środowiskowe. Wynika to z faktu, że komponenty Zabbix używają swojego pliku konfiguracyjnego do wykonywania poleceń runtime; jeśli zmienne środowiskowe zostaną pominięte, użyte zostaną domyślne wartości parametrów konfiguracyjnych. Zobacz Przykłady.
  • Polecenie userparameter_reload runtime nie obsługuje ponownego wczytywania zmiennych środowiskowych. Podczas przeładowania zmienne są ignorowane i ponownie wczytywane są tylko parametry ze zwykłymi wartościami.
  • Bieżące zmienne środowiskowe procesu, które były używane w plikach konfiguracyjnych, są czyszczone po uruchomieniu komponentu Zabbix. Zapewnia to, że procesy potomne (np. zdalne skrypty wykonywane przez Zabbix) nie mogą uzyskać dostępu do tych zmiennych. Należy jednak pamiętać, że początkowe zmienne procesu nadal mogą zostać odczytane (np. za pośrednictwem pliku /proc/<PID>/environ).

Składnia

Zmienne środowiskowe muszą używać następującej składni: ${alphanumerics/underscores}.

Nazwa zmiennej może zawierać wyłącznie litery (a-z, A-Z), podkreślenia (_), oraz cyfry (0-9) i nie może zaczynać się od cyfry.

Zmienne, które nie są zgodne z wymaganą składnią lub są połączone ze zwykłą wartością, będą traktowane jako zwykłe wartości, co może powodować błędy.

Poprawna składnia zmiennych:

DebugLevel=${NEW_DEBUG_LEVEL}
Hostname=${ZBX_HOSTNAME}
LogFile=${LogFile_001}

Niepoprawna składnia zmiennych:

DebugLevel=${5_DebugLevel}
Hostname=${ZBX.HOSTNAME 1}
LogFile=/${HOME}/zabbix/zabbix_server.log

W systemie Windows nazwy zmiennych środowiskowych nie rozróżniają wielkości liter.

Przykłady

Poniższe przykłady pokazują, jak skonfigurować i używać zmiennych środowiskowych z komponentami Zabbix.

Przykład 1: Konfigurowanie i testowanie agenta Zabbix

1. Ustaw zmienne środowiskowe w pliku konfiguracyjnym agenta:

Hostname=${ZBX_HOSTNAME}
ServerActive=${ServerActive}

2. Przetestuj plik konfiguracyjny:

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

3. Uruchom agenta ze zmiennymi środowiskowymi:

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

Podczas używania poleceń runtime (na przykład w celu zwiększenia poziomu logowania agenta) należy podać wszystkie wcześniej użyte zmienne środowiskowe:

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

Wynika to z tego, że agent używa swojego pliku konfiguracyjnego do wykonywania poleceń runtime; jeśli zmienne środowiskowe zostaną pominięte, zostaną użyte domyślne wartości parametrów konfiguracyjnych.

Alternatywnie, po ustawieniu zmiennych środowiskowych w pliku konfiguracyjnym agenta, możesz udostępnić je procesom (na przykład za pomocą polecenia export). Zmniejsza to ryzyko nieoczekiwanego zachowania spowodowanego brakiem zmiennych lub ich nieprawidłowym ustawieniem.

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
Przykład 2: Konfigurowanie agenta Zabbix dla kontenera

Jeśli tworzysz i konfigurujesz własny niestandardowy obraz dla komponentów Zabbix (np. agenta Zabbix), możesz zdefiniować parametry konfiguracyjne za pomocą zmiennych środowiskowych, a następnie uruchomić kontener z tymi zmiennymi.

1. Podczas przygotowywania obrazu ustaw zmienne środowiskowe w pliku konfiguracyjnym agenta:

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

2. Po zbudowaniu obrazu kontenera uruchom kontener agenta (np. Docker) ze zmiennymi środowiskowymi:

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. Podczas używania poleceń runtime (np. w celu zwiększenia poziomu logowania agenta) uzyskaj dostęp do powłoki kontenera i wykonaj polecenie runtime:

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

Polecenie runtime userparameter_reload nie obsługuje ponownego wczytywania zmiennych środowiskowych. Podczas ponownego wczytywania zmienne są ignorowane, a ponownie wczytywane są tylko parametry ze zwykłymi wartościami.