Help us understand the problem. What is going on with this article?

Zabbix 3.0をDocker Composeで一度に実行する方法

More than 3 years have passed since last update.

概要

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-community-docker で配布されている Zabbix 3.0 の Docker イメージを使い環境構築を行う。

コンテナは Docker Compose を使って一括管理できるようにする。ただし、コミュニティで配布されている docker-compose.yml は v2 フォーマットに書き換え、以下の環境を構築する。

docker-compose-zabbix2.png

配布されていた 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 ファイルを作成する。

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 に関する詳細は、ドキュメントをご覧ください。

ブラウザ側での確認

あとは、ブラウザで http://<ホストIP>/ にアクセスすると Zabbix の初期画面が表示される。

zab3a.png

ID: Admin 、 Password: zabbix でログインする。ログイン直後は、画面右上の2番目、人の形のアイコン Admin (Zabbix Administratior) をクリックし、Change password ボタンを押し、パスワードを変更しておく。

この zabbix-server コンテナにはエージェントも稼働している。Zabbix に登録するには Configuration -> Hosts -> Zabbix serverDisabled をクリックし、Enabled に切り替える。あとは、通常の Zabbix サーバのようにセットアップもできる。

zabbix-monitor.png

おまけ:ホスト側に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!

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした