Zabbix 5.x(latest)をDocker Composeで動かす
ふと年始に自宅Zabbixをコンテナに移行したくなったので、Docker Composeで動かすためにやったことをメモに残す。
- 想定読者
- 環境
- インストール
想定読者
- Zabbixの構築・運用経験がある人
- Zabbix起動後の初期セットアップ方法などは割愛
- DockerやDocker Composeしたことがある人
- Docker等のインストール方法は割愛
環境
- OS : Ubuntu Server 20.04.1 LTS
- Docker : 20.10.1
- Docker-compose : 1.25.0
インストール
0. 想定環境
Zabbix Server
- コンテナで実行する
Zabbix Agent2
- コンテナではなく、ホストOSにインストールする
- 今後ホスト上で監視項目を追加していきたいと思ったときに、監視対象へのアクセス権などの制御や運用がコンテナだと面倒そうだなと思ったので
- Zabbix Agent自身と他のアプリケーションの干渉があまり想定できなかったため
0. インストールドキュメント
5 INSTALLATION FROM CONTAINERS
基本的に上記オフィシャルドキュメントに記載されている内容をベースに進めていく。
1. 構成ファイルの取得
zabbix / zabbix-docker をクローンする。
$ git clone https://github.com/zabbix/zabbix-docker.git
2. Server構成の選択
README.md
のUsageやインストールドキュメントに記載があるように、複数のcomposeファイルが含まれている。
選択肢として下記の選択が与えられており、好きなものを選べばよい。
- ベースイメージ : alpine or Centos or Ubuntu
- データベース : MySQL or PostgreSQL
- コンテナイメージのビルド : 最新のビルド済みイメージを使用する or ローカルでビルドする
今回は下記理由によりalpine & MySQL & latestを選択し、docker-compose_v3_alpine_mysql_latest.yaml
を選定することとした。
- コンテナ内を弄るつもりがないので運用上UbuntuやCentOSが使いやすいとかもなく、alpineが一番スリムであったため
- Zabbix + MySQLで過去に運用しており、特にPostgreSQLを使わなければならないようなライセンス上の都合もなかったため
- ローカルでビルドする必要性がなく、既にベンダー側でテスト済みのイメージを利用したほうが変にはまる要素がないと思ったため
選定したyamlファイルをdocker-composeファイルとしてコピーする。
$ cd zabbix-docker $ cp docker-compose_v3_alpine_mysql_latest.yaml docker-compose.yaml
(参考)ファイル構成
クローンしたリポジトリは、下記のようなファイル・ディレクトリが含まれている。
ほぼすべてのディレクトリ
- 中に
alpine
,centos
,ubuntu
のディレクトリが含まれており、各ベースイメージからコンテナイメージをビルドするためのDockerfileが含まれている - latestを選択すると使うことはないはず
.env_
から始まるファイル
- Zabbixサーバを構築する際に与える必要のある変数が含まれるファイル
zabbix_server.conf
などに与える値も含む
- デフォルトのままでも起動可能
- 必要に応じて編集する
.MYSQL_
or .POSTGRES_
から始まるファイル
- DBのシークレット情報を持つファイル
- デフォルトのままでも起動可能、必要に応じて編集する。
- User名やパスワードは変更するべき?
- DBはホストOSから外へはポートを公開していない
- ホストOSからは接続可能なため、万が一ホストがやられた際のデータ保護のためには必要…でもホストがやられているときは手遅れでは
docker-compose_v3_
から始まるファイル
- docker-composeファイル
- 前述の通り選択してcpして利用する。
なお、docker-compose up
後からzbx_env
ディレクトリが生成され、コンテナが使用するデータが保存されていく。別の場所が良いのであれば頑張ってyamlの記述を置換する。
3. docker-compose.yaml
の編集
必要なコンポーネントの選択
本ファイル内には下記コンポーネントが含まれており、services内で不要なものがあればコメントアウトもしくは該当箇所を削除する
- Zabbix Server(必須)
- zabbix-server
- Zabbix Proxy(不要または選択)
- zabbix-proxy-sqlite3
- zabbix-proxy-mysql
- Web(選択)
- Zabbix Agent(不要または選択)
- zabbix-agent
- その他(不要または選択)
- DB(必須)
今回は下記services以外はすべて削除した
- zabbix-server - zabbix-web-apache-mysql - zabbix-snmptraps (SNMPトラップ監視のため) - mysql-server - db_data_mysql
Zabbix-ServerのIP固定
ホストOS上でインストールしたZabbix Agentと通信する際は、DockerのNetworkで通信を行う。zabbix_agent2.conf
にZabbix ServerのIPを記載する必要があるが現在の状態では与えられた下記ネットワークIPプールから順次IPが割り当てられるため、起動毎にIPが変化する。
networks: zbx_net_frontend: driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" ipam: driver: default config: - subnet: 172.16.238.0/24
そのため、Zabbix ServerのIPを固定化する。今回はデフォルトで記載されている172.16.238.0/24
から172.16.238.100
を使用する。
下記のようにipv4_address: 172.16.238.100
を追記する。
services: zabbix-server: image: zabbix/zabbix-server-mysql:alpine-5.2-latest (中略) networks: zbx_net_backend: aliases: - zabbix-server - zabbix-server-mysql - zabbix-server-alpine-mysql - zabbix-server-mysql-alpine zbx_net_frontend: ipv4_address: 172.16.238.100
4. env_
の編集
.env_web
PHPのTimeZone設定をJSTにする。下記内容を記述。
PHP_TZ=Asia/Tokyo
.env_srv
zabbix_server.conf
で設定しなければならない内容を記述する。
今回はESXiを監視するために下記内容を追記し有効化及び監視間隔の調整を実施。
ZBX_STARTVMWARECOLLECTORS=4 ZBX_VMWAREFREQUENCY=300 ZBX_VMWAREPERFFREQUENCY=300
5. 起動
$ sudo docker-compose up -d
6. ブラウザでアクセス
http://<HostIP>/
にアクセスし、初期アカウントでログインできることを確認。
7. Zabbix Agent2のインストール
Download and install ZabbixからAgentに必要な箇所を抜粋
$ wget https://repo.zabbix.com/zabbix/5.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.2-1+ubuntu20.04_all.deb $ sudo dpkg -i zabbix-release_5.2-1+ubuntu20.04_all.deb $ sudo apt update $ sudo apt install zabbix-agent2
その後、/etc/zabbix/zabbix_agent2.conf
で固定化したサーバのIPを指定してサービスを再起動、ZabbixServer側からもZabbixAgentのIPをホストの127.0.0.1からホストのIPに変更して保存すればホストOSの監視が開始される。
また、zabbixユーザを下記コマンドでdockerグループに参加させ、dockerテンプレートと結びつけると、コンテナの監視が追加される。
$ sudo gpasswd -a zabbix docker