Zabbix 5.0 を Docker Compose で起動する手順


# これは何？

[Zabbix](https://zabbix.com/) はオープンソースで自由に使える監視ツールです。 [Zabbix 公式 Docker イメージ](https://hub.docker.com/u/zabbix/) を使い、Docker Compose で MySQL 等のデータベースを一括セットアップする手順をまとめました。

慣れれば Zabbix 5.0 の環境を 5 分程度でセットアップできるでしょう。


公式に [Docker Compose 用 YAML ファイルが配布](https://github.com/zabbix/zabbix-docker)されているため、そちらを利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/9a15229d-95c2-b23c-209a-01943bd8a751.png)


背景は、Zabbix 5.0 を簡単に試す環境を作りたかったからです。Zabbix 4.0 までは zabbix/zabbix-appliance という環境が１つにまとまった Docker イメージが公式から配布されていました。Zabbix 5.0 は、現時点では RHEL 対応のものしか公開されていないため、Docker Compose を使う手順で検証をしました。

# 手順

## Docker と Docker Compose をセットアップ

（既に設定済みの環境では次へ）

### 参考：CentOS 7.x の場合

```
curl -fsSL https://get.docker.com -o get-docker.sh
sh ./get-docker.sh
systemctl enable dockern
systemctl start docker
yum -y install docker-compose
```


## GitHub のリポジトリを clone して移動

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


## 設定ファイルの準備

今回は CentOS + Nginx + MySQL の組み合わせの [Docker Compose ファイル](https://github.com/zabbix/zabbix-docker/blob/5.0/docker-compose_v3_centos_mysql_latest.yaml) を使用します。同ファイルには `latest` と `local` がありますが、ここでは前者(latest)の手順です。後者(local)はイメージをローカルでビルドします。 なお、他にも Alpine や Ubuntu をベースイメージのものや、バックエンドが PostgreSQL も配布されています。

```
cp docker-compose_v3_centos_mysql_latest.yaml docker-compose.yaml
```

以後、YAML 設定ファイルを明示しない場合は  `docker-compose.yaml` を指します。

YAML ファイル中、MySQL のユーザやパスワードの設定ファイルは `.MYSQL_USER` 、 `.MYSQL_PASSWORD` 、 `.MYSQL_ROOT_PASSWORD` です。必要に応じて各ファイルを編集します。


## Docker イメージのダウンロード

```
docker-compose pull
```

イメージ一覧の確認は、 `dokcer images` :

```
$ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
mysql                            8.0                 a0d4d95e478f        4 hours ago         541MB
busybox                          latest              78096d0a5478        11 hours ago        1.22MB
zabbix/zabbix-web-apache-mysql   centos-5.0-latest   5c3418ac3645        31 hours ago        505MB
zabbix/zabbix-agent              centos-5.0-latest   6bd73926b75f        31 hours ago        256MB
zabbix/zabbix-proxy-sqlite3      centos-5.0-latest   4a01689b6f57        32 hours ago        267MB
zabbix/zabbix-server-mysql       centos-5.0-latest   465a30a32216        41 hours ago        360MB
zabbix/zabbix-web-nginx-mysql    centos-5.0-latest   f3a0f8c7659f        46 hours ago        487MB
zabbix/zabbix-java-gateway       centos-5.0-latest   1c3c611d4bb8        46 hours ago        395MB
zabbix/zabbix-proxy-mysql        centos-5.0-latest   91fd7fd05aec        46 hours ago        358MB
zabbix/zabbix-snmptraps          centos-5.0-latest   06c106b449cc        46 hours ago        283MB
```


## 起動

YAML ファイルが存在するディレクトリ上で、デタッチドモード（ `-d` オプション）を付けて起動します。

```
docker-compose up -d
```

状態の確認：

```
# docker-compose  ps
WARNING: Some services (zabbix-agent, zabbix-java-gateway, zabbix-proxy-mysql, zabbix-proxy-sqlite3, zabbix-server, zabbix-snmptraps, zabbix-web-apache-mysql, zabbix-web-nginx-mysql) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
            Name                          Command              State               Ports
----------------------------------------------------------------------------------------------------
zabbixdocker_db_data_mysql_1    sh                             Exit 0
zabbixdocker_mysql-server_1     docker-entrypoint.sh mysql     Up
                                ...
zabbixdocker_zabbix-agent_1     /sbin/tini -- /usr/bin/doc     Up
                                ...
zabbixdocker_zabbix-java-       docker-entrypoint.sh /usr/     Up
gateway_1                       ...
zabbixdocker_zabbix-proxy-      /sbin/tini -- /usr/bin/doc     Up       0.0.0.0:10071->10051/tcp
mysql_1                         ...
zabbixdocker_zabbix-proxy-      /sbin/tini -- /usr/bin/doc     Up       0.0.0.0:10061->10051/tcp
sqlite3_1                       ...
zabbixdocker_zabbix-server_1    /sbin/tini -- /usr/bin/doc     Up       0.0.0.0:10051->10051/tcp
                                ...
zabbixdocker_zabbix-            /usr/bin/supervisord -c /e     Up       0.0.0.0:162->1162/udp
snmptraps_1                     ...
zabbixdocker_zabbix-web-        docker-entrypoint.sh           Up       0.0.0.0:80->8080/tcp,
apache-mysql_1                                                          0.0.0.0:443->8443/tcp
zabbixdocker_zabbix-web-        docker-entrypoint.sh           Up       0.0.0.0:8081->8080/tcp,
nginx-mysql_1                                                           0.0.0.0:8443->8443/tcp
```
※ `zabbixdocker_db_data_mysql_1` が `Exit 0` の状態ですが、これは正常です。その他は `Up` です。


処理状況を見るには `docker-compose logs -f` です。次のような Zabbix Server が起動するログが出るまで待ちます。

```
zabbix-server_1            | Starting Zabbix Server. Zabbix 5.0.0 (revision 9665d62).
zabbix-server_1            | Press Ctrl+C to exit.
zabbix-server_1            |
zabbix-server_1            |      6:20200514:164942.480 Starting Zabbix Server. Zabbix 5.0.0 (revision 9665d62).
zabbix-server_1            |      6:20200514:164942.480 ****** Enabled features ******
zabbix-server_1            |      6:20200514:164942.480 SNMP monitoring:           YES
zabbix-server_1            |      6:20200514:164942.480 IPMI monitoring:           YES
zabbix-server_1            |      6:20200514:164942.480 Web monitoring:            YES
zabbix-server_1            |      6:20200514:164942.480 VMware monitoring:         YES
zabbix-server_1            |      6:20200514:164942.480 SMTP authentication:       YES
zabbix-server_1            |      6:20200514:164942.480 ODBC:                      YES
zabbix-server_1            |      6:20200514:164942.480 SSH support:               YES
zabbix-server_1            |      6:20200514:164942.480 IPv6 support:              YES
zabbix-server_1            |      6:20200514:164942.480 TLS support:               YES
zabbix-server_1            |      6:20200514:164942.480 ******************************
zabbix-server_1            |      6:20200514:164942.480 using configuration file: /etc/zabbix/zabbix_server.conf
zabbix-server_1            |      6:20200514:164942.493 current database version (mandatory/optional): 05000000/05000000
zabbix-server_1            |      6:20200514:164942.493 required mandatory version: 05000000
zabbix-server_1            |      6:20200514:164942.555 server #0 started [main process]
zabbix-server_1            |    200:20200514:164942.556 server #1 started [configuration syncer #1]
```

## 管理画面に接続

ウェブブラウザで `http://<IPアドレスまたはホスト名>` を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/709fa1dd-355b-9746-5dbf-608c1a602834.png)


[デフォルトのユーザ情報](https://www.zabbix.com/documentation/current/manual/quickstart/login) は、Username が `Admin` 、 Password が `zabbix` です。入力後、 `Sign in` をクリックします。

ログイン後、パスワードを変更します。

画面左下の `User Settings` をクリック → `Change password` をクリック → `Password` と `Password (once again) ` に入力後、 `Update` をクリックします。あわせて言語を日本語に変更したい場合は、 `Language English (en_GB)` を `Japanese (ja_JP)` に変更しておきます（ただし、デフォルトでは画像中の日本語が文字化けします）。

## Zabbix Server の `利用不可` を解消する

ログイン直後から、Zabbix Server が「利用不可」の障害となっています。デフォルトのままでは、Zabbix Server の状態を Zabbix agent経由で取得できません（理由は、デフォルトで Zabbix Server が `127.0.0.1` のエージェントに対し接続する設定だからです）。

これを回避するには、以下の手順で設定を変更します。監視先を `127.0.0.1` から `zabbix-agent` に変更します（Docker の bridge ネットワーク内では、サービス名で名前解決できるため、 `zabbix-agent` のサービス名を指定すると、自動的に zabbix-agent コンテナの IP アドレスに名前解決します）。

左メニューの「設定」→「ホスト」をクリックし、「Zabbix server」の名前をクリックします。
それから「インターフェース」の「IPアドレス」が 「127.0.0.1」になっていますが、これを消します。そして、 「DNS名」に `zabbix-agent` を入力し、接続方法の `DNS` をクリックし 、 `更新` をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/bc56548e-d9c1-e930-aafe-adbecadb77f5.png)




動作確認は左メニューの「監視データ」→「最新データ」をクリックします。Zabbix server から、各アイテムの値が取れています。グラフをクリックすると、リアルタイムに値が変わるのを確認できるでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/c088f6bd-a825-a368-f9e9-dd11eef7e465.png)



そのあと、ダッシュボードに戻ると「障害」になっていますが、３分後に解消されます（デフォルトでは３分間）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/5aecd2f8-cc64-481c-6660-e21173972901.png)


あとは色々触ってみましょう。リソース一覧グラフを見るには、「監視データ」→「ホスト」→「Zabbix server」をクリック→「グラフ」を選択が手っ取り早いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13002/ee7834c8-37f7-934b-5070-30d53147220a.png)


Enjoy!

## 参考

- Zabbix 公式ドキュメント
   -  [5 Installation from containers [Zabbix Documentation 5.0]](https://www.zabbix.com/documentation/current/manual/installation/containers#docker_compose)