目標#
- ホスト 1 で docker を使用して zabbix6.4 をデプロイする
 - ホスト 2 に zabbix-agent2 をインストールする
 - ホスト 1 の zabbix コンテナを使用してホスト 2 のコンテナなどの業務を監視する
 
プラットフォーム#
- 物理デバイス --
 - オペレーティングシステム:CentOS 7
 
デプロイガイド#
タスク 一#
- docker をインストールする(最新バージョン)
 
#dockerファイルと依存関係をダウンロードしてインストール
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
#dockerを起動し、起動時に自動起動を設定
systemctl start docker  
systemctl enable docker
#バージョンを確認
docker -v
- ファイアウォールで必要なポートを開放する
 
# nginxポートを開放
firewall-cmd --zone=public --add-port=80/tcp --permanent
# zabbix agentポートを開放
firewall-cmd --zone=public --add-port=10050/tcp --permanent
# zabbix serverポートを開放
firewall-cmd --zone=public --add-port=10051/tcp --permanent
# zabbix java gatewayポートを開放
firewall-cmd --zone=public --add-port=10052/tcp --permanent
# mysqlポートを開放
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# snmptrapsポートを開放
firewall-cmd --zone=public --add-port=162/udp --permanent
# ファイアウォールをリロード
firewall-cmd --reload
# 80ポートが開放されているか確認
firewall-cmd --query-port=80/tcp
# 開放されたすべてのポートを確認
firewall-cmd --zone=public --list-ports
- zabbix に必要なイメージファイルをプルする
 
# zabbixに必要なdockerイメージをプル
docker pull mysql:8.0
docker pull zabbix/zabbix-java-gateway:alpine-6.4-latest
docker pull zabbix/zabbix-server-mysql:alpine-6.4-latest
docker pull zabbix/zabbix-web-nginx-mysql:alpine-6.4-latest
- Zabbix コンポーネント用のコンテナネットワークと必要なコンテナを作成する
 
プラン 1:#
# Zabbixコンポーネント用のネットワークを作成
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
# 空のMySQLサーバーインスタンスを起動
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --network=zabbix-net \
      --restart=always \
      -d mysql:8.0 \
      --character-set-server=UTF8MB4 --collation-server=UTF8MB4_bin \
      --authentication_policy=mysql_native_password
# Zabbix Javaゲートウェイインスタンスを起動      
docker run --name zabbix-java-gateway -t \
      --network=zabbix-net \
      --restart unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-6.4-latest
# Zabbixサーバーインスタンスを起動し、作成したMySQLサーバーインスタンスにリンク      
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --network=zabbix-net \
      -p 10051:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-6.4-latest
# Zabbix Webインターフェースを起動し、作成したMySQLサーバーとZabbixサーバーインスタンスにリンク
docker run --name zabbix-web-nginx-mysql -t \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --network=zabbix-net \
      -p 80:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-6.4-latest
プラン 2:(推奨使用)#
# 空のMySQLサーバーインスタンスを起動
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --restart=always \
      -d mysql:8.0 \
      --character-set-server=UTF8MB4 --collation-server=UTF8MB4_bin \
      --authentication_policy=mysql_native_password
# Zabbix Javaゲートウェイインスタンスを起動      
docker run --name zabbix-java-gateway -t \
      --restart unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-6.4-latest
# Zabbixサーバーインスタンスを起動し、作成したMySQLサーバーインスタンスにリンク      
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      --restart unless-stopped \
      -d zabbix/zabbix-server-mysql:alpine-6.4-latest
# Zabbix Webインターフェースを起動し、作成したMySQLサーバーとZabbixサーバーインスタンスにリンク
docker run --name zabbix-web-nginx-mysql -t \
      -e ZBX_SERVER_HOST="zabbix-server-mysql" \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="123456" \
      -e MYSQL_ROOT_PASSWORD="123456" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:8080 \
      --restart unless-stopped \
      -d zabbix/zabbix-web-nginx-mysql:alpine-6.4-latest
- いずれかのホストの /etc/docker/daemon.json ファイルに、以下の内容を追加します:
 
# daemon.jsonファイルを開く
vi /etc/docker/daemon.json
# 追加する内容
{
 "bip": "172.16.200.1/24"
}
# dockerサービスを再起動
systemctl restart docker 
タスク二#
ホスト二に zabbix-agent2 をインストールする
監視するホストに zabbix agent2 をインストールする
ステップ 1:Zabbix agent2 のダウンロード
https://www.zabbix.com/documentation/6.4/manual/installation/install_from_packages
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/7/x86_64/zabbix-release-6.4-1.el7.noarch.rpm
yum clean all
ステップ 2:b. Zabbix agent2 をダウンロード
yum install zabbix-agent2 zabbix-agent2-plugin-* -y
ステップ 3:Zabbix agent2 を起動
Zabbix agent2 プロセスを開始し、システム起動時に自動的に開始されるようにします。
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
成功した場合の画面は以下の通りです
インストールエラーのまとめ#
- mysql コンテナに入り、以下のコマンドを入力します。
 
# sqlインターフェースに入る
mysql -u root -p
# このコマンドを入力して問題を解決
create database zabbix character set utf8 collate utf8_bin;
SET GLOBAL log_bin_trust_function_creators = 1;
- zabbix のインストール中に以下のような状況が発生した場合の解決方法
 
https://blog.csdn.net/ly4983/article/details/111029506
拡張 - docker-compose で zabbix をデプロイ#
services:
  zabbix-db-mysql:
    image: mysql:9.0.1
    container_name: zabbix-db-mysql
    restart: always
    environment:
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix@123
      - MYSQL_ROOT_PASSWORD=zabbix@123
      - TZ=Asia/Shanghai
    command: ["--character_set_server=utf8mb4", "--collation_server=utf8mb4_bin"]
    volumes:
      - /data/database/zabbix-mysql:/var/lib/mysql
    user: "0"
    ports:
      - 3306:3306
    networks:
      zabbix:
        ipv4_address: 172.20.20.10
  zabbix-java-gateway:
    image: zabbix/zabbix-java-gateway:latest
    container_name: zabbix-java-gateway
    restart: always
    environment:
      - TZ=Asia/Shanghai
    user: "0"
    networks:
      zabbix:
        ipv4_address: 172.20.20.11
  zabbix-server-mysql:
    image:  zabbix/zabbix-server-mysql:latest
    container_name: zabbix-server-mysql
    restart: always
    environment:
      - DB_SERVER_HOST=zabbix-db-mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix@123
      - MYSQL_ROOT_PASSWORD=zabbix@123
      - ZBX_JAVAGATEWAY=zabbix-java-gateway
      - TZ=Asia/Shanghai
    user: "0"
    ports:
      - 10051:10051
    networks:
      zabbix:
        ipv4_address: 172.20.20.12
  zabbix-web-nginx-mysql:
    image:  zabbix/zabbix-web-nginx-mysql:latest
    container_name: zabbix-web-nginx-mysql
    restart: always
    environment:
      - ZBX_SERVER_HOST=zabbix-server-mysql
      - DB_SERVER_HOST=zabbix-db-mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix@123
      - MYSQL_ROOT_PASSWORD=zabbix@123
      - ZBX_JAVAGATEWAY_ENABLE=true
      - ZBX_JAVAGATEWAYPORT=10052
      - PHP_TZ=Asia/Shanghai
    user: "0"
    ports:
      - 80:8080
    networks:
      zabbix:
        ipv4_address: 172.20.20.13
  zabbix-agent:
    image: zabbix/zabbix-agent:latest
    container_name: zabbix-agent
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - ZBX_SERVER_HOST=172.20.20.12
      - ZBX_HOSTNAME=Zabbix server
    user: "0"
    ports:
      - 10050:10050
    networks:
      zabbix:
        ipv4_address: 172.20.20.14
networks:
 zabbix:
  driver: bridge
  ipam:
   config:
    - subnet: 172.20.20.0/24