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 버전: 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
네 개의 컨테이너를 배포합니다.

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로 컨테이너에 복사한 스크립트명



지금까지 편집한 후 화면 하단의 추가를 선택합니다.
[Item Added]가 표시되면 준비 OK.


모니터링할 수 있는지 확인



[Monitoring] > [Latest data]를 선택하고,
Hosts에서 Zabbix server를 선택한 상태에서 Apply를 누릅니다.



방금 만든 아이템 이름의 레코드가 있다고 생각하기 때문에,
오른쪽의 Graph를 선택합니다.


취득하고 있는 것을 알면 완료입니다.

좋은 웹페이지 즐겨찾기