LoginSignup
4
6

More than 1 year has passed since last update.

docker composeによるZabbix環境構築

Last updated at Posted at 2022-01-23

備忘のため構築の要点だけまとめておく。
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が使用するため、別のポートを割り当てる

docker-compose.yaml
-略-
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のパラメータは、最後に必ず/を入れること。

nginx.conf
location /zabbix/ {
     proxy_pass http://localhost:4444/;
}

設定できたらnginxを再起動する。

$ systemctl restart nginx

タイムゾーンの変更

デフォルトだと時刻表記が日本時間でないため、env_vars/.env_webPHP_TZパラメータを下記のように修正する。

.env_web
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の設定を確認してみる。

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を次のように設定した。

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

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6