概要
Zabbix 3.0 の検証用に Docker で簡単に環境を構築できるようにした。構築には Docker Compose を使い Zabbix Server 用コンテナと MariaDB コンテナを稼働・管理する。
動作条件
今回の確認を行ったのは以下の環境。
- CentOS 7.2 (kernel 3.10.0-327.10.1.el7.x86_64)
- Docker Engine 1.10 + Docker Compose 1.6
- Zabbix コンテナ
- zabbix-3.0
- zabbix-db-mailadb
環境構築
作業方針
zabbix-community-docker で配布されている Zabbix 3.0 の Docker イメージを使い環境構築を行う。
コンテナは Docker Compose を使って一括管理できるようにする。ただし、コミュニティで配布されている docker-compose.yml は v2 フォーマットに書き換え、以下の環境を構築する。
配布されていた docker-compose.yml をそのまま使わず、v2 フォーマットに書き換えた理由は以下の通り。
- サービス(Zabbix, Mariadb)とボリュームを分けて扱い安くなる
- v2 フォーマットは depends_on があるため、DB コンテナ起動後に Zabbix Server コンテナを起動させることが可能(既にコンテナ内の起動スクリプト run.sh の完成度が高かったので、活用できる)
環境構築手順
Docker Machine 等を使うなど、Docker Engine は何らかの方法でインストール済みでなければ、次のコマンドを実行して Docker Engine のインストールと起動を行う(Dockerが配布する最新版のバイナリ・パッケージをセットアップする方法)。
# curl -sSL https://get.docker.com/ | sh
# systemctl start docker
次に docker-compose
のバイナリをセットアップする。
# curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
Compose が利用可能かどうかは、バージョン番号が表示可能かどうかで確認する。以下、正常な例。
$ docker-compose version
docker-compose version 1.6.2, build 4d72027
docker-py version: 1.7.2
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
次に Compose のプロジェクト(作業単位)に使うディレクトリを作成し、移動する。ここでは zabbix3
とするが、任意の名称で構わない。
$ mkdir zabbix3
$ cd zabbix3
このディレクトリ内に docker-compose.yaml
ファイルを作成する。
version: '2'
services:
zabbix-db:
image: zabbix/zabbix-db-mariadb
volumes:
- zabbix-db-storage:/var/lib/mysql
- backups:/backups
- /etc/localtime:/etc/localtime:ro
environment:
- MARIADB_USER=zabbix
- MARIADB_PASS=my_password
zabbix-server:
image: zabbix/zabbix-3.0:latest
depends_on:
- zabbix-db
ports:
- "80:80"
- "10051:10051"
volumes:
- /etc/localtime:/etc/localtime:ro
links:
- zabbix-db:zabbix.db
environment:
- ZS_DBHost=zabbix.db
- ZS_DBUser=zabbix
- ZS_DBPassword=my_password
volumes:
zabbix-db-storage:
driver: local
backups:
driver: local
ベースになっているのは コミュニティ版 docker-compose.yml だが、特徴と変更点は以下の通り。
- 利用しているイメージや環境変数は同じもの
- Compose v2 フォーマットに書き換えるため、サービスとボリュームを定義
- v2 フォーマットのボリューム機能を使うため、zabbix-db-storage コンテナは使用しない
ファイル作成後は、必要なイメージを取得する。
$ docker-compose pull
Pulling zabbix-db (zabbix/zabbix-db-mariadb:latest)...
latest: Pulling from zabbix/zabbix-db-mariadb
a3ed95caeb02: Pull complete
196355c4b639: Pull complete
39ac25574789: Pull complete
a71e49d71685: Pull complete
Digest: sha256:659022fb65ec3843472c42d9722f3bf65f8f9f13187563c7d8e73c6a5ff5c4c1
Status: Downloaded newer image for zabbix/zabbix-db-mariadb:latest
Pulling zabbix-server (zabbix/zabbix-3.0:latest)...
latest: Pulling from zabbix/zabbix-3.0
a3ed95caeb02: Already exists
196355c4b639: Already exists
e83e94d3bc97: Pull complete
a586f6047ba2: Pull complete
b33c7f8446ba: Pull complete
92aa3f0ccb13: Pull complete
Digest: sha256:2585752c00c8e784f899bef3fef0e1092574ca72396716cdd39a3cd75148b56d
Status: Downloaded newer image for zabbix/zabbix-3.0:latest
エラーが出なければ、イメージが取得できているか確認する。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
zabbix/zabbix-3.0 latest 7e2d6c4d3b1d 7 hours ago 719.6 MB
zabbix/zabbix-db-mariadb latest 85539c34211e 35 hours ago 554.4 MB
次に、Zabbix Server コンテナと Mariadb コンテナを docker-compose up -d
で起動する(-d はデタッチド・モードで実行=バックグラウンドで実行)。
$ docker-compose up -d
Creating network "zabbix3_default" with the default driver
Creating volume "zabbix3_zabbix-db-storage" with local driver
Creating volume "zabbix3_backups" with local driver
Creating zabbix3_zabbix-db_1
Creating zabbix3_zabbix-server_1
docker-compose ps
コマンドで、正常に動作しているか確認する。
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
zabbix3_zabbix-db_1 /run.sh Up 3306/tcp
zabbix3_zabbix- /config/bootstrap.s Up 0.0.0.0:10051->1005
server_1 h 1/tcp, 10052/tcp,
162/udp,
0.0.0.0:80->80/tcp
このとき MariaDB の初期セットアップが進行するので、1分ほど待つ必要がある。進行状況は docker-compose logs
コマンドで確認できる。
$ docker-compose logs
(略)
zabbix-server_1 | [WARNING 20:58:27] Zabbix database doesn't exist. Installing and importing default settings
zabbix-server_1 |
zabbix-server_1 | [LOG 20:58:27] Database and user created, importing default SQL
zabbix-server_1 |
zabbix-server_1 | [LOG 20:58:38] Import finished, starting
zabbix-server_1 | [LOG 20:58:38] Starting Zabbix version 3.0.1
(略)
zabbix-db_1 | ========================================================================
zabbix-db_1 | You can now connect to this MariaDB Server using:
zabbix-db_1 | mysql -uzabbix -pmy_password -h<host>
zabbix-db_1 |
zabbix-db_1 | For security reasons, you might want to change the above password.
zabbix-db_1 | The 'root' user has no password but only allows local connections
zabbix-db_1 | ========================================================================
Ctrl+C
でログの表示を中断できる。
Docker Compose に関する詳細は、ドキュメントをご覧ください。
- Docker Compose 概要
- http://docs.docker.jp/compose/overview.html
ブラウザ側での確認
あとは、ブラウザで http://<ホストIP>/
にアクセスすると Zabbix の初期画面が表示される。
ID: Admin
、 Password: zabbix
でログインする。ログイン直後は、画面右上の2番目、人の形のアイコン Admin (Zabbix Administratior)
をクリックし、Change password
ボタンを押し、パスワードを変更しておく。
この zabbix-server コンテナにはエージェントも稼働している。Zabbix に登録するには Configuration
-> Hosts
-> Zabbix server
の Disabled
をクリックし、Enabled
に切り替える。あとは、通常の Zabbix サーバのようにセットアップもできる。
おまけ:ホスト側にMariaDB の zabbix データをバックアップ
Docker ホスト上で以下のコマンドを実行(Compose プロジェクト名を変えている場合は、docker ps で正確なコンテナ名を確認すること)。
$ docker exec \
-ti zabbix3_zabbix-db_1 \
/zabbix-backup/zabbix-mariadb-dump -u zabbix -p my_password -o /backups
Configuration:
- host: 127.0.0.1 (127.0.0.1)
- database: zabbix
- user: zabbix
- output: /backups
Fetching list of existing tables...
Starting table backups...
0%.....12%.....24%......36%.......48%.....60%.....72%......84%84%......96%..
For the following large tables only the schema (without data) was stored:
- acknowledges
- alerts
- auditlog
- auditlog_details
- events
- history
- history_log
- history_str
- history_text
- history_uint
- trends
- trends_uint
Compressing backup file...
Backup Completed:
/backups/zabbix_cfg_127.0.0.1_20160331-2302_db-3.0.0.sql.gz
フルバックアップは
docker exec \
-ti zabbix3_zabbix-db_1 \
bash -c "\
mysqldump -u zabbix -pmy_password zabbix | \
bzip2 -cq9 > /backups/zabbix_db_dump_$(date +%Y-%m-%d-%H.%M.%S).sql.bz2"
データは `zabbix-dbコンテナ内の
/backup`` にバックアップをしている。しかし、ここは Compoes の設定で、コンテナ用の領域とは別に、ホスト側(ローカル)のボリュームに保管されている。確認するには
$ docker inspect zabbix3_zabbix-db_1
(略)
"Mounts": [
(略)
{
"Name": "zabbix3_backups",
"Source": "/var/lib/docker/volumes/zabbix3_backups/_data",
"Destination": "/backups",
"Driver": "local",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
この Source
に書かれているのが、ホスト上の実体ディレクトリであることがわかる。あとは、ホスト上で直接確認できる。
ls -al /var/lib/docker/volumes/zabbix3_backups/_data
total 6404
drwxr-xr-x 2 root root 4096 Mar 31 23:08 .
drwxr-xr-x 3 root root 4096 Mar 31 20:58 ..
-rw-r--r-- 1 root root 1048474 Mar 31 23:02 zabbix_cfg_127.0.0.1_20160331-2302_db-3.0.0.sql.gz
-rw-r--r-- 1 root root 1048472 Mar 31 23:07 zabbix_cfg_localhost_20160331-2307_db-3.0.0.sql.gz
-rw-r--r-- 1 root root 1048482 Mar 31 23:08 zabbix_cfg_localhost_20160331-2308_db-3.0.0.sql.gz
-rw-r--r-- 1 root root 1131890 Mar 31 23:05 zabbix_db_dump_2016-03-31-23.05.45.sql.bz2
-rw-r--r-- 1 root root 1131862 Mar 31 23:06 zabbix_db_dump_2016-03-31-23.06.29.sql.bz2
-rw-r--r-- 1 root root 1131765 Mar 31 23:06 zabbix_db_dump_2016-03-31-23.06.37.sql.bz2
Enjoy!