要点
- 同一ホストにおいて、Zabbix Serverをコンテナで動かし、Agentはホストに直接インストールしている構成
- Zabbix 3.4から
zabbix_agentd.conf
のServer
にCIDR形式(192.168.10.0/24など)が指定できるようになった - docker上のZabbix ServerのIPアドレスが起動するたびに変わっても大丈夫
背景
Zabbix Agentをコンテナとして起動すると、欲しい情報(ホストのネットワークI/Oなど)が取得できないため、Agentはホストに直接インストールして動かしている。
Zabbix 3.2まではzabbix_agentd.conf
のServer
には個別にZabbix ServerのIPアドレスを指定する必要があったため、docker上でZabbix Serverを動かしている場合、コンテナを再起動するたびにIPを調べて再設定する必要があった。
Zabbix Agent 3.4のインストール
Ubuntu Server 16.04 (64bit)の場合。
ウェブサイトからdebパッケージをダウンロード。
私の環境ではlibcurl3
が入っていないと怒られたので追加でインストール。
sudo apt-get install libcurl3
wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix/zabbix-agent_3.4.1-1+xenial_amd64.deb
sudo dpkg -i zabbix-agent_3.4.1-1+xenial_amd64.deb
sudo systemctl enable zabbix-agent.service
sudo systemctl start zabbix-agent.service
dockerコンテナが使用するIPの範囲をzabbix_agentd.conf
に設定。
docker networkの設定次第ではもっと狭い範囲でも可。
Server=172.0.0.0/8
Zabbix Server 3.4 on docker
タイムゾーンを設定する環境変数が、ドキュメント通りTZ
からPHP_TZ
になっている。
気づかずに起動して謎の6時間のずれに悩んだ。
version: '2'
services:
mysql:
image: mysql:5.7
restart: always
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- ./data/mysql:/var/lib/mysql
expose:
- "3306"
environment:
MYSQL_ROOT_PASSWORD: docker
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
zabbix-server:
image: zabbix/zabbix-server-mysql:alpine-3.4-latest
restart: always
volumes:
- ./data/zabbix:/var/lib/zabbix
environment:
DB_SERVER_HOST: mysql
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
ports:
- "10051:10051"
depends_on:
- mysql
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:alpine-3.4-latest
restart: always
environment:
DB_SERVER_HOST: mysql
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: Asia/Tokyo
ports:
- "80:80"
depends_on:
- mysql
- zabbix-server
このdocker-compose.yaml
はdockerでzabbixを動かすを参考にした。
docker-compose up -d
3.2からアップデートすると、初回にデータベースの変換作業が入るので少し待とう。
2020.07.07 追記
Zabbix 4.4のどこかのバージョンから、zabbix-web-nginx-mysql
コンテナの待受ポートが変更になっているので、上記のdocker-compose.yaml
そのままでは動かなくなってしまった。下記のようにポートを変更する必要がある。
ports:
- "80:8080"