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を配置すると使えるようになります。