2020年12月20日日曜日

Zabbix Agent2を使ってDockerコンテナを監視する

Zabbix 5.0以降から正式サポートされるようになったZabbix Agent2では、DockerホストにインストールすることでDockerコンテナを監視することができる。本記事では、その手順を記載する。

手順

1. DockerホストにZabbix Agent2をインストール

Zabbix Agent2は、zabbix-releaseのrpmパッケージをインストールしたのち、dnfを使うことでインストールできる。

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
# dnf install zabbix-agent2 -y

2. Zabbix Agent2の設定ファイルを修正

設定ファイルは「/etc/zabbix/zabbix_agent2.conf」となる。以下3行を環境に合わせて修正する。

# vi /etc/zabbix/zabbix_agent2.conf
Server=<Zabbix ServerのIPアドレス>
ServerActive=<Zabbix ServerのIPアドレス>
Hostname=<ホスト名>

sedで修正する場合は、以下のように実行する。

# sed -i.org \
-e 's/^\(Server.*=\).*$/\1<Zabbix ServerのIPアドレス>/g' \
-e 's/^\(Hostname=\).*$/\1<ホスト名>/g' \
/etc/zabbix/zabbix_agent2.conf

3. dockerグループにzabbixユーザを追加

Zabbix Agent2はDockerコンテナの情報を取得する際に、「/var/run/docker.sock」にアクセスする。このファイルは以下の通りrootまたはdockerグループに所属するユーザでなければアクセスすることができない

# ls -l /var/run/docker.sock
srw-rw----. 1 root docker 0 12月  6 15:53 /var/run/docker.sock

Zabbix Agent2はzabbixユーザ権限で実行されるため、そのままでは「/var/run/docker.sock」のアクセスに失敗する。そこで、zabbixユーザをdockerグループに所属させることで対処する。

# usermod -aG docker zabbix
# cat /etc/group | grep docker
docker:x:990:zabbix

上記設定を実施しなかった場合、「Cannot fetch data.」というエラーがZabbix上に表示される。トラブルシュート時の参考情報を後述しているので、必要であれば確認いただきたい。

4. Zabbix Agent2のサービスを起動

設定ファイルを修正後、Zabbix Agent2を起動させる。

# systemctl start zabbix-agent2
# systemctl enable zabbix-agent2
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent2.service → /usr/lib/systemd/system/zabbix-agent2.service.

5. Dockerホストに「Template App Docker」のテンプレートを適用

Zabbix 5.0に「Template App Docker」というテンプレートが存在するので、Dockerホストとなるホストにテンプレートを適用する。

6. コンテナの情報がディスカバリされるのを待つ

ディスカバリは15分間隔で実行されるので待機する。

15分経過したのち「監視データ」→「最新のデータ」にてDockerホストのデータを確認し、コンテナの情報が取得できていれば問題ない。

以下の図では、「centos-squid」という名前のコンテナのCPUやメモリ使用率が取得できていることが確認できる。

【参考1】「Cannot fetch data.」のエラーでコンテナの情報取得に失敗する

zabbixユーザの権限不足によりDockerコンテナの情報取得に失敗した場合、以下のエラーがZabbixのGUI上に表示される。

Cannot fetch data.

zabbix_getコマンドを使うことで、接続確認をすることができるが、同様に「Cannot fetch data.」のエラーで失敗する。

# zabbix_get -s 192.168.33.28 -k docker.info
ZBX_NOTSUPPORTED: Cannot fetch data.

手順に記載した通り、zabbixユーザをdockerグループに所属させることで解消できる。ただし、権限の設定を行ってもzabbix_getコマンドの結果は同じエラーとなり改善しなかったので、権限設定後に必ずZabbix Agent2のサービス再起動をすること

# usermod -aG docker zabbix
# cat /etc/group | grep docker
docker:x:990:zabbix
# systemctl restart zabbix-agent2

再度、zabbix_getコマンドで確認すると、以下の通り情報取得ができるようになったことが確認できた。

# zabbix_get -s 192.168.33.28 -k docker.info | jq
{
  "Id": "TYHR:QZBY:IUDW:3SAK:MXV3:FXPW:A3U3:CS5M:WKUC:5NMO:CAJ3:6ZVV",
  "Containers": 3,
  "ContainersRunning": 3,

~(中略)~

  "InitBinary": "docker-init",
  "SecurityOptions": [
    "name=seccomp,profile=default"
  ],
  "Warnings": null
}

【参考2】Zabbix 5.0より前のバージョンにおけるDockerコンテナの監視方法

Zabbix 5.0より前のバージョンでは、「Zabbix Docker Monitoring」と呼ばれるコンテナ監視用のコンテナを起動させて監視するという方法で実現していたようだ。こちらの手法については、以下URLを参照いただきたい。

参考

0 件のコメント:

コメントを投稿

人気の投稿