概要
Zabbix Docker Monitoring を使って Zabbix でコンテナ監視をしてみました
仕組みは cAdvisor などと同じようです
環境
- Zabbix サーバ
- Ubuntu 16.04 LTS
- docker 18.09.6
- Zabbix Server 4.2
- コンテナホスト
- macOS 10.14.5
- docker for Mac 18.09.2
- dockbix-agent-xxl-limited 3.4-3
仕組み
Zabbix Docker Monitoring はコンテナで動作します
このコンテナを Zabbix サーバにホストとして登録します
他のコンテナの情報をどうやって取得しているかというとコンテナホストの /
をマウントし docker.sock
を使って各コンテナの情報を取得しています
取得した情報は Zabbix サーバに登録された Zabbix Docker Monitoring コンテナのアイテムとして登録されます
なので各コンテナが Zabbix サーバにホストとして登録されるわけではありません
Zabbix サーバ起動
なんでも OK です
本記事内では docker で起動しています (参考)
テンプレート登録
まずはテンプレートを登録します
テンプレートはこの後起動する Zabbix Docker Monitoring コンテナに割り当てるテンプレートになります
このテンプレートには同一ホスト上で起動しているコンテナをディスカバリルールが登録されています
wget 'https://raw.githubusercontent.com/monitoringartist/zabbix-docker-monitoring/master/template/Zabbix-Template-App-Docker.xml'
あとは WebUI で XML ファイルをインポートすれば OK です
「Template App Docker」というテンプレートがインポートされれば OK です
またデフォルトだとディスカバリのインターバルが 600s と長いので 30s に変更しましょう
テスト後は 600s に戻して OK です
テンプレートを登録する用のコンテナがあるがそれは 4.2 では使えない
わざわざテンプレートをダウンロードして WebUI で登録するのが面倒な人のために API を使ってテンプレートを登録するコンテナがあるようなのですが 4.2 では使えませんでした
docker run --rm \
-e XXL_apiurl=http://192.168.99.200 \
-e XXL_apiuser=Admin \
-e XXL_apipass=zabbix \
monitoringartist/zabbix-templates
-32602 (Invalid params.): Invalid parameter "/rules/applications": unexpected parameter "updateExisting".
というエラーが発生し登録できませんでした
Zabbix Docker Monitoring コンテナを起動する
監視したいコンテナが起動しているコンテナホストで実行しましょう
今回は docker for mac で起動しています
docker run \
--name=dockbix-agent-xxl \
--privileged \
-p 10050:10050 \
-v /:/rootfs \
-v /var/run:/var/run \
--restart unless-stopped \
-e "ZA_Server=192.168.99.200,172.17.0.1" \
-e "ZA_ServerActive=192.168.99.200" \
-d monitoringartist/dockbix-agent-xxl-limited:latest
ZA_Server
に 172.17.0.1
が入っているのはコンテナで Zabbix サーバを起動してるためなので Zabbix サーバがコンテナでない場合は不要です
10050 ポートは Zabbix サーバから見えないと行けないので LISTEN させます
ホストとして登録する
起動した Zabbix Docker Monitoring コンテナを Zabbix サーバにホストとして登録します
Discovery でも OK ですし手動でホストの 10050 番を登録しても OK です
またホストとして登録したら先程登録した「Template App Docker」を割り当てます
これでこのコンテナ経由で他のコンテナの情報をアイテムとして取得できるようになりました
動作確認
適当に Mac 上でコンテナを起動してみましょう
docker run -d -p 6379:6379 redis
あとはディスカバリの 30s 後に Monitoring -> Latest data を確認するとアイテムとしてコンテナの情報が格納されているのが確認できると思います
最後に
Zabbix Docker Monitoring を使ってみました
コンテナホストのルートパスをマウントして直接デーモンの情報を吸い上げるコンテナを起動します
そしてそのコンテナを Zabbix のホストとして登録することでそのホストのアイテムとして各コンテナの情報を登録するという仕組みでした
cAdvisor も同じような仕組みで各コンテナの情報を吸い上げているので仕組み的には既存の監視方法と変わらないと思います
ホストとしての登録やテンプレートの登録が面倒ですがすでに Zabbix を使っているのであればこれで十分かなと思います
トリガーやアクションも使えるので
あとはコンテナホストに 1 つ必ず起動する必要があるので docker-swarm などを使っている場合はホストが追加されたときに必ず Zabbix Docker Monitoring コンテナを起動する必要があります
k8s であれば DaemonSet を使えば簡単に実現できると思います
0 件のコメント:
コメントを投稿