はじめに
Machine Learning の流行でサーバーでも GPU を使う機会が増えてきたのではないだろうか。
そんな中ついに Zabbix7.2 から公式の GPU 監視機能が追加された。
しかし、実際に試してみると、nvml ライブラリ関連のトラブルに直面した……
この記事では Zabbix 7.0 からのアップデート手順と、GPU 監視がうまく動かない原因とその解決策を詳しく解説する。
環境
- Zabbix サーバー: 7.0.13
- LXC コンテナで実行
- Ubuntu 24.04
- Zabbix Agent2
- ホストサーバー
- RTX3060
- Ubuntu 24.04
Zabbix 7.0 から 7.2 へのサーバーアップグレード手順
Zabbix サーバーをアップデートする。
apt で入れているのでレポジトリを変更して update をかける。
zabbix サーバーに SSH でログインし、root ユーザーで実行する。
$ sudo -s
wget https://repo.zabbix.com/zabbix/7.2/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.2+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.2+ubuntu24.04_all.deb
apt update
この状態でパッケージを更新すれば Zabbix のバージョンが上がる。
このコンテナは zabbix しか使っていないので全てのパッケージをアップデートした。
特に本番環境で実行する際は依存関係などを確認して必要なパッケージだけアップデートすること。
apt upgrade
Zabbix7.2 から Frontend のソースコードの位置が変更されており、うまく起動しなかったため修正した。
Zabbix の WEBUI 上に修正手順が表示される。
sed -i s:/usr/share/zabbix:/usr/share/zabbix/ui:g
systemctl restart nginx
systemctl restart zabbix-server
データベースが自動的にアップデートされて通常利用できるようになる。
Zabbix 7.2 に GPU 監視テンプレートを追加する方法
アップデートすれば監視できると思いきや、監視項目が増えなかった。
GPU 用の監視テンプレートが入っていないようだったのでインストールした。
※もしかしたら 7.0 からアップデートしたことが原因かもしれない。
この yaml をダウンロードして Zabbix の WebUI からインポートした。
TOP -> Data collection -> Templates -> Import
しかし監視データが取れなかった。
Unknown metric nvml.device.get
Zabbix-Agent をアップデートする
監視先の Zabbix-agent をアップデートした。
アップデート方法は zabbix サーバーとほぼ変わらず。
監視先であるホストサーバーで実行した。
wget https://repo.zabbix.com/zabbix/7.2/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.2+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.2+ubuntu24.04_all.deb
apt update
apt upgrade zabbix-agent
この状態でも監視データがとれず調べていると、Zabbix-agent2 のプラグインをインストールする必要があることに気づいた。
apt で検索してみるとzabbix-agent2-plugin-nvidia-gpu
がヒットした。
apt search agent2
ソート中... 完了
全文検索... 完了
zabbix-agent2/不明,now 1:7.2.7-1+ubuntu24.04 amd64 [インストール済み]
Zabbix network monitoring solution - agent
zabbix-agent2-dbgsym/不明 1:7.2.7-1+ubuntu24.04 amd64
debug symbols for zabbix-agent2
zabbix-agent2-plugin-ember-plus/不明 1:7.2.7-1+ubuntu24.04 amd64
Zabbix Agent2 plugin for monitoring Ember Plus installations
zabbix-agent2-plugin-mongodb/不明 1:7.2.7-1+ubuntu24.04 amd64
Zabbix Agent2 plugin for monitoring MongoDB installations
zabbix-agent2-plugin-mssql/不明 1:7.2.7-1+ubuntu24.04 amd64
Zabbix Agent2 plugin for monitoring MSSQL installations
zabbix-agent2-plugin-nvidia-gpu/不明,now 1:7.2.7-1+ubuntu24.04 amd64 [インストール済み]
Zabbix Agent2 plugin for monitoring a broad range of NVIDIA GPU metrics
zabbix-agent2-plugin-postgresql/不明 1:7.2.7-1+ubuntu24.04 amd64
Zabbix Agent2 plugin for monitoring PostgreSQL installations
apt install zabbix-agent2-plugin-nvidia-gpu
このプラグインインストール後に Zabbix-Agent が起動しなくなった。
6月 14 02:14:04 host zabbix_agent2[2922478]: zabbix_agent2 [2922478]: ERROR: Cannot register plugins: failed to register metrics of plugin "NVIDIA": failed plugin registration: Failed to validate plugin: Failed to validate nvml runner: faile>
6月 14 02:14:04 host systemd[1]: zabbix-agent2.service: Main process exited, code=exited, status=1/FAILURE
Zabbix Agent2 が nvml ライブラリを読み込めない問題の解決
直接 zabbix-agent2 を実行すると nvml の shared library が読み込めてないことがわかる。
# /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf -f
zabbix_agent2 [2925584]: ERROR: Cannot register plugins: failed to register metrics of plugin "NVIDIA": failed plugin registration: Failed to validate plugin: Failed to validate nvml runner: failed to create new nvml runner: NVML error: NVML Shared Library couldn't be found or loaded.
ライブラリはすでに存在した。
/usr/lib/i386-linux-gnu/libnvidia-ml.so.565.57.01
/usr/lib/i386-linux-gnu/libnvidia-ml.so.1
/usr/lib/x86_64-linux-gnu/yelp/libnvidia-ml.so.565.57.01
/usr/lib/x86_64-linux-gnu/yelp/libnvidia-ml.so.1
/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.565.57.01
/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1
/usr/lib/libnvidia-ml.so.1
一応lib
にシンボリックリンクを貼ってみたが起動せず。
Zabbix のフォーラムを彷徨うも、答えを見つけられず……
ソースコードを読んで、該当箇所を確認した。
該当箇所は 716 行目
func loadLibrary() (unsafe.Pointer, error) {
libName := C.CString("libnvidia-ml.so")
defer C.free(unsafe.Pointer(libName)) //nolint:nlreturn
handle := C.dlopen(libName, C.RTLD_LAZY|C.RTLD_GLOBAL)
if handle == nil {
return nil, ErrLibraryNotFound
}
読み込みファイル名がlibnvidia-ml.so
になっていたのでシンボリックリンクを作った。
ln -s /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/libnvidia-ml.so
これで起動した。
systemctl status zabbix-agent2
● zabbix-agent2.service - Zabbix Agent 2
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent2.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-06-14 03:49:52 JST; 9s ago
Main PID: 2949841 (zabbix_agent2)
Tasks: 22 (limit: 18710)
Memory: 23.3M (peak: 25.0M)
CPU: 188ms
CGroup: /system.slice/zabbix-agent2.service
├─2949841 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf
└─2949868 /usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu /run/zabbix/agent.plugin.sock false
Zabbix によって GPU がローレベルディスカバリーされ、温度や使用率が正しく取得できていることが確認できる。
まとめ
予想以上にハマった。
当初 zabbix-agent2 のログに何も表示されず、systemd のログを頼りにいじっていた。
共有ライブラリが原因とわかってからは関係ありそうなプログラムを ldd で調べていった。
最終ソースコードを読むことになるとは当初は思ってもみなかった。
Zabbix の GPU の監視は対応して日が浅く文献も少ないので誰かの助けになればよい。
参考
おしまい