初心者向け!DockerコンテナでZabbixサーバーを構築する手順

こんにちは、SCSKの坂木です。

本記事では、DockerコンテナでZabbixサーバを構築する手順をお届けします。

コンテナ版は構築が速く、環境の複製や破棄もしやすい反面、「設定ファイルはどこ?」など通常サーバ版とは勝手が違う部分もあります。本記事では、Amazon Linux 2023上にZabbix 7.0 LTSを構築する手順を、「💡Tips:dnfインストール版との違い」を交えながら解説します。

 

検証環境

 


Docker / Docker Composeのインストール

Amazon Linux 2023にDockerを入れます。

Docker Engineとgitをインストール
#dnf install docker git

Dockerサービスを起動&自動起動設定
#systemctl enable --now docker

動作確認
#docker --version
Docker version 25.0.14, build 0bab007

 

続いてDocker Compose v2をプラグインとして配置します。AL2023の標準リポジトリには含まれていないため、GitHubから直接取得します。

#DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
#mkdir -p $DOCKER_CONFIG/cli-plugins
#curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
#chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

#docker compose version
Docker Compose version v5.3.1

 


Zabbix公式リポジトリの取得

Zabbix公式が zabbix/zabbix-docker というリポジトリでDocker Compose用のファイル一式を公開しているので、これを git clone するだけです。

#git clone https://github.com/zabbix/zabbix-docker.git
#cd zabbix-docker

LTS版(7.0)を指定
#git checkout 7.0
 

ディレクトリの中身を見てみましょう。

#ls -la
 

主なファイルは以下の通りです。

 

コンテナ版のZabbixは、「Zabbix Server」「Web」「DB」「Agent」がすべて別々のコンテナとして起動し、Docker Compose定義でひとまとめに管理されるのが特徴です。今回はZabbix公式が配布しているDocker Composeのファイル一式を利用して構築します。

💡Tips①:dnfインストールとの構成の違い

dnfでの通常インストールでは、zabbix-server-mysqlzabbix-web-nginx-mysqlmysql-server などを1つずつインストールし、それぞれ systemctl start していく手順が必要でした。

コンテナ版では、Zabbix公式が「Server」「Web」「DB」「Agent」を全部セットにしたDocker Compose設定を配布しているため、セットで動かす前提の設計になっています。個別インストールではなく「まとめて起動する」思想に切り替わる点が最大の違いです。

 


コンテナの起動

以下のコマンドでコンテナを起動します。

コンテナ起動
#docker compose up -d
 

起動状況を確認:

#docker compose ps

Up (healthy) のコンテナが並んでいれば成功です。

NAME                                     STATUS
zabbix-docker-mysql-server-1             Up (healthy)
zabbix-docker-zabbix-server-1            Up
zabbix-docker-zabbix-web-nginx-mysql-1   Up (healthy)

 

💡Tips②:dnfインストールとの手順数の違い

dnfでの通常インストールでは、以下のステップが必要でした:

  1. Zabbixリポジトリを追加(rpm -Uvh https://repo.zabbix.com/...
  2. dnf install zabbix-server-mysql zabbix-web-nginx-mysql zabbix-sql-scripts zabbix-agent
  3. MySQLインストール&初期化
  4. データベース作成&ユーザー作成&権限付与
  5. スキーマとテンプレートをインポート(zcat schema.sql | mysql -uzabbix -p zabbix
  6. /etc/zabbix/zabbix_server.confDBPassword を編集
  7. systemctl start zabbix-server zabbix-agent nginx php-fpm

これがコンテナ版だと、リポジトリの取得とdocker compose up -dコマンドで全部終わります。Zabbixが動く環境を素早く用意したい用途では、圧倒的にコンテナ版が速いです。

 


Zabbix Web UIへの初回ログイン

ブラウザで以下のURLにアクセスします。

http://<ZabbixサーバのIP>/

初期ログイン情報:

  • ユーザーAdminAは大文字
  • パスワードzabbix

💡Tips③:dnfインストール時とのURLの違い

dnfインストール(Apache構成)では http://<IP>/zabbix/ のように /zabbix パスを付けるのが定番でしたが、コンテナ版のNginxはルート / で配信しています。パスに /zabbix を付けると404になります。パッケージ版に慣れているとクセで打ってしまいがちなポイントです。

 


DB(MySQL)接続のパスワードの変更

DBへ接続する際に利用するパスワードの変更方法を紹介します。

MySQLコンテナに入ってパスワードを変更します。

#cd ~/zabbix-docker

現在のrootパスワードで、DBにログイン
#docker compose exec mysql-server mysql -uroot -p"$(cat env_vars/.MYSQL_ROOT_PASSWORD)"
 

MySQLプロンプトで:

日常運用で使う zabbixユーザー(Zabbix ⇔ DB接続用)のパスワード変更
>ALTER USER 'zabbix'@'%' IDENTIFIED BY 'NewZbxPass!';

ヘルスチェック・初期セットアップで使う rootユーザーのパスワード変更
>ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewRootPass!';
>FLUSH PRIVILEGES;
>EXIT;
 

続いて、シークレットファイル(DBパスワードの保存先)を更新します。
ここで注意すべきは、ファイルの末尾に改行が入るとパスワード末尾に改行が付いたと解釈されて認証失敗するため、echo -n を必ず使う点です。

改行を入れないため -n を必ず付ける
#echo -n 'NewZbxPass!' > env_vars/.MYSQL_PASSWORD
#echo -n 'NewRootPass!' > env_vars/.MYSQL_ROOT_PASSWORD

Zabbix Server と Web を再起動
#docker compose restart zabbix-server zabbix-web-nginx-mysql
 

設定ファイルの変更方法

コンテナ版では設定ファイルの実体が変わるので整理しておきます。

Zabbix Server(zabbix_server.conf 相当)

変更対象:env_vars/.env_srv

コンテナ版では、コンテナ起動時に環境変数を読んでzabbix_server.confを自動生成する仕組みになっています。そのため、zabbix_server.conf を直接編集しても再起動で上書きされてしまいます。永続的な設定は env_vars/.env_srv に定義された環境変数に記載します。

env_vars/.env_srv (真の設定源・永続)
      ↓ コンテナ起動時
/etc/zabbix/zabbix_server.conf (一時ファイル・使い捨て)

命名ルールはシンプルで、zabbix_server.conf のパラメータ名の頭に ZBX_ を付けたものが環境変数名になります。
(例:CacheSizeZBX_CACHESIZE

 

編集:env_vars/.env_srvを修正してみる
ファイルを編集
#vi env_vars/.env_srv
 

該当行のコメント(#)を外して値を編集:

STARTPOLLERSとCACHESIZEを増やす場合の設定例

ZBX_STARTPOLLERS=20           #この行を編集 
# ZBX_STARTPOLLERSUNREACHABLE=1
# ZBX_VMWARECACHESIZE=8M
ZBX_CACHESIZE=128M           #この行を編集
# ZBX_CACHEUPDATEFREQUENCY=10
# ZBX_HISTORYCACHESIZE=16M

 

反映
#docker compose restart zabbix-server
 

なお、全ての設定値が環境変数として提供されているわけではありません。PidFileLogFileAlertScriptsPath などのパス系はコンテナ内で固定されています。もしそれらを変更したい場合は、カスタム zabbix_server.conf を作ってボリュームマウントする必要があります。

💡Tips④:dnfインストール時との設定ファイルの違い

dnfインストール版では /etc/zabbix/zabbix_server.confvi で直接編集し、systemctl restart zabbix-server で反映していました。

コンテナ版では、編集対象が .conf ではなく env_vars/.env_srv(環境変数ファイル) に変わります。コンテナ内の .conf は起動時に毎回自動生成されるため、直接編集しても意味がない点が最大の違いです。パラメータ名も CacheSizeZBX_CACHESIZE のように ZBX_ プレフィックス付きになります。

 

MySQL(my.cnf 相当)

変更対象compose_databases.yaml の command: セクション
Zabbix Serverが環境変数方式だったのに対し、MySQLコンテナは公式のMySQLイメージをそのまま利用しています。
このコンテナのMySQLパラメータは、compose_databases.yamlmysql-server: にある command: セクションで、mysqld の起動オプションとして直接定義されています。
ここには既定で文字コード設定などが記述されており、この既存の記述に追記することでパラメータを変更できます。
まず、編集対象である command: セクションが現在どうなっているかを確認します。
#grep -A 10 'mysql-server:' compose_databases.yaml

 

以下のように、既定で設定されているMySQLパラメータが表示されます。
mysql-server:
image: "${MYSQL_IMAGE}:${MYSQL_IMAGE_TAG}"
command:
- mysqld
- --skip-mysqlx
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin

 

あわせて、各種パラメータが現在どの値で動いているかも、稼働中のMySQLに接続して確認しておきましょう。
#docker compose exec mysql-server mysql -uroot -p"$(cat env_vars/.MYSQL_ROOT_PASSWORD)" -e "SHOW VARIABLES WHERE Variable_name IN ('innodb_buffer_pool_size','max_connections','slow_query_log');"

+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
| max_connections | 151 |
| slow_query_log | OFF |
+-------------------------+-----------+

 

編集:command: に追記してみる

Zabbixの監視データ書き込み性能に効くInnoDBバッファプールを2GBに設定してみます。既存の行の下に、--innodb-buffer-pool-size=2G の1行を追記します。

ファイルを編集
#vi compose_databases.yaml

mysql-server:
image: "${MYSQL_IMAGE}:${MYSQL_IMAGE_TAG}"
command:
- mysqld
- --skip-mysqlx
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --innodb-buffer-pool-size=2G    #この行を追加

 

追記したらMySQLコンテナを再作成して反映します。
#docker compose up -d mysql-server

 

編集前と同じコマンドをもう一度実行し、値が変わっていれば成功です。

#docker compose exec mysql-server mysql -uroot -p"$(cat env_vars/.MYSQL_ROOT_PASSWORD)" -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

+-------------------------+------------+
| Variable_name | Value |
+-------------------------+------------+
| innodb_buffer_pool_size | 2147483648 |   #2GBに変更
| max_connections | 151 |
| slow_query_log | OFF |
+-------------------------+------------+

 

💡Tips⑤:dnfインストール時とのMySQL設定の違い

dnfインストール版では /etc/my.cnf.d/*.cnf に設定を書いていました。

コンテナ版では、Zabbix Serverと違って環境変数方式ではなく、通常サーバ版と同じ my.cnf 書式のファイルをボリュームマウントする方式です。書式は完全に同じなので、MySQL設定に関しては通常サーバ版の知識がそのまま流用できるのが嬉しいポイントです。

 


まとめ

本記事では、DockerでZabbix 7.0 LTSを構築する手順を、通常サーバ版との違いを交えて解説しました。

  • 構築は docker compose up -d の1コマンドで完了し、パッケージ版より圧倒的に速い
  • 設定の管理元が変わるのが最大の違い。zabbix_server.conf はホスト上になく、env_vars/.env_srv(環境変数)で管理する
  • MySQLの設定compose_databases.yamlcommand: で調整する

「コンテナは難しそう」と感じていた方も、やっていることは通常サーバ版と本質的に同じで、設定の”置き場所”と”反映方法”が変わっただけ、とお分かりいただけたかと思います。

最後までお読みいただき、ありがとうございました!

 

▼弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。

★Zabbixの基礎をまとめたeBookを公開しております!★

Zabbix資料ダウンロード|SCSK Plus サポート for Zabbix
Zabbix監視構築に必要な知識と最新機能についての資料をダウンロードできるページです。世界で最も人気のあるオープンソース統合監視ツール「Zabbix」の導入構築から運用保守までSCSKが強力にサポートします。

 

★SCSK Plus サポート for Zabbix★

SCSK Plus サポート for Zabbix
世界で最も人気のあるオープンソース統合監視ツール「Zabbix」の導入構築から運用保守までSCSKが強力にサポートします。

 

★SCSK Zabbixチャンネル★

SCSK Zabbixチャンネル
SCSK Zabbixチャンネルでは、Zabbixのトレンドや実際の導入事例を動画で解説。明日から使える実践的な操作ナレッジも提供しており、監視業務の効率化に役立つヒントが満載です。 最新のトピックについては、リンクの弊社HPもしくはXアカ...

 

★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★

【公式】SCSK Zabbix (@SCSK_Zabbix) on X
SCSKが提供するZabbixサービスのオフィシャルアカウントです。#Zabbix #SCSKPlusサポートforZabbix #監視 #SCSK
×
タイトルとURLをコピーしました