Zabbixエージェント2を使用したDockerの監視

# はじめに

Zabbix 5.0で正式にサポートとなったZabbixエージェント2(Zabbix agent 2)ですが、プラグインとしてOS関連以外に以下のようなものに対する監視のための機能が用意されています。

- Docker
- Memcached
- MySQL
- Redis

その中でも今回はDockerの監視の設定を紹介します。


# Docker環境の準備

この資料では、Docker CE(Community Edition)の監視をご紹介します。

公式には、CentOS 8上ではDocker CEのサポートはされておらず、CentOS 8上でDocker互換のコンテナを稼働させるには、Podmanというソフトウェアを使用することになっています。このPodmanは、root権限でのデーモンやroot権限を必要とするような実行環境ではないので、セキュリティを考慮したものとなっているようです。(他にもいろいろ考慮されているようです。)

しかし、今回紹介しようとしているZabbixエージェント2のDocker用プラグインでは、Dockerのソケットを使用してメトリクスを取得するものとなっているので、Podmanの環境では現時点では機能しないと思われます。そこで今回は、Docker CEを用いたものとします。


## CentOS 8上にDocker CEのインストール

公式にサポートされてはいませんが、インターネット上で公開されていた情報を整理した手順は以下のようになります。
バージョンによっては手順が異なる場合があるかもしれませんが、紹介する手順は以下のバージョンの組み合わせです。

- CentOS 8.1.1911
- docker-ce-19.03.9-3 (最終的なアップデート実行後)

それでは実際の手順です。

```
# dnf remove podman
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# dnf install --nobest docker-ce docker-ce-cli
# dnf update https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
# dnf update
# systemctl start docker
# systemctl enable docker
# firewall-cmd --add-masquerade --permanent
# firewall-cmd --reload
```

最初にpodmanというパッケージを削除しているのは、上で紹介したPodmanが既にインストールされていた場合用の手順です。
そして、Docker用のリポジトリを登録して、そのリポジトリからdocker-ceをインストールするわけです。その後にRHEL 7用パッケージで一時的にcontainerd.ioだけを無理やりアップデートするのは、その後に、dnfコマンドでアップデートできるようにするためです。

firewalldの設定は、Docker HUBなどからイメージを取得するために、上記のような設定をしてみました。


# Zabbixエージェント2のインストール

## CeneOS 8へのZabbixエージェント2のインストール

Zabbix公式のリポジトリを使用してインストールします。

```
# dnf install https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
# dnf install zabbix-agent2
# vi /etc/zabbix/zabbix_agent2.conf
# firewall-cmd --add-port=10050/tcp --zone=public --permanent
# firewall-cmd --reload
# gpasswd -a zabbix docker
# systemctl start zabbix-agent2
# systemctl enable zabbix-agent2
```

設定ファイルが、/etc/zabbix/zabbix_agent2.confになっている点に注意が必要ですが、基本的な設定は従来のZabbixエージェントと同様に、Hostname、Server、ServerActiveなどを設定してください。


# Zabbixサーバー上での監視設定の追加

ZabbixサーバーからLinuxのOS部分とDockerの両方を監視するのであれば、その対象のホストに以下の2つのテンプレートをリンクさせます。

- Template OS Linux by Zabbix agent
- Template App Docker

今回紹介しているZabbixエージェント2のDockerの監視機能では、Dockerのソケットインターフェースを使用してメトリクスを取得しています。CentOS 8上にDocker CEをインストールした場合は、「/var/run/docker.sock」がそのソケットです。

デフォルトでは以下のようなパーミッションになっていると思います。

```
# ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0  4月  1 18:16 /var/run/docker.sock
#
```

つまり、rootユーザーか、dockerグループのユーザーのみが読み書きのアクセスすることができるようになっています。
Zabbixエージェント2がアクセスできるようにするには、Zabbixエージェント2を起動しているユーザー「zabbix」でこのソケットにアクセスすることが必要であるため、いくつか方法はあると思いますが、ユーザー「zabbix」をdockerグループに所属させる方法を取ることを選択してみました。先ほどの手順内にあった

```
# gpasswd -a zabbix docker
```

を実行していたのはそのための手順です。


# 監視できる主な項目
Docker環境全体としては、以下のようなメトリクスを取得できます。

- Dockerのバージョン
- ホストOSやカーネルのバージョン
- ホストのアーキテクチャとCPU数、積載メモリ
- 使用しているストレージドライバ
- 有効なイメージの数やサイズ

コンテナごとには以下のようなメトリクスを取得できます。

- 作成日時
- CPU使用量(kernel、usermode)
- メモリ使用量
- ネットワークI/O
- ベースイメージ

ダウンロード済みのイメージごとに関しては以下のようなメトリクスを取得できます。

- 作成日時
- サイズ

# 最後に
UbuntuなどCentOS 8以外に関しても後で追記しようと思います。

# 参考URL

- [コンテナーの構築、実行、および管理](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html-single/building_running_and_managing_containers/index)
- [CentOS 用 Docker CE の入手](http://docs.docker.jp/engine/installation/linux/docker-ce/centos.html)
- [CentOS8にDockerをインストール。名前解決できなかったのが解消した。](https://qiita.com/bashaway/items/4001c0ad5a6f21957986)