docker-compose習作① Zabbix-Serverの外部チェックアイテムで取得


docker-composeの習作ができたので、
作成の仕方を公開します。

Dockerサーバ環境は以下の通り

OS:CentOS Linux release 7.6.1810 (Core)
Docker:19.03.1
docker-compose:
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.7

目標としては、Zabbixサーバ(Ver.4.2.5)をマルチコンテナでデプロイして、
KukuluLIVEの視聴者数をZabbixで監視できるようにするとこまでとしています。

kukuLIVEはAPI開発をしているので、それを利用させてもらいます。
APIに関する記事はこちら

Dockerfileでイメージを作成

Dockerfile
FROM zabbix/zabbix-server-mysql:centos-4.2.5
RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo | tee /etc/yum.repos.d/microsoft.repo \
 && yum install -y powershell
COPY kukulu_viewers.ps1 /usr/lib/zabbix/externalscripts/

zabbix-server-mysqlにPowerShellをインストールし、
kukulu_viewers.ps1をコンテナ側の/usr/lib/zabbix/externalscripts/
コピーしています。kukulu_viewers.ps1は以下の通りの構文で、
KukuluLIVEの視聴者数をREST-APIで取得するようにしています。

kukulu_viewers.ps1
#!/usr/bin/pwsh

### 現在のKukuluLIVEの総視聴者数を確認するツール

# 総視聴者数取得関数
function kukulu_viewers() {
    $KUKULU =  Invoke-RestMethod -Uri https://live.erinn.biz/api/?category=live
    (($KUKULU).live.viewers | Measure-Object -Sum).Sum
}

    kukulu_viewers

資材が揃ったら、docker buildでイメージを作成します。

Dockerfileでイメージ作成
# mkdir /root/zabbix
# pwd
/root/zabbix
# ls
Dockerfile kukulu_viewers.ps1 docker-compose.yml
# docker build -f Dockerfile -t zabbix-server-mysql:kukulu-cs-4.2.5 .
Sending build context to Docker daemon  6.656kB
Step 1/3 : FROM zabbix/zabbix-server-mysql:centos-4.2.5
centos-4.2.5: Pulling from zabbix/zabbix-server-mysql
8ba884070f61: Pull complete
eb1e527c78ca: Pull complete
(中略)
Successfully built 7dbeee2be493
Successfully tagged zabbix-server-mysql:kukulu-cs-4.2.5
# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED              SIZE
zabbix-server-mysql          kukulu-cs-4.2.5     7dbeee2be493        About a minute ago   630MB
zabbix/zabbix-server-mysql   centos-4.2.5        80cd980c51d9        2 weeks ago          334MB

docker-compose.ymlでマルチコンテナをデプロイ

docker-compose.ymlでZabbix-Server、MySQL、Apache、Zabbix-Agentの
4つのコンテナをデプロイしていきます。

docker-compose.yml
version: "3"
services:
  zabbix_db:
    image: mysql:5.7.24
    environment:
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=zabbix
  zabbix_server:
    image: zabbix-server-mysql:kukulu-cs-4.2.5
    environment:
      - DB_SERVER_HOST=zabbix_db
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=zabbix
    ports:
      - "10051:10051"
    links:
      - zabbix_db
  zabbix_web:
    image: zabbix/zabbix-web-apache-mysql:centos-4.2.5
    environment:
      - ZBX_SERVER_HOST=zabbix_server
      - DB_SERVER_HOST=zabbix_db
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=zabbix
      - PHP_TZ=Asia/Tokyo
    ports:
      - 8080:80
    links:
      - zabbix_server
      - zabbix_db
  zabbix_agent:
    image: zabbix/zabbix-agent:centos-4.2.5
    privileged: true
    environment:
      - ZBX_SERVER_HOST=zabbix_server
    expose:
      - "10050"
    links:
      - zabbix_server                                                                                                                        

docker-composeでデプロイします。

docker-composeでデプロイ
# pwd
/root/zabbix
# docker-compose -f docker-compose.yml up -d
Pulling zabbix_db (mysql:5.7.24)...
5.7.24: Pulling from library/mysql
177e7ef0df69: Pull complete
(中略)
Creating zabbix_zabbix_db_1 ... done
Creating zabbix_zabbix_server_1 ... done
Creating zabbix_zabbix_agent_1  ... done
Creating zabbix_zabbix_web_1    ... done
# docker ps
CONTAINER ID        IMAGE                                         COMMAND                  CREATED             STATUS              PORTS                           NAMES
a6951d17c69e        zabbix/zabbix-web-apache-mysql:centos-4.2.5   "docker-entrypoint.sh"   50 seconds ago      Up 48 seconds       443/tcp, 0.0.0.0:8080->80/tcp   zabbix_zabbix_web_1
e114e5c4c8ca        zabbix/zabbix-agent:centos-4.2.5              "/sbin/tini -- /usr/…"   50 seconds ago      Up 48 seconds       10050/tcp                       zabbix_zabbix_agent_1
f26a0a605723        zabbix-server-mysql:kukulu-cs-4.2.5           "/sbin/tini -- /usr/…"   51 seconds ago      Up 49 seconds       0.0.0.0:10051->10051/tcp        zabbix_zabbix_server_1
e9a18fce90a2        mysql:5.7.24                                  "docker-entrypoint.s…"   52 seconds ago      Up 50 seconds       3306/tcp, 33060/tcp             zabbix_zabbix_db_1
#  docker-compose ps
         Name                       Command               State               Ports
-----------------------------------------------------------------------------------------------
zabbix_zabbix_agent_1    /sbin/tini -- /usr/bin/doc ...   Up      10050/tcp
zabbix_zabbix_db_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
zabbix_zabbix_server_1   /sbin/tini -- /usr/bin/doc ...   Up      0.0.0.0:10051->10051/tcp
zabbix_zabbix_web_1      docker-entrypoint.sh             Up      443/tcp, 0.0.0.0:8080->80/tcp

Zabbixへログインし、外部チェックのアイテムを作成

Zabbixコンテナへログインします。

http://<DockerサーバのIPアドレス>:8080

Username:Admin
Password:zabbix

TOP画面が表示されます。

[Configuration]-[Hosts]でHost画面を表示して、[Zabbix server]列の[Items]を選択します。

[Items]画面右上の[Create Item]ボタンを選択します。

Name:お好みの名前でどうぞ
Type:External check
Key:kukulu_viewers.ps1 ※Dockerfileでコンテナへコピーしたスクリプト名

ここまで編集したら、画面最下部の[Add]を選択します。
[Item Added]と表示されたら準備OK。

監視できているか確認

[Monitoring]-[Latest data]を選択し、
[Hosts]に[Zabbix server]を選択した状態で[Apply]を押下します。

先ほど作成したアイテム名のレコードがあると思うので、
右側の[Graph]を選択します。

取得できているのがわかれば完了です。