7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Zabbix によるGPUサーバの監視

Last updated at Posted at 2018-07-26

はじめに

ZabbixでGPUサーバの使用率等を監視する環境を構築します.

zabbixのバージョン: 3.4
zabbix serverのFQDN: ZABBIX.SERVER

Zabbixとは

Zabbixは,Zabbix社が開発した"ネットワーク管理ソフトウェア"です.
監視サーバを中心にして,様々なサーバをリモートで監視することができます.

環境構築

データを収集し監視を行うZabbix Serverの構築と,対象の各サーバにAgentの導入が必要です.

Zabbix Server

このServerが監視対象サーバからのデータを管理し,必要に応じてアラート等を発します.
こちらはDockerを使った構築が便利です.
なお,初期アカウントは admin/zabbix でログインできます.

docker-compose.yml
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
#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

CentOS7
$ 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は対象サーバのホストネームです.

/etc/zabbix/zabbix_agentd.conf
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に実行権限を与えます.

監視対象の追加

  1. 対象サーバに上記の設定を行います.
  2. Web GUI -> Configuration-> Hosts の右上 Create Hostを押下します.
    • HostnameにTARGET.SERVERを入力します (対象サーバ側の設定と一致する必要があります).
    • Visible nameは任意です.
    • Group は最低1つに所属させる必要があります.
    • IP address or DNS nameどちらかを入力します.通常はDNS nameにTARGET.SERVERで良いはずです."Connect to"はどちらか適切に選択します.
  3. Templateに切り替えます.
    • Select からテンプレートを追加します. Template OS LinuxTemplate Nvidia GPUs Performance を選択します.
    • 青いボタン状のAddの上のAddを押さないと反映されません.
  4. AddでHostの追加します.

ビジュアライゼーション

すべてのGPUの状況を一覧できるScreenを作成すると便利です.
あらかじめ複数のGraphをまとめて定義したGraph prototypeを使うと少ない作業量で作成できます.

  1. ResourceでGraph prototypeを選択.
  2. Graph prototypeで追加したいHostのprototypeを選択.上記でインポートしたテンプレートにはGPU関連で次の3つが定義されています.もちろん自分で追加編集できます.:
    • GPU {#GPUINDEX} Memory
    • GPU {#GPUINDEX} Temperature, Fan Speed and Power
    • GPU {#GPUINDEX} Utilization
  3. 縦横の個数などを調整します.例えば,4GPU搭載のホストと8GPU搭載のホストが混在している場合,横幅を4に統一するといい感じに一覧できると思います (8GPUのホストは2段表示).
  4. ホストの数だけ作業を繰り返す.

ユーザへの公開

特定のGroupに読み取り権限を与えることで,Screenを公開することができます.
例えばGuestsに権限を与えることで,ログイン不要でサーバの状況を確認することができるようになります.
注意点としては,Screenだけでなく,ホスト自体への読み取り権限も与える必要があります.これにより,GuestsはScreen上の値だけでなく,すべてのデータにアクセス(Read)できるようになります.おそらく公開するデータのみに絞ったTemplateを作成することでアクセス権限を絞ることは可能だと思いますが,とくに悪用できるようなデータはないと思っているので,私はすべて公開しています.

screenの公開設定

  1. 対象のScreenのPropertiesからSharingを選択.
  2. 公開したい対象のGroup (たとえばGuests) を追加し,Read-onlyの権限を与える.

ホストの公開設定

  1. AdministrationからUser groupsを開き,対象のGroup (たとえばGuests) を選択する.
  2. Permissionsから公開したいHost groupにReadの権限を与える.
7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?