[comment]: # ({39c4b215-26ad891b})
# 10 環境変数

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

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

環境変数を使用すると、設定ファイルに値をハードコーディングすることなく、Zabbix コンポーネントを設定できます。
これにより、Docker などの動的な環境で設定を簡単に管理でき、Docker では、実行時に変数を渡すことでさまざまな設定に適応させることができます。

最も単純なケースでは、Zabbix サーバーの [DebugLevel](/manual/appendix/config/zabbix_server#debuglevel) 設定パラメータ値を環境変数に設定することで、起動時にサーバーの設定に使用できます。

```bash
# Zabbix サーバー設定ファイル:
DebugLevel=${NewDebugLevel}

# Zabbix サーバーの起動:
NewDebugLevel=5 /usr/sbin/zabbix_server
```

環境変数は、以下の Zabbix コンポーネントでサポートされています。

- [Server](/manual/appendix/config/zabbix_server)
- [Proxy](/manual/appendix/config/zabbix_proxy)
- エージェント ([UNIX](/manual/appendix/config/zabbix_agentd) または [Windows](/manual/appendix/config/zabbix_agentd_win))
- エージェント 2 ([UNIX](/manual/appendix/config/zabbix_agent2) または [Windows](/manual/appendix/config/zabbix_agent2_win))、[プラグイン](/manual/appendix/config/zabbix_agent2_plugins)を含む
- [Webサービス](/manual/appendix/config/zabbix_web_service)
- Zabbix Sender ([-c, --config オプション](/manpages/zabbix_sender#options) 使用時)

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

[comment]: # ({8d252f3a-7598ffff})
#### 重要事項

- 設定パラメータが環境変数に設定されており、コンポーネント実行時にその環境変数が指定されていない場合、パラメータのデフォルト値が使用されます。
- [ランタイムコマンド](/manual/concepts/agent#runtime-control)を使用する場合（例：エージェントのログレベルを上げる場合）、以前に使用した環境変数を指定する必要があります。これは、Zabbixコンポーネントが設定ファイルを使用してランタイムコマンドを実行するためです。環境変数が省略されている場合、設定パラメータのデフォルト値が使用されます。[例](#examples)を参照してください。
- `userparameter_reload` [ランタイムコマンド](/manual/concepts/agent#runtime-control)は、環境変数の再読み込みをサポートしていません。再読み込み中は変数は無視され、通常の値を持つパラメータのみが再読み込みされます。
- 設定ファイルで使用されていたプロセスの現在の環境変数は、Zabbixコンポーネントの起動後にクリアされます。これにより、子プロセス（例：Zabbixによって実行されるリモートスクリプト）はこれらの変数にアクセスできなくなります。ただし、プロセス初期変数は引き続き取得できることに注意してください。 (たとえば、`/proc/<PID>/environ` ファイル経由)

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

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

環境変数は、${英数字/アンダースコア} という構文を使用する必要があります。

変数名には、英字 (a-z、A-Z)、アンダースコア (\_)、数字 (0-9) のみを使用できます。また、数字で始まってはなりません。

必須の構文に一致しない変数、または通常の値と組み合わせられた変数は通常の値として扱われ、エラーが発生する可能性があります。

正しい変数構文:

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

誤った変数構文:

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

::: noteclassic
Windowsでは、環境変数名の大文字と小文字は区別されません。
:::

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

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

以下の例では、Zabbix コンポーネントでの環境変数の設定および使用方法を示しています。

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

[comment]: # ({78b82896-0382a339})
##### 例 1: Zabbix エージェントの設定とテスト

1\. エージェント設定ファイルで環境変数を設定します。

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

2\. 設定ファイルをテストします。

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

3\.環境変数を有効にしてエージェントを起動します。

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

[ランタイムコマンド](/manual/concepts/agent#runtime-control)を使用する場合（例：エージェントのログレベルを上げる場合）、以前に使用した環境変数を再度指定する必要があります。

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

これは、エージェントがランタイムコマンドを実行するために設定ファイルを使用するためです。環境変数が省略されている場合、設定パラメータのデフォルト値が使用されます。

あるいは、エージェント設定ファイルで環境変数を設定した後、プロセスでそれらを有効に出来るようにすることもできます。（例：`export` コマンドを使用）
これにより、変数の欠落や誤った設定による予期しない動作のリスクを軽減できます。

```bash
export ZBX_HOSTNAME="新しい Zabbix エージェント"
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})
##### 例 2: コンテナ用の Zabbix エージェントの設定

Zabbix コンポーネント（例: Zabbix エージェント）用のカスタムイメージを独自に作成・設定する場合には、環境変数を使用して設定パラメータを定義し、その変数を有効にしてコンテナを起動できます。

1\. イメージを準備する際に、エージェント設定ファイルで環境変数を設定します。

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

2\.コンテナイメージをビルドしたら、環境変数を指定してエージェントコンテナ（例：Docker）を起動します。

```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\. [ランタイムコマンド](/manual/concepts/agent#runtime-control)を使用する場合（例：エージェントのログレベルを上げる場合）、コンテナシェルにアクセスし、以下のランタイムコマンドを実行します。

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

::: 重要
`userparameter_reload` ランタイムコマンドは、環境変数の再読み込みをサポートしていません。
再読み込み中は変数は無視され、通常の値を持つパラメータのみが再読み込みされます。
:::

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