[comment]: # ({39c4b215-26ad891b})
# 10 Zmienne środowiskowe

[comment]: # ({/39c4b215-26ad891b})

[comment]: # ({5b980b7e-72128caf})
#### 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](/manual/appendix/config/zabbix_server#debuglevel) serwera Zabbix na zmienną środowiskową, można następnie użyć jej do skonfigurowania serwera podczas uruchamiania:

```bash
# 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](/manual/appendix/config/zabbix_server)
-   [Proxy](/manual/appendix/config/zabbix_proxy)
-   Agent ([UNIX](/manual/appendix/config/zabbix_agentd) lub [Windows](/manual/appendix/config/zabbix_agentd_win))
-   Agent 2 ([UNIX](/manual/appendix/config/zabbix_agent2) lub [Windows](/manual/appendix/config/zabbix_agent2_win)), w tym [wtyczki](/manual/appendix/config/zabbix_agent2_plugins)
-   [Usługa web](/manual/appendix/config/zabbix_web_service)
-   Zabbix sender (przy użyciu [opcji -c, --config](/manpages/zabbix_sender#options))

[comment]: # ({/5b980b7e-72128caf})

[comment]: # ({8d252f3a-7598ffff})
#### 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](/manual/concepts/agent#runtime-control) (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](#examples).
-   Polecenie `userparameter_reload` [runtime](/manual/concepts/agent#runtime-control) 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`).

[comment]: # ({/8d252f3a-7598ffff})

[comment]: # ({c33cd6ee-5d8ec091})
#### 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:

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

Niepoprawna składnia zmiennych:

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

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

[comment]: # ({/c33cd6ee-5d8ec091})

[comment]: # ({b319b360-c638a080})
#### Przykłady

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

[comment]: # ({/b319b360-c638a080})

[comment]: # ({78b82896-0382a339})
##### Przykład 1: Konfigurowanie i testowanie agenta Zabbix

1\. Ustaw zmienne środowiskowe w pliku konfiguracyjnym agenta:

```ini
Hostname=${ZBX_HOSTNAME}
ServerActive=${ServerActive}
```

2\. Przetestuj plik konfiguracyjny:

```bash
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:

```bash
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](/manual/concepts/agent#runtime-control) (na przykład w celu zwiększenia poziomu logowania agenta) należy podać wszystkie wcześniej użyte zmienne środowiskowe:

```bash
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.

```bash
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
```

[comment]: # ({/78b82896-0382a339})

[comment]: # ({6e772927-6852ff3f})
##### 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:

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

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

```bash
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](/manual/concepts/agent#runtime-control) (np. w celu zwiększenia poziomu logowania agenta) uzyskaj dostęp do powłoki kontenera i wykonaj polecenie runtime:

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

::: noteimportant
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.
:::

[comment]: # ({/6e772927-6852ff3f})
