2019年6月30日日曜日

Zabbix Docker Monitoring を使ってコンテナ監視をしてみた

概要

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_Server172.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 件のコメント:

コメントを投稿