LoginSignup
1
1

More than 1 year has passed since last update.

Dockerネットワーク内にZabbixエージェントをつくる

Last updated at Posted at 2023-05-14

はじめに

以前、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サーバーを構成している

docker ps
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を、後でエージェントに与えるパラメータとして使う

docker network inspect zabbix-net
 "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.*を使う

image.png

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から抜粋したもの。この設定は使わない)
image.png

ZBX_SERVER_HOSTの右辺はzabbix-server-pgsqlではなく、Dockerネットワークのゲートウェイとする

3つZabbixエージェントが作成された状態

Dockerコンテナ一覧をみるとUbuntu 6.0.11のエージェントが3つ存在する
ホストから各コンテナへは、それぞれ60001,60002,60003のポートを介して接続する

参考:コンテナに外部からアクセス(ポートフォワード)

docker container ls (一部抜粋)
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コンテナの中に入る

Zabbixエージェントのコンテナに入る
# PowerShell
docker container exec -u root -it zabbix-agent-01 /bin/bash

設定ファイルをみたり、ちょっとした疎通確認をするためのパッケージをインストールしておく

パッケージのインストール
apt update
apt install -y vim iproute2 iputils-ping 

エージェントの設定ファイルzabbix_agentd.confを確認する
たしかにコンテナを立ち上げたときに指定した値が入っている

vi /etc/zabbix/zabbix_agentd.conf(一部抜粋)
# docker run で指定した値が入っている
Server=172.20.240.0
ServerActive=172.20.240.0:10051
Hostname=agent01

いざ、疎通確認

PINGで疎通確認

エージェントからサーバーへPING

ping zabbix-server-pgsql
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
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からエージェントを登録する

  1. localhost:80にブラウザからアクセスし、ID/PASS=admin/zabbixでログインする
  2. 画面左のツリーから、設定⇒ホストを選択
  3. 画面右上 「ホストの作成」
  4. 下記キャプチャ赤字のとおりパラメータを追加する
    1. agent02, agent03 についても連番部分を変更して登録する

image.png

登録されたあとの様子

3つのエージェントがサーバーのGUIから見えるようになった!

image.png

トラブルシューティング

Zabbixサーバーからエージェントが不通

Dockerデスクトップからコンテナのログを確認する
サーバーの指定が間違っていると、下記のようなメッセージが出ている

failed to accept an incoming connection: connection from "172.20.240.0" rejected, allowed hosts: "zabbix-server-pgsql

image.png

参考

糸冬了!!

1
1
1

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
1
1