Zabbixは、各ZabbixコンポーネントのDockerイメージをポータブルで自立したコンテナとして提供し、展開と更新手順を高速化しています。
Zabbixコンポーネントには、MySQLおよびPostgreSQLデータベースのサポートApache2およびNginx Webサーバーのサポートが付属しています。 これらのイメージはそれぞれ別のイメージに分かれています。
Zabbix 6.0以降、インストール中に決定論的トリガーを作成する必要があります。 MySQL/MariaDBでバイナリロギングが有効になっている場合、スーパーユーザー権限、または変数/構成パラメーターlog_bin_trust_function_creators = 1の設定が必要です。 変数の設定方法については、データベース作成スクリプトを参照してください。
コンソールから実行する場合、変数は一時的に設定されるだけで、Docker が再起動されると削除されることに注意してください。 この場合、SQLサービスを実行したままにし、'docker compose down zabbix-server'を実行してから'docker compose up -d zabbix-server'を実行して、zabbix-serverサービスのみを停止します。
あるいは、この変数を設定ファイルで設定することもできます。
Zabbixコンポーネントは、Ubuntu、Alpine Linux、およびCentOSのベースイメージで提供されます。
すべてのイメージは、ベースイメージが更新された場合に最新のイメージにリビルドするように設定されています。
github.comのZabbix公式リポジトリを使用すると、誰でもDockerファイルの変更を追跡できます。 プロジェクトをフォークしたり、公式のDockerファイルに基づいて独自のイメージを作成したりできます。
すべてのZabbixコンポーネントは、以下のDockerリポジトリで入手可能です。
さらに、SNMPトラップのサポートもあります。 これはUbuntu Trustyのみに基づく追加リポジトリ(zabbix/zabbix-snmptraps)として提供されます。 ZabbixサーバーやZabbixプロキシと連携することができます。
Zabbix コンポーネントの各リポジトリには、次のタグが含まれています。
latest
- Alpine Linuxイメージに基づくZabbixコンポーネントの最新安定バージョンalpine-latest
- Alpine Linuxイメージに基づくZabbixコンポーネントの最新安定バージョンubuntu-latest
- Ubuntuイメージに基づくZabbixコンポーネントの最新安定バージョンalpine-6.0-latest
- Alpine Linuxイメージに基づくZabbix 6.0コンポーネントの最新マイナーバージョンubuntu-6.0-latest
- Ubuntuイメージに基づくZabbix 6.0コンポーネントの最新マイナーバージョンalpine-6.0.*
- Alpine Linuxイメージに基づくZabbix 6.0コンポーネントのさまざまなマイナーバージョン。*
はZabbixコンポーネントのマイナー バージョンです。ubuntu-6.0.*
- Ubuntuイメージに基づくZabbix 6.0コンポーネントのさまざまなマイナーバージョン。*
はZabbixコンポーネントのマイナー バージョンです。イメージをダウンロードした後、docker run
コマンドを実行してコンテナを起動し、その後に必要な環境変数やマウントポイントを指定する追加の引数を指定します。 いくつかの設定例を以下に示します。
Zabbixは、コンテナー内のPID1または初期プロセスとして実行しないでください。
すべてのZabbixコンポーネントイメージは、構成を制御するための環境変数を提供します。 これらの環境変数は各コンポーネントリポジトリにリストされています。 また、Zabbix設定ファイルのオプションでもありますが命名方法が異なります。 たとえば、ZBX_LOGSLOWQUERIES
は、Zabbixサーバーおよび Zabbixプロキシ設定ファイルのLogSlowQueries
と同じです。
一部の設定オプションは変更できません。たとえばPIDFile
やLogType
などです。
一部のコンポーネントには、公式のZabbix設定ファイルには存在しない特定の環境変数があります。
変数 | コンポーネント | 説明 |
---|---|---|
DB_SERVER_HOST |
サーバー プロキシ Webインターフェース |
MySQLまたはPostgreSQLサーバーのIPまたはDNS名。 デフォルトの値: MySQL- mysql-server 、PostgreSQL - postgres-server |
DB_SERVER_PORT |
サーバー プロキシ Webインターフェース |
MySQLまたはPostgreSQLサーバーのポート。 デフォルトの値: MySQL- '3306'、PostgreSQL - '5432' |
MYSQL_USER |
サーバー プロキシ Webインターフェース |
MySQLデータベースユーザー。 デフォルトの値: 'zabbix' |
MYSQL_PASSWORD |
サーバー プロキシ Webインターフェース |
MySQLデータベースパスワード。 デフォルトの値: 'zabbix' |
MYSQL_DATABASE |
サーバー プロキシ Webインターフェース |
Zabbixデータベース名。 デフォルトの値: Zabbixサーバー - 'zabbix'、Zabbixプロキシ - 'zabbix_proxy' |
POSTGRES_USER |
サーバー Webインターフェース |
PostgreSQLデータベースユーザー。 デフォルトの値: 'zabbix' |
POSTGRES_PASSWORD |
サーバー Webインターフェース |
PostgreSQLデータベースパスワード。 デフォルトの値: 'zabbix' |
POSTGRES_DB |
サーバー Webインターフェース |
Zabbixデータベース名。 デフォルトの値: 'zabbix' |
PHP_TZ |
Webインターフェース | PHP形式のタイムゾーン。サポートされているタイムゾーンの完全なリストは、php.netで入手できます。 デフォルトの値: 'Europe/Riga' |
ZBX_SERVER_NAME |
Webインターフェース | Webインターフェースの右上隅に表示されるZabbixインストール名。 デフォルトの値: 'Zabbix Docker' |
ZBX_JAVAGATEWAY_ENABLE |
サーバー プロキシ |
Zabbix Javaゲートウェイとの通信を有効にして、Java関連のチェックを収集します。 デフォルトの値: "false" |
ZBX_ENABLE_SNMP_TRAPS |
サーバー プロキシ |
SNMPトラップ機能を有効にします。zabbix-snmptrapsインスタンスと、共有ボリューム/var/lib/zabbix/snmptrapsがZabbixサーバーまたはZabbixプロキシに必要です。 |
イメージでは、いくつかのマウントポイントを使用できます。 これらのマウントポイントはZabbixコンポーネントの種類によって異なります。
ボリューム | 説明 |
---|---|
Zabbix エージェント | |
/etc/zabbix/zabbix_agentd.d | *.confファイルを組み込み、UserParameter 機能を使用してZabbixエージェントを拡張できます。 |
/var/lib/zabbix/modules | LoadModule機能を使用して追加のモジュールをロードし、Zabbixエージェントを拡張できます。 |
/var/lib/zabbix/enc | TLS関連のファイルを格納するために使用されます。これらのファイル名は、ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 、ZBX_TLSPSKFILE 環境変数を使用して指定されます。 |
Zabbixサーバー | |
/usr/lib/zabbix/alertscripts | カスタムアラートスクリプトに使用されます。 zabbix_server.confのAlertScriptsPath パラメーターです。 |
/usr/lib/zabbix/externalscripts | 外部チェックに使用されます。 zabbix_server.confのExternalScripts パラメーターです。 |
/var/lib/zabbix/modules | LoadModule機能を使用して追加のモジュールをロードし、Zabbixサーバーを拡張できます。 |
/var/lib/zabbix/enc | TLS関連のファイルを格納するために使用されます。 これらのファイル名は、ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 、ZBX_TLSPSKFILE 環境変数を使用して指定されます。 |
/var/lib/zabbix/ssl/certs | クライアント認証用のSSLクライアント証明書ファイルの格納場所として使用されます。zabbix_server.confのSSLCertLocation パラメーターです。 |
/var/lib/zabbix/ssl/keys | クライアント認証用のSSL秘密鍵ファイルの格納場所として使用されます。 zabbix_server.confのSSLKeyLocation パラメーターです。 |
/var/lib/zabbix/ssl/ssl_ca | SSL サーバー証明書検証用の認証局(CA)ファイルの格納場所として使用されます。 zabbix_server.confのSSLCALocation パラメーターです。 |
/var/lib/zabbix/snmptraps | snmptraps.logファイルの場所として使用されます。 zabbix-snmptrapsコンテナによって共有され、Zabbixサーバーの新しいインスタンスを作成するときに、volumes_from Dockerオプションを使用して継承される可能性があります。共有ボリュームを使用し、ZBX_ENABLE_SNMP_TRAPS 環境変数を'true'に切り替えることで、SNMPトラップ処理機能を有効にすることができます。 |
/var/lib/zabbix/mibs | 新しいMIBファイルを追加できます。サブディレクトリはサポートしていません。すべてのMIBを/var/lib/zabbix/mibs に配置する必要があります。 |
Zabbixプロキシ | |
/usr/lib/zabbix/externalscripts | 外部チェックによって使用されます。zabbix_proxy.confのExternalScripts パラメーターです。 |
/var/lib/zabbix/db_data/ | 外部デバイスにデータベースファイルを保存できます。SQLite3を使用するZabbixプロキシでのみサポートしています。 |
/var/lib/zabbix/modules | LoadModule機能を使用して追加のモジュールをロードし、Zabbixサーバーを拡張できます。 |
/var/lib/zabbix/enc | TLS関連のファイルを格納するために使用されます。これらのファイル名は、ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 、ZBX_TLSPSKFILE 環境変数を使用して指定されます。 |
/var/lib/zabbix/ssl/certs | クライアント認証用のSSLクライアント証明書ファイルの格納場所として使用されます。zabbix_proxy.confのSSLCertLocation パラメーターです。 |
/var/lib/zabbix/ssl/keys | クライアント認証用のSSL秘密鍵ファイルの格納場所として使用されます。zabbix_proxy.confのSSLKeyLocation パラメーターです。 |
/var/lib/zabbix/ssl/ssl_ca | SSLサーバー証明書検証用の認証局(CA)ファイルの格納場所として使用されます。zabbix_proxy.confのSSLCALocation パラメーターです。 |
/var/lib/zabbix/snmptraps | snmptraps.logファイルの場所として使用されます。zabbix-snmptrapsコンテナによって共有され、Zabbixサーバーの新しいインスタンスを作成するときに、volumes_from Dockerオプションを使用して継承される可能性があります。共有ボリュームを使用し、ZBX_ENABLE_SNMP_TRAPS 環境変数を'true'に切り替えることで、SNMPトラップ処理機能を有効にすることができます。 |
/var/lib/zabbix/mibs | 新しいMIBファイルを追加できます。サブディレクトリはサポートしていません。すべてのMIBを/var/lib/zabbix/mibs に配置する必要があります。 |
Apache2 Webサーバーに基づくZabbix Webインターフェース | |
/etc/ssl/apache2 | Zabbix WebインターフェースのHTTPSを有効にすることができます。Apache2 SSL接続用に準備されたssl.crt ファイルとssl.key ファイルの2つが格納されている必要があります。 |
Nginx Webサーバーに基づくZabbix Webインターフェース | |
/etc/ssl/nginx | Zabbix WebインターフェースのHTTPSを有効にすることができます。Nginx SSL接続用に準備されたssl.crt とssl.key およびdhparam.pem が格納されている必要があります。 |
Zabbix snmpトラップ | |
/var/lib/zabbix/snmptraps | 受信したSNMPトラップで名前が付けられたsnmptraps.log ログファイルが格納されます。 |
/var/lib/zabbix/mibs | 新しいMIBファイルを追加できます。サブディレクトリはサポートしていません。すべてのMIBを/var/lib/zabbix/mibs に配置する必要があります。 |
詳細については、Docker HubのZabbix公式リポジトリを参照してください。
例 1
この例では、MySQLデータベースのサポート、Nginx Webサーバーに基づくZabbix Webインターフェース、およびZabbix Javaゲートウェイを備えたZabbixサーバーを実行する方法を示します。
1. Zabbixコンポーネントコンテナ専用のネットワークを作成します。
2. 空のMySQLサーバーインスタンスを開始します。
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
--restart unless-stopped \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
3. Zabbix Javaゲートウェイインスタンスを起動します。
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-6.0-latest
4. Zabbixサーバーインスタンスを起動し、作成したMySQLサーバーインスタンスとリンクします。
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-6.0-latest
Zabbixサーバーインスタンスは、10051/TCPポート (Zabbixトラッパー)をホストマシンに公開します。
5. Zabbix Webインターフェースを起動し、インスタンスを作成したMySQLサーバーおよびZabbixサーバーインスタンスとリンクします。
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latest
Zabbix Webインターフェースインスタンスは、80/TCPポート (HTTP)をホストマシンに公開します。
例 2
この例では、PostgreSQLデータベースのサポート、Nginx Webサーバーに基づくZabbix Webインターフェース、およびSNMPトラップ機能を備えたZabbixサーバーを実行する方法を示します。
1. Zabbixコンポーネントコンテナ専用のネットワークを作成します。
2. 空のPostgreSQLサーバーインスタンスを起動します。
docker run --name postgres-server -t \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
--restart unless-stopped \
-d postgres:latest
3. Zabbix SNMPトラップインスタンスを起動します。
docker run --name zabbix-snmptraps -t \
-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
--network=zabbix-net \
-p 162:1162/udp \
--restart unless-stopped \
-d zabbix/zabbix-snmptraps:alpine-6.0-latest
Zabbix SNMPトラップインスタンスは、162/UDPポート (SNMPトラップ)をホストマシンに公開します。
4. Zabbixサーバーインスタンスを起動し、作成したPostgreSQLサーバーインスタンスとリンクします。
docker run --name zabbix-server-pgsql -t \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
-e ZBX_ENABLE_SNMP_TRAPS="true" \
--network=zabbix-net \
-p 10051:10051 \
--volumes-from zabbix-snmptraps \
--restart unless-stopped \
-d zabbix/zabbix-server-pgsql:alpine-6.0-latest
Zabbixサーバーインスタンスは、10051/TCPポート (Zabbixトラッパー)をホストマシンに公開します。
5. Zabbix Webインターフェースを起動し、インスタンスを作成したPostgreSQLサーバーおよびZabbixサーバーインスタンスとリンクします。
docker run --name zabbix-web-nginx-pgsql -t \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
-p 443:8443 \
-p 80:8080 \
-v /etc/ssl/nginx:/etc/ssl/nginx:ro \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latest
Zabbix Webインターフェースインスタンスは、443/TCPポート (HTTPS)をホストマシンに公開します。
/etc/ssl/nginxディレクトリには、必要な名前の証明書が含まれている必要があります。
例 3
この例では、MySQLデータベースのサポート、Nginx Webサーバーに基づくZabbix Webインターフェース、およびRed Hat 8上のpodman
を使用したZabbix Javaゲートウェイを備えたZabbixサーバーを実行する方法を示します。
1. zabbix
という名前と公開ポート (Webインターフェース、Zabbixサーバートラッパー)を使用して新しいPodを作成します。
2. (オプション) zabbix
Podの場所でZabbixエージェントコンテナを起動します。
podman run --name zabbix-agent \
-e ZBX_SERVER_HOST="127.0.0.1,localhost" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-agent-60:latest
3. ホスト上に./mysql/
ディレクトリを作成し、Oracle MySQL Server 8.0を起動します。
podman run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-v ./mysql/:/var/lib/mysql/:Z \
--restart=always \
--pod=zabbix \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
4. Zabbixサーバーコンテナを起動します。
podman run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="127.0.0.1" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-server-mysql-60
5. Zabbix Javaゲートウェイコンテナを起動します。
podman run --name zabbix-java-gateway -t \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-60
6. Zabbix Webインターフェースコンテナを起動します。
podman run --name zabbix-web-mysql -t \
-e ZBX_SERVER_HOST="127.0.0.1" \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-web-mysql-60
zabbix
Podは、zabbix-web-mysql
コンテナの8080/TCPから80/TCPポート (HTTP)をホストマシンに公開します。
Zabbixは、DockerでマルチコンテナZabbixコンポーネントを定義および実行するためのComposeファイルも提供しています。これらのComposeファイルは、github.comのZabbix docker公式リポジトリ(https://github.com/zabbix/zabbix-docker)で入手できます。これらのComposeファイルは例として追加され、オーバーロードされています。 たとえば、MySQLおよびSQLite3をサポートするプロキシが含まれています。
Composeファイルにはいくつかの異なるバージョンがあります。
ファイル名 | 説明 |
---|---|
docker-compose_v3_alpine_mysql_latest.yaml |
MySQLデータベースをサポートするAlpine Linux上で最新バージョンのZabbix 6.0コンポーネントを実行します。 |
docker-compose_v3_alpine_mysql_local.yaml |
Zabbix 6.0の最新バージョンをローカルにビルドし、MySQLデータベースをサポートするAlpine Linux上でZabbixコンポーネントを実行します。 |
docker-compose_v3_alpine_pgsql_latest.yaml |
PostgreSQLデータベースをサポートするAlpine Linux上で最新バージョンのZabbix 6.0コンポーネントを実行します。 |
docker-compose_v3_alpine_pgsql_local.yaml |
Zabbix 6.0の最新バージョンをローカルにビルドし、PostgreSQLデータベースをサポートするAlpine Linux上でZabbixコンポーネントを実行します。 |
docker-compose_v3_centos_mysql_latest.yaml |
MySQLデータベースをサポートするCentOS 8上で最新バージョンのZabbix 6.0コンポーネントを実行します。 |
docker-compose_v3_centos_mysql_local.yaml |
Zabbix 6.0の最新バージョンをローカルにビルドし、MySQLデータベースをサポートするCentOS 8上でZabbixコンポーネントを実行します。 |
docker-compose_v3_centos_pgsql_latest.yaml |
PostgreSQLデータベースをサポートするCentOS 8上で最新バージョンのZabbix 6.0コンポーネントを実行します。 |
docker-compose_v3_centos_pgsql_local.yaml |
Zabbix 6.0の最新バージョンをローカルでビルドし、PostgreSQLデータベースをサポートするCentOS 8上でZabbixコンポーネントを実行します。 |
docker-compose_v3_ubuntu_mysql_latest.yaml |
MySQLデータベースをサポートするUbuntu 20.04上で 最新バージョンのZabbix 6.0コンポーネントを実行します。 |
docker-compose_v3_ubuntu_mysql_local.yaml |
Zabbix 6.0の最新バージョンをローカルにビルドし、MySQLデータベースをサポートするUbuntu 20.04上でZabbixコンポーネントを実行します。 |
docker-compose_v3_ubuntu_pgsql_latest.yaml |
PostgreSQLデータベースをサポートするUbuntu 20.04上で最新バージョンのZabbix 6.0コンポーネントを実行します。 |
docker-compose_v3_ubuntu_pgsql_local.yaml |
Zabbix 6.0の最新バージョンをローカルにビルドし、PostgreSQLデータベースをサポートするUbuntu 20.04上でZabbixコンポーネントを実行します。 |
Docker Composeファイルは、Docker Composeのバージョン3をサポートしています。
Composeファイルは、ホストマシン上のローカルストレージをサポートするように構成されています。 Docker Composeは、Composeファイルを使用してZabbixコンポーネントを実行するときに、Composeファイルのあるフォルダーにzbx_env
ディレクトリを作成します。 このディレクトリには、上記のボリュームセクションで説明したものと同じ構造と、データベースストレージ用のディレクトリが含まれます。
/etc/localtime
および/etc/timezone
ファイルに対して読み取り専用モードのボリュームもあります。
github.comのComposeファイルと同じディレクトリに、Composeファイル内の各コンポーネントのデフォルトの環境変数を含むファイルがあります。これらの環境ファイルには、.env_<コンポーネントの種類>
のような名前が付けられています。
以下に記述されているコマンドは、Docker Compose V2用です。 Docker Compose V1を使用している場合は、docker compose -f
をdocker-compose -f
に書き換えます。
例 1
このコマンドは、各Zabbixコンポーネントの最新のZabbix 6.0イメージをダウンロードし、デタッチモードで実行します。
github.comの公式Zabbixリポジトリから.env_<コンポーネントの種類>
ファイルをComposeファイルとともにダウンロードすることを忘れないでください。
例 2
このコマンドは、ベースイメージUbuntu 20.04 (focal)をダウンロードし、Zabbix 6.0コンポーネントをローカルでビルドして、デタッチモードで実行します。