2019年6月22日土曜日

Zabbix4.2 を docker で立ち上げてみた

概要

公式の docker-compose ファイルがあったので試してみました

環境

  • Ubuntu 16.04 LTS
  • docker 18.09.6
  • docker-compose 1.24.0
  • Zabbix 4.2

Zabbix サーバ構築

  • git clone https://github.com/zabbix/zabbix-docker.git
  • cd zabbix-docker

デフォルトブランチは master ではなくバージョンのブランチになっているようです

  • git branch

=> 4.2

いくつか docker-compose ファイルを選択できます
alpine + mysql だったり ubuntu + postgres などが選択できます
今回は alpine + mysql にしました
また _local を使うと git clone した各種リソースを使ってイメージをビルドしてから立ち上がります

  • docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml up -d

イメージのダウンロードが始まるので待ちましょう
最終的に 9 つのコンテナが起動すれば OK です

  • docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml ps
               Name                             Command                       State                         Ports              
--------------------------------------------------------------------------------------------------------------------------------
zabbix-docker_db_data_mysql_1        sh                               Exit 0                                                   
zabbix-docker_mysql-server_1         docker-entrypoint.sh mysql ...   Up                                                       
zabbix-docker_zabbix-agent_1         /sbin/tini -- /usr/bin/doc ...   Up                                                       
zabbix-docker_zabbix-java-           docker-entrypoint.sh             Up                                                       
gateway_1                                                                                                                      
zabbix-docker_zabbix-proxy-mysql_1   /sbin/tini -- /usr/bin/doc ...   Up                      0.0.0.0:10071->10051/tcp         
zabbix-docker_zabbix-proxy-          /sbin/tini -- /usr/bin/doc ...   Up                      0.0.0.0:10061->10051/tcp         
sqlite3_1                                                                                                                      
zabbix-docker_zabbix-server_1        /sbin/tini -- /usr/bin/doc ...   Up                      0.0.0.0:10051->10051/tcp         
zabbix-docker_zabbix-snmptraps_1     /usr/bin/supervisord -c /e ...   Up                      0.0.0.0:162->162/udp             
zabbix-docker_zabbix-web-apache-     docker-entrypoint.sh             Up (health: starting)   0.0.0.0:443->443/tcp,            
mysql_1                                                                                       0.0.0.0:80->80/tcp               
zabbix-docker_zabbix-web-nginx-      docker-entrypoint.sh             Up (healthy)            0.0.0.0:8443->443/tcp,           
mysql_1                                                                                       0.0.0.0:8081->80/tcp

各役割ごとにコンテナが起動しています
ホストのポートを結構たくさんバインドするのですでに使っているポートがある場合は該当のプロセスを停止してから起動しましょう

管理画面にアクセスするには http://192.168.99.200 などのホストの IP に接続すれば OK です
パスワードは Admin/zabbix です (これはいいのだろうか、、)

ログインするといきなり zabbix-agent が zabbix-server を見つけられないエラーが、、

バグっぽいですが解決してあげます

  • docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml logs zabbix-agent

no active checks on server [zabbix-server:10051]: host [07890bd93e4d] not found なるエラーが出ていました
この 0be108601a3f は zabbix-agent のホスト名でした

設定ファイルを確認してみます

  • docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml exec zabbix-agent grep -v '^\s*#' /etc/zabbix/zabbix_agentd.conf |grep -v '^\s*$'

特に問題なさそうです
エラー的には zabbix-server が 0be108601a3f という名前のホスト名を探せないということなので怪しいのは Zabbix Server 側っぽいです
サーバ側のログを見てみます

  • docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml logs zabbix-server | grep 'cannot send list of active checks to'

cannot send list of active checks to "172.16.239.6": host [0be108601a3f] not found

つまり agent が 0be108601a3f というホストが Zabbix Server だよ送っているのに実際に zabbix-server コンテナが 0be108601a3f に聞きにいこうとしてもそんなホストは見つからないと言っているのです

で実際どこを変更すれば良いかと言うと Configuration -> Hosts で Zabbix Server の設定を開きます
そして Host name に zabbix-agent 入力し Agent interfaces の DNS name にも zabbix-agent を入力します
Connect to のトグルスイッチも DNS 側に変更しましょう
これで Zabbix Server 用の agent である zabbix-agent コンテナに名前でアクセスできるようになるため問題が解決します

また実は YAML ファイルも変更しています
やらなくてもステータスは緑になりますがエラーログが出続けるのでやってもよいかなと思います

  • git diff
git diff
diff --git a/docker-compose_v3_alpine_mysql_latest.yaml b/docker-compose_v3_alpine_mysql_latest.yaml
index 166b431..d82e759 100644
--- a/docker-compose_v3_alpine_mysql_latest.yaml
+++ b/docker-compose_v3_alpine_mysql_latest.yaml
@@ -269,6 +269,7 @@ services:

  zabbix-agent:
   image: zabbix/zabbix-agent:alpine-4.2-latest
+  hostname: zabbix-agent
   ports:
    - "10050:10050"
   volumes:

ただこれは結局 Zabbix Server のためのエージェントではなく zabbix-agent コンテナのエージェントの情報を監視しているだけなので意味はありません

proxy のエラーも出ている

以下のエラーも Zabbix Server のログに出ていました
必須ではないですが何となく対応してみました

zabbix-server_1            |    175:20190619:095634.153 cannot parse proxy data from active proxy at "172.16.238.7": proxy "zabbix-proxy-mysql" not found
zabbix-server_1            |    178:20190619:095634.154 cannot parse proxy data from active proxy at "172.16.238.4": proxy "zabbix-proxy-sqlite3" not found

これも UI にデータを入れれば OK です
Administration -> Proxies -> Create proxy でエラーになっているホストと IP アドレスの情報を登録すれば OK です

  • Proxy name・・・zabbix-proxy-mysql
  • Proxy address・・・172.16.238.7

  • Proxy name・・・zabbix-proxy-sqlite3
  • Proxy address・・・172.16.238.4

ステータスが緑になれば OK です

ただしこの方法だと各プロキシの IP がコンテナの再作成で変わる可能性があるので、その場合は再度登録してください

ZabbixAgent をコンテナとして動作させるには

方法としてはシステムディレクトリをマウントすればエージェントをコンテナで起動できるっぽいのですがあまりよろしい感じはしません (参考)
正直自分でも zabbix/zabbix-agent コンテナの使い方というか用途というか使う場面が思い浮かびません
docker ホストの監視をしたい場合は素直に zabbix-agent をインストールするのが良いと思います

強いて言えば適当なホストを追加したいときに zabbix-agent コンテナを立ち上げればホストの追加になるのでテスト用途として使う感じかなと思います

コンテナを監視するには

Zabbix Docker Monitoring というコンテナを開発してくれている方がいるのでこれを使います
テンプレートなどもあるのでそれを使えばアイテムなども Zabbix Server に登録されます
Zabbix Docker Monitoring については別記事で紹介したいと思います

やり直したい場合は

MySQL などのデータはコンテナを再作成しても残ります
なので再度一からやり直したい場合は以下のディレクトリのデータを削除しましょう

  • sudo rm -rf zbx_env/var/lib/mysql/*

最後に

Zabbix を docker で使う場合には

  • Zabbix Server はコンテナで OK
  • Zabbix Agent は素直にバイナリをホストにインストールする
  • コンテナの監視には Zabbix Docker Monitoring を使う

というのが無難かなと思います

0 件のコメント:

コメントを投稿