docker-composeを使ってZabbixの環境を作成する

#docker-composeを使ってZabbixの環境を作成する

忘備録です。
むずかしいことや詳しいことは苦手なのでシンプルにかきます。

思いついた時に、色々書き加えます。

参考サイト1：[Zabbix公式コンテナとdocker-compose使って検証環境を簡単に作成削除](https://yomon.hatenablog.com/entry/2018/03/29/Zabbix%E5%85%AC%E5%BC%8F%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%A8docker-compose%E4%BD%BF%E3%81%A3%E3%81%A6%E6%A4%9C%E8%A8%BC%E7%92%B0%E5%A2%83%E3%82%92%E7%B0%A1%E5%8D%98%E3%81%AB%E4%BD%9C%E6%88%90)
参考サイト2：[zabbix/DockerHub](https://hub.docker.com/u/zabbix/)
参考サイト3：[Zabbixドキュメント3.0](https://www.zabbix.com/documentation/3.0/manual/installation/containers)


##0.簡単に、3つの前提知識
「docker-composeを使ってZabbixの環境を作成する」前に、簡単に、３つの基礎事項をしるします。

１. [Dockerとは/Qiita](https://qiita.com/saekom/items/221527f3ceca645dd78b)
　-> コンテナ型の仮想環境を、作成・配布・実行するためのプラットフォーム。
２. [docker-compose とは/Qiita](https://qiita.com/saekom/items/db701f795718a2364222)
　-> 複数のコンテナからなるサービスを構築・実行する手順を自動的にし、管理を容易にする機能。
３. [Zabbixとは/Qiita](https://qiita.com/puripuri_corgy/items/fc725758f1720d3fab24)
　-> 無料のオープンソースで、複数のアプリケーションを監視できる統合監視システム。



##0.+@ 環境を構成する前に、プラスアルファ
1.[Zabbix/Qiita](https://qiita.com/saekom/items/4cc0d01c5abfbb2ec5d4)の構成
![IMG_3946.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366833/3ed8d169-b70e-60a7-0812-d063edf00c8c.jpeg)


2.今回の環境構成
![IMG_3957.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366833/1cf6f33c-76e8-c3b2-8d9b-50e7fe192bca.jpeg)
なんとなく頭に入れておくと、いいと思います。





##1.変数ファイル(.env)を作成する
`docker-compose.yml`と同じディレクトリに、
`.env` という名前のファイルを新規作成します。

▼▼`.env`の中身

```
OS=alpine
VERSION=3.0.15
DB_NAME=zabbix
DB_USER=zabbix
DB_USER_PASSWORD=zabbix
DB_ROOT_PASSWORD=zabbix
HTTP_PORT=8080
TIME_ZONE=Asia/Tokyo

# 0 - basic information about starting and stopping of Zabbix processes;
# 1 - critical information
# 2 - error information
# 3 - warnings
# 4 - for debugging (produces lots of information)
# 5 - extended debugging (produces even more information)
LOG_LEVEL=3
```

※設定値は適宜変更可能。
※バージョンは、[こちらのdocker公式サイト](https://hub.docker.com/r/zabbix/zabbix-server-mysql/tags/)を参考にしてください。


##2.docker-compose.ymlファイルを作成する
`.env` ファイルで定義した変数を利用する形、だそう。

▼▼`docker-compose.yml`の中身

```
version: "3"
services:
  zabbix_db:
    image: mysql:5.7
    environment:
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_USER_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
  zabbix_server:
    image: zabbix/zabbix-server-mysql:${OS}-${VERSION}
    environment:
      - DB_SERVER_HOST=zabbix_db
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_USER_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - ZBX_DEBUGLEVEL=${LOG_LEVEL}
    ports:
      - "10051:10051"
    links:
      - zabbix_db
  zabbix_web:
    image: zabbix/zabbix-web-apache-mysql:${OS}-${VERSION}
    environment:
      - ZBX_SERVER_HOST=zabbix_server
      - DB_SERVER_HOST=zabbix_db
      - MYSQL_DATABASE=${DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_USER_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - PHP_TZ=${TIME_ZONE}
    ports:
      - ${HTTP_PORT}:80
    links:
      - zabbix_server
      - zabbix_db
  zabbix_agent:
    image: zabbix/zabbix-agent:${OS}-${VERSION}
    privileged: true
    environment:
      - ZBX_SERVER_HOST=zabbix_server
    expose:
      - "10050"
    links:
      - zabbix_server
```

##3.いざ初期構築

▼▼コマンドで、以下のコマンドを打ち込みます。
-dをつけないとフォアグラウンドで実行されてログが流れる、とのこと。

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

```

# ログ確認
docker-compose logs -f
```

※ポート番号(ここでは8080)が被っているよ、とエラーが出たので、
　8000なり8001なり、好きなポート番号に変えました。


無事にコマンドが通ると、
http://<docker-host>:8080(私の場合は`http://localhost:8080/`)
に繋なぐと、以下の画面が出ます！
<img width="1136" alt="スクリーンショット 2019-07-16 21.22.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366833/55226026-a7bd-be25-6d90-e5d348d3b48c.png">


やったね！
初期ユーザ `admin` / `zabbix` でログインできます。

##4.日本語化
右上の①をクリックし、
言語を②Japaneseに選択します。
<img width="1134" alt="スクリーンショット 2019-07-16 21.26.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366833/f65f5efd-0834-8329-ef75-f59788544aef.png">




##5.簡単なZabbixの設定
Zabbix Server自身にはAgentがいないので、
以下のようにAgentのNICをDNSで zabbix_agent　を見るように変更します。
<img width="1136" alt="スクリーンショット 2019-07-16 21.24.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366833/269e8f7c-020a-4828-34ab-b402deba297d.png">


後は有効化して使います。

##5.主なdocker-composeコマンド
フォアグラウンドで起動したものをCtrl-Cで落としたり、
stopしただけの場合は、DB等のデータが残ります。

▼▼起動と停止のコマンド

```
docker-compose stop
docker-compose start
```

▼▼バージョンを切り替えたい場合など、データ削除したい場合はdbのコンテナを削除してupし直したり、downで全環境削除してupし直します。

```
docker-compose rm zabbix_db
docker-compose down
```