以前はZabbixをローカル上に構築していたのですが、docker上の方が管理が楽かと思い、docker上に構築することにしました。
OSはUbuntu22.04 Serverです。構築後のご参考画面として、インストール後、3時間ほど経過した画面は以下です。

一点、注意点としてMySQLのデータを格納する領域はSSDが好ましいです。HDDにした場合、Zabbix初回起動時に実行されるSQL文で2時間以上かかりました(終わらないので途中であきらめて翌朝確認したら終わっていました)。
遅かった理由はMySQL8.xで有効になった各種パフォーマンスに影響のあるパラメータのデフォルト値がSSD前提となっており、HDDを利用した場合には「遅い」を通り越して「使い物にならないくらい遅い」状態となりました。innodb_flush_log_at_trx_commit、sync_binlogあたりをいじる事で多少は改善できましたが、それでもSSDの50~100倍ぐらい遅かった(RedmineのDBインポート処理で、HDD:2分、SSD:数秒ぐらいの差がありました。)為、HDDを利用している場合で「やけにセットアップに時間がかかるな~。SQL実行中から変わらない・・・」となった場合にはDB格納先がSSDのサーバを試してみる事をお勧めします。
dockerのセットアップ
sudo apt install docker docker-compose
sudo systemctl enable --now docker
# dockerグループに作業ユーザーを追加する
sudo adduser ${USER} docker
# ログオフして再度ログインしなおします。
exit
MySQL(ローカル)のインストール
当方のMySQLは、他にも色々な用途で利用している為、ローカルにインストールして、Zabbix用のDBを作成し、Dockerからも接続可能な状態とします。mysql_native_password BYの後に続いているパスワード(赤字部分)は適宜変更してください。
sudo apt install mysql-client mysql-server
# mysqlにローカルホスト以外から接続可能とする。
sudo sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql.service
# zabbix用のDBとユーザーを作成します。
sudo mysql
create database zabbix;
CREATE USER 'zabbix'@'172.%' IDENTIFIED WITH mysql_native_password BY 'cdiCD9AAAAcc4432CDS))_CDSASCD#@idsasdfcd';
GRANT ALL ON zabbix.* TO 'zabbix'@'172.%';
flush privileges;
exit;
Zabbix Serverのインストール
基本的にはオフィシャルサイトよりリンクされているイメージを利用させて頂きます。
git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
cp docker-compose_v3_ubuntu_mysql_latest.yaml docker-compose.yaml
# dockeeコマンドを叩く前に設定を編集します。
# 設定値は後述します。
vi docker-compose.yaml
vi env_vars/.env_db_mysql
vi env_vars/.env_srv
vi env_vars/.env_web
docker-compose.yaml
今回は、zabbix-server、zabbix-web-nginx-mysqlのservicesのみを残し、他は削除しました。ご参考までに設定値は以下です。途中でMYSQL_~~~と言う箇所がありますが、これがMYSQL関係の設定値です。追って、env_varsフォルダにあるファイルで設定します。
version: '3.5'
services:
zabbix-server:
image: zabbix/zabbix-server-mysql:ubuntu-6.0-latest
ports:
- "10051:10051"
volumes:
- /etc/localtime:/etc/localtime:ro
- ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
- ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
- ./zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw
- ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
- ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
- ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
- ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
- snmptraps:/var/lib/zabbix/snmptraps:rw
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
deploy:
resources:
limits:
cpus: '0.70'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
env_file:
- ./env_vars/.env_db_mysql
- ./env_vars/.env_srv
secrets:
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_ROOT_USER
- MYSQL_ROOT_PASSWORD
# - client-key.pem
# - client-cert.pem
# - root-ca.pem
networks:
zbx_net_backend:
aliases:
- zabbix-server
- zabbix-server-mysql
- zabbix-server-ubuntu-mysql
- zabbix-server-mysql-ubuntu
zbx_net_frontend:
stop_grace_period: 30s
sysctls:
- net.ipv4.ip_local_port_range=1024 65000
- net.ipv4.conf.all.accept_redirects=0
- net.ipv4.conf.all.secure_redirects=0
- net.ipv4.conf.all.send_redirects=0
labels:
com.zabbix.description: "Zabbix server with MySQL database support"
com.zabbix.company: "Zabbix LLC"
com.zabbix.component: "zabbix-server"
com.zabbix.dbtype: "mysql"
com.zabbix.os: "ubuntu"
zabbix-web-nginx-mysql:
image: zabbix/zabbix-web-nginx-mysql:ubuntu-6.0-latest
ports:
- "8080:8080"
- "8443:8443"
volumes:
- /etc/localtime:/etc/localtime:ro
- ./zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro
- ./zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
deploy:
resources:
limits:
cpus: '0.70'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
env_file:
- ./env_vars/.env_db_mysql
- ./env_vars/.env_web
secrets:
- MYSQL_USER
- MYSQL_PASSWORD
depends_on:
- zabbix-server
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/"]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
networks:
zbx_net_backend:
aliases:
- zabbix-web-nginx-mysql
- zabbix-web-nginx-ubuntu-mysql
- zabbix-web-nginx-mysql-ubuntu
zbx_net_frontend:
stop_grace_period: 10s
sysctls:
- net.core.somaxconn=65535
labels:
com.zabbix.description: "Zabbix frontend on Nginx web-server with MySQL database support"
com.zabbix.company: "Zabbix LLC"
com.zabbix.component: "zabbix-frontend"
com.zabbix.webserver: "nginx"
com.zabbix.dbtype: "mysql"
com.zabbix.os: "ubuntu"
networks:
zbx_net_frontend:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
zbx_net_backend:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
internal: true
ipam:
driver: default
config:
- subnet: 172.16.239.0/24
volumes:
snmptraps:
secrets:
MYSQL_USER:
file: ./env_vars/.MYSQL_USER
MYSQL_PASSWORD:
file: ./env_vars/.MYSQL_PASSWORD
MYSQL_ROOT_USER:
file: ./env_vars/.MYSQL_ROOT_USER
MYSQL_ROOT_PASSWORD:
file: ./env_vars/.MYSQL_ROOT_PASSWORD
env_vars/.env_db_mysql
大まかに以下のように設定します。実は、zabbix serverを起動させて、DB接続不可でリトライが走っている間に「あ、DBのアクセス権限間違っている」と気付いて、その際にアクセス権を振りなおしてもリカバリ可能でした。
DB_SERVER_HOST=192.168.100.100
DB_SERVER_PORT=3306
MYSQL_USER=zabbix
MYSQL_ROOT_USER=zabbix
MYSQL_PASSWORD=cdiCD9AAAAcc4432CDS))_CDSASCD#@idsasdfcd
MYSQL_ROOT_PASSWORD=cdiCD9AAAAcc4432CDS))_CDSASCD#@idsasdfcd
MYSQL_DATABASE=zabbix
env_vars/.env_srv
なにも編集せずとも問題ありませんが、利用したい設定等があれば編集します。
env_vars/.env_web
最低限、時刻だけは直します。
PHP_TZ=Asia/Tokyo
docker起動
設定が終わったら起動させます。
# イメージをダウンロードして起動。
docker-compose up -d
# 状態確認
docker ps -a
# ログ確認方法(zabbix_docker以降は、ps -a の結果で名前を適宜修正してください。TAB保管も出来ると思います。)
docker logs zabbix-docker_zabbix-web-nginx-mysql_1
docker logs zabbix-docker_zabbix-server_1
# MYSQL接続エラー等が出ていた場合
docker exec -it zabbix-docker_zabbix-server_1 bash
mysql -uzabbix -h192.168.100.100 -p # IPはご指針のMYSQLサーバのIPに変更してください
Zabbix Serverへログインして初期設定等を実施
dockerへログインする為に、http://<dockerの入っているサーバのIP>:8080/ でアクセスして、初期パスワードである「Admin/zabbix」でログインします。
パスワードだけはデフォルトから変更した方が良いと思います。
dockerの入っているサーバへzabbix agentをインストール
こちらは、普通にaptで入れました。
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-2%2Bubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.0-2+ubuntu22.04_all.deb
sudo apt update
sudo apt install zabbix-agent
# 接続元サーバを設定
sudo vi /etc/zabbix/zabbix_agentd.conf
zabbix_agentd.confを編集
デフォルトのままだとローカルホストからのみ接続を許可する為、zbx_net_frontendで設定していたアドレスレンジからの接続を許可します。
# Server=127.0.0.1
Server=172.16.238.0/24
# 編集が終わったらzabbix-agentを再起動します。
sudo systemctl restart zabbix-agent.service
Zabbix Serverから、zabbixserverが127.0.0.1のIPで登録されたままとなっている為、IPを172.16.238.1に変更することで、dockerが入っているサーバの状態が取れるようになります。
私はmysqlのテンプレート等を追加しそれらも取得できるようにしました。また、OpenWRTルータを複数台利用している為、その各々にZabbix Agentを入れて、その状態も取得できるようにしています。
【問題点】10秒ごとにAuditログにゲストのログイン失敗ログが記録される
dockerイメージでzabbixを導入した時の仕様?のようで、こちらにチケットがありました。ゲストで「failed login」がlocalhost(127.0.0.1)から大量にログ記録されており、最初見たときは何れかのサーバがログイン施行されているかと勘違いしたのですが・・・・修正はしない些細なバグと言う扱いのようなので、将来的に修正されるのかも不明ですが、直る事を期待しています。
上記、こちらに内容を記載しました。良ければご覧ください。