Zmienne środowiskowe
Omówienie
Zmienne środowiskowe umożliwiają konfigurację komponentów Zabbix bez wpisywania na sztywno wartości w plikach konfiguracyjnych. Ułatwia to zarządzanie konfiguracjami w dynamicznych środowiskach, takich jak Docker, gdzie zmienne mogą być przekazywane w czasie uruchomienia, aby dostosować je 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:
- Serwer
- Proxy
- Agent (UNIX lub Windows)
- Agent 2 (UNIX lub Windows), w tym wtyczki
- Usługa web
- Zabbix sender (przy użyciu opcji -c, --config)
Ważne uwagi
- Gdy parametr konfiguracji jest ustawiony na zmienną środowiskową, która nie została określona podczas uruchamiania komponentu, używana jest domyślna wartość parametru.
- Podczas korzystania z poleceń czasu działania (np. w celu zwiększenia poziomu logowania agent), należy podać wszystkie wcześniej używane zmienne środowiskowe. Wynika to z faktu, że komponenty Zabbix używają pliku konfiguracyjnego do wykonywania poleceń czasu działania; jeśli zmienne środowiskowe zostaną pominięte, zostaną użyte domyślne wartości parametrów konfiguracji. Zobacz Przykłady.
- Polecenie czasu działania
userparameter_reloadpolecenie czasu działania nie obsługuje ponownego wczytywania zmiennych środowiskowych. Podczas ponownego wczytywania zmienne są ignorowane, a wczytywane są tylko parametry o zwykłych wartościach. - 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 można odczytać (np. za pomocą pliku
/proc/<PID>/environ).
Składnia
Zmienne środowiskowe muszą używać następującej składni: ${alfanumeryczne/podkreślenia}.
Nazwa zmiennej może zawierać tylko litery (a-z, A-Z), podkreślenia (_), oraz cyfry (0-9) i nie może zaczynać się od cyfry.
Zmienne, które nie odpowiadają wymaganej 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 zmiennej:
DebugLevel=${NEW_DEBUG_LEVEL}
Hostname=${ZBX_HOSTNAME}
LogFile=${LogFile_001}
Niepoprawna składnia zmiennej:
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 agent Zabbix
1. Ustaw zmienne środowiskowe w pliku konfiguracyjnym agent:
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 agent z zmiennymi środowiskowymi:
ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
Podczas korzystania z poleceń w czasie działania (np. w celu zwiększenia poziomu logowania agent), 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
Dzieje się tak, ponieważ agent używa swojego pliku konfiguracyjnego do wykonywania poleceń w czasie działania; 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 agent, możesz udostępnić je procesom (np. 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 konfiguracji za pomocą zmiennych środowiskowych, a następnie uruchomić kontener z tymi zmiennymi.
1. Podczas przygotowywania obrazu ustaw zmienne środowiskowe w pliku konfiguracji 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 korzystania z poleceń w czasie działania (np. w celu zwiększenia poziomu logowania agenta) uzyskaj dostęp do powłoki kontenera i wykonaj polecenie w czasie działania:
docker exec -it <containerid> sh
/usr/sbin/zabbix_agentd -R log_level_increase
Polecenie w czasie działania 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.