はじめに
以前、Dockerを使ってZabbixを構築した
今回は、Docker内にZabbixエージェントを複数作成し、Zabbixサーバーの監視対象を増やす
次回以降、Zabbixでできることを試していく
(復習)ZabbixサーバーをDockerに構築した
Zabbixドキュメントの使用例2を参考に、PosgreSQLをサポートするZabbixサーバーを構築した
サーバーのアドレスは、ラズパイ(物理)からも直接見えるように 192.168.10.101
とした
-
192.168.10.0/24
は家のプライベートアドレス (ラズパイと同じセグメント) -
172.20.0.0/16
はZabbix用のDockerネットワーク。ネットワーク名はzabbix-net
Docker版Zabbix群
4つのコンテナが協働して、Zabbixサーバーを構成している
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e664e4f5023 zabbix/zabbix-web-nginx-pgsql:alpine-6.2-latest "docker-entrypoint.sh" 5 months ago Up 7 minutes 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp zabbix-web-nginx-pgsql
7251684fec13 zabbix/zabbix-server-pgsql:alpine-6.2-latest "/sbin/tini -- /usr/…" 5 months ago Up 7 minutes 0.0.0.0:10051->10051/tcp zabbix-server-pgsql
74a3b475aa9f zabbix/zabbix-snmptraps:alpine-6.2-latest "/usr/sbin/snmptrapd…" 5 months ago Up 7 minutes 0.0.0.0:162->1162/udp zabbix-snmptraps
ff29d26e827c postgres:latest "docker-entrypoint.s…" 5 months ago Up 7 minutes 5432/tcp postgres-server
これら4つのコンテナはzabbix-net
と名付けられたDockerネットワークに属している
Dockerネットワーク zabbix-net
ゲートウェイ172.20.240.0
を、後でエージェントに与えるパラメータとして使う
"Subnet": "172.20.0.0/16",
"IPRange": "172.20.240.0/20",
"Gateway": "172.20.240.0"
*.*.*.11110000/20
で絞ったIPレンジのうち、初めの*.*.*.0
をゲートウェイとしている
(なぜこうしているのかは、わからない)
Zabbixエージェントのコンテナ選定
Zabbixはコンテナをいくつか提供している
その中からZabbixエージェントを使う
前回、ラズパイに6.0.11
を入れたので、今回も6.0.*
を使う
Dockerコンテナ版Zabbixエージェントを起動する
下記コマンドの 01
, 60001
の末尾を2, 3と変えて、3つのエージェントを起動する
docker run --name zabbix-agent-01 \
--hostname ZabbixAgent01 \
-e ZBX_HOSTNAME="agent01" \
-e ZBX_SERVER_HOST="172.20.240.0" \
--privileged \
--network=zabbix-net \
-p 60001:10050 \
-d zabbix/zabbix-agent:ubuntu-6.0.11
# 1行貼り付け用
docker run --name zabbix-agent-01 --hostname ZabbixAgent01 -e ZBX_HOSTNAME="agent01" -e ZBX_SERVER_HOST="172.20.240.0" --privileged --network=zabbix-net -p 60001:10050 -d zabbix/zabbix-agent:ubuntu-6.0.11
サーバーホストがゲートウェイアドレス172.20.240.0
ZBX_SERVER_HOST
について、サンプルではZabbixサーバーのホスト名を指定しているが
今回はホストにある(ようにみえる)サーバーからDockerネットワーク内のエージェントへ接続許可するために
ゲートウェイのアドレスをサーバーとみなしている
(下キャプチャは使用例2から抜粋したもの。この設定は使わない)
ZBX_SERVER_HOST
の右辺はzabbix-server-pgsql
ではなく、Dockerネットワークのゲートウェイとする
3つZabbixエージェントが作成された状態
Dockerコンテナ一覧をみるとUbuntu 6.0.11
のエージェントが3つ存在する
ホストから各コンテナへは、それぞれ60001,60002,60003のポートを介して接続する
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8aaa6f38b146 zabbix/zabbix-agent:ubuntu-6.0.11 "/usr/bin/tini -- /u…" 36 hours ago Up 36 hours 0.0.0.0:60003->10050/tcp zabbix-agent-03
070b4c9ac12a zabbix/zabbix-agent:ubuntu-6.0.11 "/usr/bin/tini -- /u…" 36 hours ago Up 36 hours 0.0.0.0:60002->10050/tcp zabbix-agent-02
dfab8c8aa6db zabbix/zabbix-agent:ubuntu-6.0.11 "/usr/bin/tini -- /u…" 36 hours ago Up 36 hours 0.0.0.0:60001->10050/tcp zabbix-agent-01
Zabbixエージェントの中身をみてみる
PowerShellからDockerコンテナの中に入る
# PowerShell
docker container exec -u root -it zabbix-agent-01 /bin/bash
設定ファイルをみたり、ちょっとした疎通確認をするためのパッケージをインストールしておく
apt update
apt install -y vim iproute2 iputils-ping
エージェントの設定ファイルzabbix_agentd.conf
を確認する
たしかにコンテナを立ち上げたときに指定した値が入っている
# docker run で指定した値が入っている
Server=172.20.240.0
ServerActive=172.20.240.0:10051
Hostname=agent01
いざ、疎通確認
PINGで疎通確認
エージェントからサーバーへPING
PING zabbix-server-pgsql (172.20.240.2) 56(84) bytes of data.
64 bytes from zabbix-server-pgsql.zabbix-net (172.20.240.2): icmp_seq=1 ttl=64 time=1.85 ms
サーバーからエージェントへPING
※docker container exec -it zabbix-server-pgsql /bin/bash
でコンテナの中に入ってから実行
PING zabbix-agent-01 (172.20.240.5) 56(84) bytes of data.
64 bytes from zabbix-agent-01.zabbix-net (172.20.240.5): icmp_seq=1 ttl=64 time=0.096 ms
zabbix_get
コマンドで疎通確認
Zabbixサーバーからエージェントのホスト名を取得する
zabbix_get -s zabbix-agent-01 -p 10050 -k agent.hostname
# agent01 と表示されればOK
ZabbixサーバーのGUIからエージェントを登録する
-
localhost:80
にブラウザからアクセスし、ID/PASS=admin/zabbix
でログインする - 画面左のツリーから、設定⇒ホストを選択
- 画面右上 「ホストの作成」
- 下記キャプチャ赤字のとおりパラメータを追加する
- agent02, agent03 についても連番部分を変更して登録する
登録されたあとの様子
3つのエージェントがサーバーのGUIから見えるようになった!
トラブルシューティング
Zabbixサーバーからエージェントが不通
Dockerデスクトップからコンテナのログを確認する
サーバーの指定が間違っていると、下記のようなメッセージが出ている
failed to accept an incoming connection: connection from "172.20.240.0" rejected, allowed hosts: "zabbix-server-pgsql
参考