環境変数
概要
環境変数を使用すると、設定ファイルに値をハードコードすることなく Zabbix コンポーネントを設定できます。 これにより、Docker のような動的な環境でも、実行時に変数を渡してさまざまな構成に対応できるため、設定を簡単に管理できます。
最も簡単な例として、Zabbix サーバーの DebugLevel 設定パラメータの値を環境変数に設定すると、起動時にそれを使ってサーバーを設定できます。
# Zabbix server configuration file:
DebugLevel=${NEW_DEBUG_LEVEL}
# Starting Zabbix server:
NEW_DEBUG_LEVEL=5 /usr/sbin/zabbix_server
環境変数は、以下の Zabbix コンポーネントでサポートされています。
- サーバー
- プロキシ
- エージェント (UNIX または Windows)
- エージェント 2 (UNIX または Windows)、プラグイン を含む
- Webサービス
- Zabbix sender(-c, --config option を使用する場合)
重要な注意事項
- 設定パラメータが環境変数に設定されている場合でも、コンポーネントの起動時にその環境変数が指定されていないと、そのパラメータのデフォルト値が使用されます。
- runtime commands を使用する場合(例: エージェントのログレベルを上げる場合)、以前に使用していた環境変数をすべて指定する必要があります。これは、Zabbixコンポーネントが runtime commands の実行に設定ファイルを使用するためです。環境変数が省略されると、設定パラメータのデフォルト値が使用されます。Examples を参照してください。
userparameter_reloadruntime command は、環境変数の再読み込みをサポートしていません。再読み込み時には変数は無視され、通常の値を持つパラメータのみが再読み込みされます。- 設定ファイルで使用されていた現在の環境変数は、Zabbixコンポーネントの起動後にクリアされます。これにより、子プロセス(例: Zabbixによって実行されるリモートスクリプト)がこれらの変数にアクセスできなくなります。ただし、プロセスの初期変数は引き続き取得できることに注意してください(例:
/proc/<PID>/environファイル経由)。
構文
環境変数は次の構文を使用する必要があります: ${英数字/アンダースコア}。
変数名に含めることができるのは、英字 (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. runtime commands(例: エージェントのログレベルを上げる場合)を使用する際は、コンテナのシェルにアクセスして runtime command を実行します:
docker exec -it <containerid> sh
/usr/sbin/zabbix_agentd -R log_level_increase
userparameter_reload runtime command は環境変数の再読み込みをサポートしていません。
再読み込み時には変数は無視され、通常の値を持つパラメータのみが再読み込みされます。