この記事の対象読者
- Zabbixサーバをたてて、Linuxのホストを監視してみたい人
- 仕事でZabbixを使っているけど、家でも触りたい人
自宅でサーバを立てるのは大変なので、Dockerを使ってサクっと試しましょう。
この記事では
前提として、Docker環境がつかえることです。
DockerにZabbixサーバをたてます。
公式に詳しいマニュアルが載っているので、サクッとサーバをたてることができます。
つづけて、同じくDocker内にUbuntuサーバをたてます。
そのサーバにZabbixエージェントをインストールして、実際に監視してみます。
Zabbixサーバを構築する
Zabbix Dockerコンテナの利用例2に沿ってZabbixサーバ群を構築する。
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
docker run --name postgres-server -t -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="zabbix_pwd" -e POSTGRES_DB="zabbix" --network=zabbix-net --restart unless-stopped -d postgres:latest
docker run --name zabbix-snmptraps -t -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro --network=zabbix-net -p 162:1162/udp --restart unless-stopped -d zabbix/zabbix-snmptraps:alpine-6.0-latest
docker run --name zabbix-server-pgsql -t -e DB_SERVER_HOST="postgres-server" -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="zabbix_pwd" -e POSTGRES_DB="zabbix" -e ZBX_ENABLE_SNMP_TRAPS="true" --network=zabbix-net -p 10051:10051 --volumes-from zabbix-snmptraps --restart unless-stopped -d zabbix/zabbix-server-pgsql:alpine-6.0-latest
docker run --name zabbix-web-nginx-pgsql -t -e ZBX_SERVER_HOST="zabbix-server-pgsql" -e DB_SERVER_HOST="postgres-server" -e POSTGRES_USER="zabbix" -e POSTGRES_PASSWORD="zabbix_pwd" -e POSTGRES_DB="zabbix" --network=zabbix-net -p 443:8443 -p 80:8080 -v /etc/ssl/nginx:/etc/ssl/nginx:ro --restart unless-stopped -d zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latest
いくつかのコンテナが協同することで、Zabbixの機能が提供される。
こちらのQiita記事に分かりやすい図がある。
作成されたコンテナを確認する
Dockerデスクトップアプリの画面キャプチャ
4つのコンテナが起動している
コンテナ名 | 役割 | localhostに空いているポート | Dockerネットワーク内のIPアドレス |
---|---|---|---|
zabbix-server-pgsql | Zabbixエージェントからの通信を受け付ける | Zabbix監視受信用(tcp10051) | 172.20.240.2 |
postgres-server | DBサーバ。とくに意識する必要はない。 | なし | *** |
zabbix-web-nginx-pgsql | WEBサーバ。ここにログインして監視対象の状態を確認する。 | HTTP(tcp80), HTTPS(tcp443) | *** |
zabbix-snmptraps | SNMPトラップ通信を受け付ける。Zabbixエージェントソフトをインストールできない通信機器やNASからの通信を受け付ける。 | SNMPトラップ受信用(udp162) | *** |
IPアドレスについては、docker network inspect zabbix-net
を打つとわかる。
Dockerのコンテナは起動するごとにIPアドレスが自動的に割り当てされるので
たとえばDockerを動かしているパソコンを再起動した場合などは
IPアドレスの割りあてが変わるためZabbixエージェント側の設定にも影響があることに注意する!!
WindowsであればTest-NetConnection localhost -Port 10051
でコンテナと疎通確認できる。
WEBサーバであればlocalhost:80
にアクセスしてログイン画面が表示されるはず。
ログインしたらまずは設定画面から日本語設定にすべし。
【ログインした画面】 ※日本語設定済み
Ubuntu Linuxホストを作成する
ubuntu-1
というホストを作成する。(コンテナ名であって、ホスト名ではない)
# コンテナをつくる
docker run --name ubuntu-1 -it --network=zabbix-net -d ubuntu
# コンテナの中に入る
docker container exec -it ubuntu-1 bash
インストーラを選定するために、OSのバージョンを確認しておく。
2024/9時点で最新のUbuntuコンテナイメージは24.04バージョンらしい。
root@7830d9ef2faa:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
docker network inspect zabbix-net
で調べると、"ubuntu-1"のIPアドレスは"IPv4Address": "172.20.240.5/16"であることが分かった。
Ubuntu にZabbixエージェントをインストールする
Zabbix公式の手順に沿ってZabbixエージェントをインストールする
コンテナイメージだと必要なコマンドが足りない場合があるので、適宜インストールする
# wgetコマンドを入手
apt install wget -y
# ついでに vim や netcat もインストールしておくと、あとで便利
# リポジトリアップデート
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-6+ubuntu24.04_all.deb
dpkg -i zabbix-release_6.0-6+ubuntu24.04_all.deb
apt update
# Zabbixエージェントをインストール
apt install zabbix-agent2 zabbix-agent2-plugin-* -y
Zabbix コンフィグファイルを書き換える
vi /etc/zabbix/zabbix_agent2.conf
でコンフィグファイルを書き換える
書き換える箇所は3か所
- ServerActive=172.20.240.2
- Server=172.20.240.2
- Hostname=ubuntu-1
Serveは監視サーバ→ホストに対する監視用
ServerActiveはホスト→サーバに対する監視用
ホスト名は監視サーバでホストを登録したときのホスト名を合わせておく
巻末にも載せるが、こちらの記事がわかりやすかった。
Zabbixサービスを起動する
インストール直後はサービスが起動していないので、手動でサービスを起動する
root@7830d9ef2faa:/# service --status-all
[ - ] procps
[ - ] zabbix-agent2
root@7830d9ef2faa:/# service zabbix-agent2 start
* Starting Zabbix agent zabbix_agent2 [ OK ]
root@7830d9ef2faa:/# service --status-all
[ - ] procps
[ + ] zabbix-agent2
Ubuntu の監視設定
Zabbixサーバ(zabbix-server-pgsql)からの疎通確認 tcp10050
ホストからZabbixサーバに疎通確認 tcp10051
zabbix-server-pfsqlしか許可されていないことがわかる
root@7830d9ef2faa:/# nc -vz 172.20.240.1 10051
zabbix-web-nginx-pgsql.zabbix-net [172.20.240.1] 10051 (zabbix-trapper) : Connection refused
root@7830d9ef2faa:/# nc -vz 172.20.240.2 10051
zabbix-server-pgsql.zabbix-net [172.20.240.2] 10051 (zabbix-trapper) open
root@7830d9ef2faa:/# nc -vz 172.20.240.3 10051
zabbix-snmptraps.zabbix-net [172.20.240.3] 10051 (zabbix-trapper) : Connection refused
root@7830d9ef2faa:/# nc -vz 172.20.240.4 10051
postgres-server.zabbix-net [172.20.240.4] 10051 (zabbix-trapper) : Connection refused
※前述のとおり、これらのサーバのIPアドレスはコンテナの起動順序などに左右されるため変動する可能性があることに注意する!!
Linux by Zabbix agent active という点について、パッシブかアクティブかを選べるらしい。参考
アクティブにすると、「エージェントの状態」が白抜きになっている。アクティブにしない(無印)にすると、同箇所が緑色になっている。
監視状況確認
Zabbixサーバにログインして、ホストの状況を確認する
ちゃんと時系列ログに値が出ているので、なんとなく監視はできていそうですね
おわりに
ホストの登録まで完了したので、次回はもっと詳しくZabbixでできることを確認しようとおもいます
トラブルシューティング
Zabbixサーバとエージェントが通信できていない
nc
コマンドで疎通確認
Zabbixエージェントのログを確認
下記のようなエラーログが出ていたら、エージェントのコンフィグファイルのServer=
やServerActive=
で指定しているサーバのIPアドレスが違う可能性が高い(あるいはファイアウォールなどによる疎通遮断)
2024/09/16 20:28:02.434677 failed to accept an incoming connection: connection from "172.20.240.2" rejected, allowed hosts: "172.20.240.3"
2024/09/16 20:29:22.662566 [101] cannot connect to [172.20.240.3:10051]: dial tcp :0->172.20.240.3:10051: connect: connection refused
2024/09/16 20:29:22.662604 [101] active check configuration update from host [ubuntu-1] started to fail
参考記事