備忘のため構築の要点だけまとめておく。
docker-composeの導入は前に書いた記事を参照。
本稿では下記2点も手順に盛り込んでいる。
- nginxによるリバースプロキシ経由アクセスのための設定
- Zabbixサーバ自身の監視設定
インストール
# githubからzabbix-dockerをclone
$ git clone https://github.com/zabbix/zabbix-docker
$ cd zabbix-docker
# 構築したい環境のyamlファイルをdocker-compose.yamlの名称でコピーする
$ cp docker-compose_v3_centos_mysql_latest.yaml docker-compose.yaml
$ docker-compose pull
yamlはos,dbの組み合わせで複数用意されている。
今回はCentOSとMySQLの組み合わせで構築した。
#【重要】ipマスカレードを有効にする
これをしないとdbの通信ができないので注意。
$ firewall-cmd --add-masquerade --permanent
WebUIのポート変更
Zabbix WebUIは、デフォルトだと80番ポートを使用するようになっている。
80番ポートは後述のリバースプロキシ用のnginxが使用するため、別のポートを割り当てる
-略-
zabbix-web-nginx-mysql:
image: zabbix/zabbix-web-nginx-mysql:centos-5.4-latest
ports:
#- "80:8080"
# 80番ポートはnginxで使用するため別ポートを充てる
- "127.0.0.1:4444:8080"
- "443:8443"
-略-
ポイントはホストIPをローカルに指定している点。
単純に4444:8080
とバインドしてしまうと、外部からhttp://xx.xx.xx.xx:4444
でアクセスできてしまうため、セキュリティーの観点から必要となる。
リバースプロキシのnginx設定
/etc/nginx/nginx.conf
にリバースプロキシの設定を入れる。
外部からhttp://xx.xx.xx.xx/zabbix/
の形式でアクセスされると、nginx内部でhttp://localhost:4444/
に置換される。
location
, proxy_pass
のパラメータは、最後に必ず/
を入れること。
location /zabbix/ {
proxy_pass http://localhost:4444/;
}
設定できたらnginxを再起動する。
$ systemctl restart nginx
タイムゾーンの変更
デフォルトだと時刻表記が日本時間でないため、env_vars/.env_web
のPHP_TZ
パラメータを下記のように修正する。
PHP_TZ=Asia/Tokyo
Zabbix起動
$ docker-compose up -d
# 起動状況のログをチェック
$ docker-compose logs -f
問題なく起動できたらhttp://xx.xx.xx.xx/zabbix/
にアクセスしてみる。ログイン画面が出たら成功。
初期アカウントは、Username:Admin, Password:zabbix
となる。
Zabbix agentの導入
agentは物理サーバに直接インストールするパターンと、docker上に導入するパターンが考えられる。
ここでは前者の方法で進める。
まずエージェントのインストールを行う。
$rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
$dnf clean all
$dnf install -y zabbix-agent
次にzabbix_agentd.conf
の編集を行う。このとき、コンテナ側のNWと物理サーバ側のNWの疎通が必要になることから、事前にNW構成を確認する必要がある。
まずdocker-compose.yaml
の設定を確認してみる。
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
下記の方法でも確認できる。
$ ifconfig
br-45de546f164e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.238.1 netmask 255.255.255.0 broadcast 172.16.238.255
...
br-9cdd7d15cb48: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.239.1 netmask 255.255.255.0 broadcast 172.16.239.255
...
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
8314617d0481 bridge bridge local
fa78b50c61fe host host local
c087a7491bfb none null local
8d0041079d16 zabbix-docker_default bridge local
9cdd7d15cb48 zabbix-docker_zbx_net_backend bridge local
45de546f164e zabbix-docker_zbx_net_frontend bridge local
以上のことから、物理サーバとdocker上のzabbix serverは172.16.238.0/24(frontend)
, 172.16.239.0/24(backend)
の2つの接続があることがわかる。ここではfrontendのNWを設定する。
/etc/zabbix/zabbix_agentd.conf
を次のように設定した。
# vi /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,172.16.238.0/24
ServerActive=127.0.0.1
Hostname=Zabbix server
そしてagentを起動する。
$ systemctl enable zabbix-agent.service
$ systemctl start zabbix-agent.service
Zabbix serverのWebコンソール上ではホスト情報のAgent IPは172.16.238.1
を指定する。127.0.0.1
だと、dockerコンテナ自身を指す設定となってしまうため、うまく動作しないので注意。
参考
https://github.com/zabbix/zabbix-docker
https://kuroeveryday.blogspot.com/2019/03/effect-of-trailing-slash-on-nginx-reverse-proxy.html