Edited at

Docker監視用のZabbix Server/Agentをdocker-composeでまとめて立ち上げて簡単に監視する

あるホスト上に動いているDockerの監視をZabbix Server/Agentで行います。

以下のように監視対象のdockerが動いてるhost上にZabbix一式を立ち上げて監視して、downしたらアラートを発行するようにします。

この方法の場合1host = 1 Zabbix Agentになるのでホストが複数あるときは各ホストにZabbix Agentコンテナを立ち上げることになります。

今回は1hostの場合の手順です。


Zabbix Server/Agentの用意

まずはZabbix Server/Agentを立ち上げます。

以下のdocker-compose.ymlを作成してdocker-compose up -d


docker-compose.yml

version: '3'

services:
zabbix-agent:
image: monitoringartist/dockbix-agent-xxl-limited:latest
hostname: zabbix-agent
environment:
ZA_Server: 0.0.0.0/0
ZA_ServerActive: zabbix-server
volumes:
- /:/rootfs
- /var/run:/var/run
restart: always
zabbix-db:
image: monitoringartist/zabbix-db-mariadb
environment:
MARIADB_USER: zabbix
MARIADB_PASS: my_password
volumes:
- /etc/localtime:/etc/localtime:ro
- ./zabbix-db-data:/var/lib/mysql
restart: always
zabbix-server:
image: monitoringartist/dockbix-xxl:latest
environment:
ZS_DBHost: zabbix-db
ZS_DBUser: zabbix
ZS_DBPassword: my_password
#XXL_zapix: 'true'
#XXL_grapher: 'true'
volumes:
- /etc/localtime:/etc/localtime:ro
- ./zabbix-server/alertscripts:/usr/local/share/zabbix/alertscripts
ports:
- 38080:80
restart: always

これでhttp://<ホストIP>:38080にブラウザから接続すればZabbixのWebUIが見れます。

ちなみに私の環境では起動完了まで数分かかりました。


Zabbix-Serverの設定

WebUIから監視設定を入れていきます。

初期状態ではAdmin/zabbixでログインできます。

下の参考画像を見ながら以下の設定を行ってください。


  • templateの追加



  • hostの追加



    • Configration > Hostsに移動後右上のCreate hostをクリック

    • 以下を設定(参考画像①)



      • Hostタブ


        • Host name: zabbix-agent

        • Groups: docker

        • Agent interfaces


          • DNS name: zabbix-agent

          • Connect to: DNS

          • Port: 10050






      • Templatesタブ



        • Link new templatesTemplate App Docker - www.monitoringartist.com


          • (注意) 上のAddを押してから下のAddを押す(参考画像②)









これで設定は終了でConfigration > Hostsに戻ってZBXが緑になれば成功です(参考画像③)。

※ 緑になるまで時間がかかることがあります。

[参考画像]


  • ①Create host


  • ②Create host-Template追加


  • ③Zabbix Agent有効可の確認


モニタリング状況の確認

Monitoring > Latestdataに移動しHost groupsdockerにしてApplyすると一覧が表示されると思います。

今回のTemplateで取得できる情報は各コンテナごとの


  • Container is running

  • CPU utilization

  • Used cache memory

  • Used RSS memory

  • Used swap

になります。


アラートの設定

ここまでで監視はできるようになりましたが、コンテナに何かあっても特に表示されません。

今回はコンテナがdownしたらアラートが出るようにします。



  • Configration > Template > Template App Docker - www.monitoringartist.com > Discovery rulesタブに移動

  • 表示されているRunning containers列のTrigger prototypesをクリック(参考画像④)

  • 右上のCreate trigger prototypesをクリックし以下を設定をAdd


    • Name: Container {#HCONTAINERID} is down

    • Severity: Heigh

    • Expression: {Template App Docker - www.monitoringartist.com:docker.up[/{#HCONTAINERID}].last()}=0


      • 横のAddからGUIで設定(参考画像⑤)





最終的にできたものは参考画像⑥になります。

これで適当なコンテナをStopすると参考画像⑦のようにWebUIのトップに障害が表示されるようになります。

[参考画像]


  • ④Trigger prototypes


  • ⑤Expression


  • ⑥Trigger


  • ⑦障害画面


おまけ: Slackに通知

解説は探せば出てくると思うのでここには書きませんが、アラートをSlackに連携しておくと便利です。

いくつか方法があるみたいですが私は https://github.com/ericoc/zabbix-slack-alertscript を使うことにしました。

今回のdocker-compose.ymlではzabbix-serverはvolumeで./zabbix-server/alertscripts:/usr/local/share/zabbix/alertscriptsを指定しているので./zabbix-server/alertscriptsに上記github urlのslack.shを配置すると使えるようになります。