あるホスト上に動いている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
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の追加
- テンプレートをダウンロード
-
Configration
>Template
に移動後右上のimport
をクリック -
参照
から先ほどダウンロードしたZabbix-Template-App-Docker.xml
を選択してimport
- 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 templates
にTemplate App Docker - www.monitoringartist.com
- (注意) 上のAddを押してから下のAddを押す(参考画像②)
-
-
-
これで設定は終了でConfigration
> Hosts
に戻ってZBXが緑になれば成功です(参考画像③)。
※ 緑になるまで時間がかかることがあります。
[参考画像]
- ①Create host
- ②Create host-Template追加
- ③Zabbix Agent有効可の確認
モニタリング状況の確認
Monitoring
> Latestdata
に移動しHost groups
をdocker
にして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で設定(参考画像⑤)
- Name:
最終的にできたものは参考画像⑥になります。
これで適当なコンテナを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を配置すると使えるようになります。