はじめに
ZabbixでGPUサーバの使用率等を監視する環境を構築します.
zabbixのバージョン: 3.4
zabbix serverのFQDN: ZABBIX.SERVER
Zabbixとは
Zabbixは,Zabbix社が開発した"ネットワーク管理ソフトウェア"です.
監視サーバを中心にして,様々なサーバをリモートで監視することができます.
環境構築
データを収集し監視を行うZabbix Serverの構築と,対象の各サーバにAgentの導入が必要です.
Zabbix Server
このServerが監視対象サーバからのデータを管理し,必要に応じてアラート等を発します.
こちらはDockerを使った構築が便利です.
なお,初期アカウントは admin/zabbix でログインできます.
version: '2'
services:
mysql:
image: mysql:5.7
restart: always
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- ./data/mysql:/var/lib/mysql
expose:
- "3306"
environment:
MYSQL_ROOT_PASSWORD: docker
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
zabbix-server:
image: zabbix/zabbix-server-mysql:alpine-3.4-latest
restart: always
volumes:
- ./data/zabbix:/var/lib/zabbix
environment:
DB_SERVER_HOST: mysql
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
ports:
- "10051:10051"
depends_on:
- mysql
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:alpine-3.4-latest
restart: always
environment:
DB_SERVER_HOST: mysql
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: Asia/Tokyo
ports:
- "80:80"
depends_on:
- mysql
- zabbix-server
(参考: https://qiita.com/330k/items/3d3f984a5d3a374ccc96)
Zabbix agent
監視対象に導入し,Zabbix Serverにデータを送信するクライアントです.
こちらもDockerで導入することは可能ですが,GPUを監視したい場合コンテナ内からアクセスする必要が出てきます (nvidia-docker等使えば可能だと思いますが未確認です).
ここでは,Agentは対象サーバに直接インストールすることを想定します.公式ドキュメントに従えば簡単です.(https://www.zabbix.com/documentation/3.4/manual/installation/install_from_packages/)
(例) ubuntu 14.04/16.04
#ubuntu 18.04
$ wget http://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+bionic_all.deb
# ubuntu16.04
$ wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb
# ubuntu14.04
$ wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+trusty_all.deb
$ dpkg -i zabbix-release_3.4-1+*_all.deb
$ apt-get update
$ apt-get install zabbix-agent
# 起動/自動起動
$ service zabbix-agent start
$ systemctl enable zabbix-agent
(例) CentOS 7
$ rpm -ivh https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
$ yum install zabbix-agent
設定
設定ファイルを編集します.TARGET.SERVER
は対象サーバのホストネームです.
Server=ZABBIX.SERVER
ServerActive=ZABBIX.SERVER
Hostname=TARGET.SERVER
GPUの監視
デフォルトではGPUの監視はできません.そこで設定の追加を行います.なお,ここではNvidiaのGPUのみを想定しています.
搭載するGPUが1枚のみの場合は https://github.com/RichardKav/zabbix-nvidia-smi-integration が使えます.また複数のGPUの場合は https://github.com/plambe/zabbix-nvidia-smi-multi-gpu が使えます.以下は複数GPUの設定です.
Server側
テンプレートをインポートします.
Web GUI -> Configuration-> Templates から右上のImportを押下します.Import Fileにリポジトリのxmlファイルを指定します.
クライアント側
-
/etc/zabbix/zabbix_agentd.conf
にリポジトリ内のuserparameter_nvidia-smi.conf.linux
の中身を追記します. - リポジトリ内の
get_gpus_info.sh
を/etc/zabbix/scripts/
にコピーします (このディレクトリはデフォルトでは存在しません.).get_gpus_info.sh
に実行権限を与えます.
監視対象の追加
- 対象サーバに上記の設定を行います.
- Web GUI -> Configuration-> Hosts の右上 Create Hostを押下します.
- Hostnameに
TARGET.SERVER
を入力します (対象サーバ側の設定と一致する必要があります). - Visible nameは任意です.
- Group は最低1つに所属させる必要があります.
- IP address or DNS nameどちらかを入力します.通常はDNS nameに
TARGET.SERVER
で良いはずです."Connect to"はどちらか適切に選択します.
- Hostnameに
- Templateに切り替えます.
- Select からテンプレートを追加します.
Template OS Linux
とTemplate Nvidia GPUs Performance
を選択します. - 青いボタン状の
Add
の上のAdd
を押さないと反映されません.
- Select からテンプレートを追加します.
- AddでHostの追加します.
ビジュアライゼーション
すべてのGPUの状況を一覧できるScreenを作成すると便利です.
あらかじめ複数のGraphをまとめて定義したGraph prototypeを使うと少ない作業量で作成できます.
- ResourceでGraph prototypeを選択.
- Graph prototypeで追加したいHostのprototypeを選択.上記でインポートしたテンプレートにはGPU関連で次の3つが定義されています.もちろん自分で追加編集できます.:
- GPU {#GPUINDEX} Memory
- GPU {#GPUINDEX} Temperature, Fan Speed and Power
- GPU {#GPUINDEX} Utilization
- 縦横の個数などを調整します.例えば,4GPU搭載のホストと8GPU搭載のホストが混在している場合,横幅を4に統一するといい感じに一覧できると思います (8GPUのホストは2段表示).
- ホストの数だけ作業を繰り返す.
ユーザへの公開
特定のGroupに読み取り権限を与えることで,Screenを公開することができます.
例えばGuestsに権限を与えることで,ログイン不要でサーバの状況を確認することができるようになります.
注意点としては,Screenだけでなく,ホスト自体への読み取り権限も与える必要があります.これにより,GuestsはScreen上の値だけでなく,すべてのデータにアクセス(Read)できるようになります.おそらく公開するデータのみに絞ったTemplateを作成することでアクセス権限を絞ることは可能だと思いますが,とくに悪用できるようなデータはないと思っているので,私はすべて公開しています.
screenの公開設定
- 対象のScreenのPropertiesからSharingを選択.
- 公開したい対象のGroup (たとえばGuests) を追加し,Read-onlyの権限を与える.
ホストの公開設定
- AdministrationからUser groupsを開き,対象のGroup (たとえばGuests) を選択する.
- Permissionsから公開したいHost groupにReadの権限を与える.