Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

5 コンテナでのインストール

Docker

Zabbixは各ZabbixコンポーネントのDockerイメージをポータブルな自給自足のコンテナとして提供し、
デプロイとアップデート手順の迅速化を図っています。

Zabbixコンポーネントには、MySQL、PostgreSQLデータベースサポート、Apache2、Nginx Webサーバサポートが付属しています。
これらのイメージはそれぞれ別のイメージに分かれています。

Dockerのベースイメージ

ZabbixコンポーネントはUbuntu、Alpine Linux、CentOSのベースイメージで提供されます。

イメージ バージョン
alpine 3.12
ubuntu 20.04 (focal)
centos 8

ベースイメージが更新された場合、すべてのイメージが最新のイメージにリビルドされるように設定されています。

Dockerファイルのソース

github.com の Zabbix official repositoryを利用すれば、誰でもDockerファイルの変更を追うことができます。
プロジェクトをフォークしたり、公式 Docker ファイルをベースに独自のイメージを作成することができます。

構造

全てのZabbixコンポーネントは以下のDockerリポジトリから入手可能です:

さらに、SNMP Trap もサポートされています。Ubuntu Trustyのみをベースにした追加リポジトリ(zabbix/zabbix-snmptrapsとして提供されています。
Zabbix server やZabbix proxy と連携することが可能です。

バージョン

Zabbixコンポーネントの各リポジトリには、以下のタグが含まれています:

  • latest - latest stable version of a Zabbix component based on Alpine Linux image
  • alpine-latest - latest stable version of a Zabbix component based on Alpine Linux image
  • ubuntu-latest - latest stable version of a Zabbix component based on Ubuntu image
  • alpine-5.4-latest - latest minor version of a Zabbix 5.4 component based on Alpine Linux image
  • ubuntu-5.4-latest - latest minor version of a Zabbix 5.4 component based on Ubuntu image
  • alpine-5.4.* - different minor versions of a Zabbix 5.4 component based on Alpine Linux image, where * is the minor version of Zabbix component
  • ubuntu-5.4.* - different minor versions of a Zabbix 5.4 component based on Ubuntu image, where * is the minor version of Zabbix component

使用方法

環境変数

すべての Zabbix コンポーネント イメージは、構成を制御するための環境変数を提供します。 これらの環境変数は、各コンポーネント リポジトリにリストされています。 これらの環境変数は Zabbix 構成ファイルのオプションですが、命名方法が異なります。 たとえばZBX_LOGSLOWQUERIESは、Zabbix サーバーおよび Zabbix プロキシ構成ファイルのLogSlowQueriesと同じです。

一部の設定オプションは変更できません。 たとえばPIDFileLogType

一部のコンポーネントには、公式の Zabbix 設定ファイルには存在しない特定の環境変数があります。

変数 コンポーネント 説明
DB_SERVER_HOST Server
Proxy
Web interface
この変数は、MySQL または PostgreSQL サーバーの IP または DNS 名です。
デフォルトの値は MySQL または PostgreSQL に対してそれぞれmysql-serverまたはpostgres-serverです。
DB_SERVER_PORT この変数はMySQL または PostgreSQL サーバーのポートです。
デフォルトの値はそれぞれ3306または5432です。
MYSQL_USER Server
Proxy
Web-interface
MySQL データベース ユーザー
デフォルトの値はzabbixです。
MYSQL_PASSWORD Server
Proxy
Web interface
MySQL データベースパスワード
デフォルトの値は 'zabbix'です。
MYSQL_DATABASE Server
Proxy
Web interface
Zabbix データベース名
デフォルトの値はZabbix サーバーの場合zabbix、Zabbix プロキシの場合zabbix\_proxyです。
POSTGRES_USER Server
Web interface
PostgreSQL データベースユーザー
デフォルトの値は'zabbix'です
POSTGRES_PASSWORD Server
Web interface
PostgreSQL データベースパスワード
デフォルトの値は 'zabbix'です
POSTGRES_DB Server
Web interface
Zabbix データベース名
デフォルトの値はZabbixサーバーの場合'zabbix'、Zabbixプロキシの場合 'zabbix_proxy' です
PHP_TZ Web-interface PHP フォーマットのタイムゾーン。 サポートされているタイムゾーンはphp.net で確認できます。
デフォルト値はEurope/Rigaです。
ZBX_SERVER_NAME Web interface Web インターフェイスの右上隅に表示される Zabbix インストール名
デフォルトの値はZabbix Dockerです。
ZBX_JAVAGATEWAY_ENABLE Server
Proxy
Zabbix Java ゲートウェイとの通信を有効にして、Java 関連のチェックを収集します。
デフォルトの値は"false"です。
ZBX_ENABLE_SNMP_TRAPS Server
Proxy
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.confAlertScriptsPathパラメータです
/usr/lib/zabbix/externalscripts 外部チェックに使用されます。 zabbix_server.confExternalScriptsパラメータです
/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.confSSLKeyLocationパラメータです。
/var/lib/zabbix/ssl/ssl_ca SSL サーバー証明書検証用の認証局 (CA) ファイルの格納場所として使用されます。 zabbix_server.confSSLCALocationパラメータです
/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.confExternalScripts パラメータです。
/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.confSSLCertLocation パラメータです。
/var/lib/zabbix/ssl/keys クライアント認証用の SSL 秘密鍵ファイルの格納場所として使用されます。 zabbix_proxy.confSSLKeyLocation パラメータです。
/var/lib/zabbix/ssl/ssl_ca SSL サーバー証明書検証用の認証局 (CA) ファイルの格納場所として使用されます。 zabbix_proxy.confSSLCALocation パラメータです。
/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 インターフェイスr
/etc/ssl/nginx Zabbix Web インターフェイスの HTTPS を有効にすることができます。 Nginx SSL 接続用に準備された ssl.crtssl.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 データベースをサポートする Zabbix サーバー、Nginx Web サーバーに基づく Zabbix Web インターフェイス、および Zabbix Java ゲートウェイを実行する方法を示しています。

1. Zabbix コンポーネント コンテナ専用のネットワークを作成します。

# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

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-5.4-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-5.4-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-5.4-latest

Zabbix Web インターフェイス インスタンスは、80/TCP ポート (HTTP) をホスト マシンに公開します。

例 2

この例では、PostgreSQL データベースをサポートする Zabbix サーバー、Nginx Web サーバーに基づく Zabbix Web インターフェイス、および SNMP トラップ機能を実行する方法を示します。

1. Zabbix コンポーネント コンテナ専用のネットワークを作成します。

# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

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 ANMPトラップ インスタンスの開始

# 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-5.4-latest

Zabbix snmptrap インスタンスは、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-5.4-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-5.4-latest

Zabbix Web インターフェイス インスタンスは、443/TCP ポート (HTTPS) をホスト マシンに公開します。 ディレクトリ /etc/ssl/nginx には、必要な名前の証明書が含まれている必要があります。

例 3

この例では、MySQL データベースをサポートする Zabbix サーバー、Nginx Web サーバーに基づく Zabbix Web インターフェイス、Red Hat 8 でpodmanを使用する Zabbix Java ゲートウェイを実行する方法を示します。

1. zabbixという名前と公開されたポート (Web インターフェイス、Zabbix サーバー トラッパー) で新しいポッドを作成します。

podman pod create --name zabbix -p 80:8080 -p 10051:10051

2. (オプション) zabbix ポッドの場所で Zabbix エージェント コンテナーを開始します。

podman run --name zabbix-agent \
           -eZBX_SERVER_HOST="127.0.0.1,localhost" \
           --restart=always \
           --pod=zabbix \
           -d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest

3. ホストに ./mysql/ ディレクトリを作成し、Oracle MySQL サーバー 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

3. 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-50

4. Zabbix Java ゲートウェイ コンテナを起動します。

podman run --name zabbix-java-gateway -t \
             --restart=always \
             --pod=zabbix \
             -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50

5. 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-50

Pod zabbixzabbix-web-mysql コンテナの 8080/TCP からホスト マシンに 80/TCP ポート (HTTP) を公開します。

Docker Compose

Zabbix は、Docker でマルチコンテナ Zabbix コンポーネントを定義および実行するための構成ファイルも提供します。 これらの構成ファイルは、github.com の Zabbix docker 公式リポジトリ (https://github.com/zabbix/zabbix-docker) で入手できます。 これらの構成ファイルは例として追加され、オーバーロードされています。 たとえば、MySQL および SQLite3 をサポートするプロキシが含まれています。

構成ファイルにはいくつかの異なるバージョンがあります。

ファイル名 説明
docker-compose_v3_alpine_mysql_latest.yaml Compose ファイルは、MySQL データベースをサポートする Alpine Linux で Zabbix 5.4 コンポーネントの最新バージョンを実行します。
docker-compose_v3_alpine_mysql_local.yaml 構成ファイルは、Zabbix 5.4 の最新バージョンをローカルにビルドし、MySQL データベースをサポートする Alpine Linux で Zabbix コンポーネントを実行します。
docker-compose_v3_alpine_pgsql_latest.yaml Compose ファイルは、PostgreSQL データベースをサポートする Alpine Linux で Zabbix 5.4 コンポーネントの最新バージョンを実行します。
docker-compose_v3_alpine_pgsql_local.yaml 構成ファイルは、Zabbix 5.4 の最新バージョンをローカルにビルドし、PostgreSQL データベースをサポートする Alpine Linux で Zabbix コンポーネントを実行します。
docker-compose_v3_centos_mysql_latest.yaml 構成ファイルは、MySQL データベースをサポートする CentOS 8 で Zabbix 5.4 コンポーネントの最新バージョンを実行します。
docker-compose_v3_centos_mysql_local.yaml 構成ファイルは、Zabbix 5.4 の最新バージョンをローカルにビルドし、MySQL データベースをサポートする CentOS 8 で Zabbix コンポーネントを実行します。
docker-compose_v3_centos_pgsql_latest.yaml 構成ファイルは、PostgreSQL データベースをサポートする CentOS 8 で Zabbix 5.4 コンポーネントの最新バージョンを実行します。
docker-compose_v3_centos_pgsql_local.yaml 構成ファイルは、Zabbix 5.4 の最新バージョンをローカルでビルドし、PostgreSQL データベースをサポートする CentOS 8 で Zabbix コンポーネントを実行します。
docker-compose_v3_ubuntu_mysql_latest.yaml 構成ファイルは、MySQL データベースをサポートする Ubuntu 20.04 で Zabbix 5.4 コンポーネントの最新バージョンを実行します。
docker-compose_v3_ubuntu_mysql_local.yaml 構成ファイルは、Zabbix 5.4 の最新バージョンをローカルにビルドし、MySQL データベースをサポートする Ubuntu 20.04 で Zabbix コンポーネントを実行します。
docker-compose_v3_ubuntu_pgsql_latest.yaml 構成ファイルは、PostgreSQL データベースをサポートする Ubuntu 20.04 で最新バージョンの Zabbix 5.4 コンポーネントを実行します。
docker-compose_v3_ubuntu_pgsql_local.yaml 構成ファイルは、Zabbix 5.4 の最新バージョンをローカルにビルドし、PostgreSQL データベースをサポートする Ubuntu 20.04 で Zabbix コンポーネントを実行します。

Docker Compose ファイルは、Docker Compose のバージョン 3 をサポートしています。

ストレージ

Docker Composeは、composeファイルを使ってZabbixコンポーネントを実行すると、composeファイルのあるフォルダに
zbx_envディレクトリが作成されます。このディレクトリには、上記のVolumesセクションで説明したものと同じ構造の
データベースを格納するためのディレクトリが作成されます。

また、/etc/localtime/etc/timezone ファイル用の読み込み専用ボリュームも用意されます。

環境ファイル

github.comのcomposeファイルと同じディレクトリに、composeファイル内の各コンポーネントのデフォルトの環境変数が書かれた
ファイルがあります。これらの環境ファイルは、.env_<コンポーネントの種類>のような名前になっています。

例 1

# git checkout 5.4
       # docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d

このコマンドは、Zabbix コンポーネントごとに最新の Zabbix 5.4 イメージをダウンロードし、デタッチ モードで実行します。

github.com の公式 Zabbix リポジトリから構成ファイルを含む .env_<type of component> ファイルをダウンロードしてください

例 2

# git checkout 5.4
       # docker-compose -f ./docker-compose_v3_ubuntu_mysql_local.yaml up -d

このコマンドは、ベース イメージの Ubuntu 20.04 (focal) をダウンロードし、Zabbix 5.4 コンポーネントをローカルでビルドしてデタッチ モードで実行します。