仮想環境におけるCPU使用率(仮想マシンおよびハイパーバイザー)

いつもお世話になっております

現在仮想環境上でCPUの使用率の監視を行いたいと検討しております

「Zabbix 統合監視 徹底活用」および「改訂版 Zabbix 統合監視 実践入門」を
読みながらそれらしいキーを捜しているのですが

両著とも
仮想マシンのCPU使用率(Hz単位)
vmware.vm.cpu.usage[{$URL},{HOST.HOST}]
(「Zabbix 統合監視 徹底活用」p332)

ハイパバイザーのCPU使用率(Hz単位)
vmware.hv.cpu.usage[{$URL},{HOST.HOST}]
(「Zabbix 統合監視 徹底活用」p328)

がAppendixであるのを確認しましたが、これは単位がHzで使用率である割合
%表示にならないと考えておりますが、どのようにしたらCPU使用率を%で表示
できるように設定すればよいのでしょうか

何卒ご教示頂けますよう宜しくお願いします

環境は
Zabbix 2.4.2
VMwareはESXiの5.5
となります

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー HERCULY の写真

申し訳ありません

環境は
Zabbix 2.4.2
VMwareはESXiの5.5
となります

ユーザー TNK の写真

例えば、VMに対するCPU使用率を求めるのであれば、VMに対応する
ハイパーバイザを特定して、そのハイパーバイザの、

 vmware.hv.hw.cpu.freq

でハイパーバイザのCPUの周波数を取得して、VMに割り当てられた
CPU数は、

 vmware.vm.cpu.num

ですから、そのVMに割り当てられたCPUの周波数は、この2つを掛け
合わせたものとなると思います。
そして、この割り当てられた周波数に対して、

 vmware.vm.cpu.usage

がどの程度の割合を占めるかというような計算をしないといけなさ
そうです。

計算アイテムとかを利用して実現できるとは思うのですが試してい
ません。

ユーザー HERCULY の写真

TNKさま

お世話になっております

Template Virt VMware Guestで ハイパーバイザーの周波数をだそうとして
アイテムに
vmware.hv.hw.cpu.freq[{$URL},{HOME.HOME}]
を試してみたのですがうまく反映しませんでした。

{HOME.HOME}で引っかかっているのでしょうか
(uuidでエラーが出て計算できないと帰って来ました)

また確認させていただきたいのですが、
(ハイパーバイザーの周波数)*(VMのCPU数)がVMに割り当てられた
周波数と考えてよろしいのでしょうか。

ややこしい質問で申し訳ありませんがよろしくお願いします

ユーザー TNK の写真

アイテムに
vmware.hv.hw.cpu.freq[{$URL},{HOME.HOME}]
を試してみたのですがうまく反映しませんでした。

「{HOME.HOME}」というマクロを利用されているようですが、ご自
身でそのマクロを定義されているのですか?
どのような内容を設定されているのでしょうか?

ディスカバリなどを利用されていると思うのですが、他のアイテム
などと連携させた値を取得するのであれば、他のアイテムと合わせ
てください。

また、vmware.hv.hw.cpu.freq[]の引数には、ハイパーバイザの名
前を指定する必要があったと思いますので、テンプレートの

 Template Virt VMware Guest

内から参照するのであれば、計算アイテム内で、

 vmware.hv.hw.cpu.freq[{$URL},"vmware.vm.hv.name[{$URL},{HOST.HOST}]"]

というように参照させないといけないのではないでしょうか。

また確認させていただきたいのですが、
(ハイパーバイザーの周波数)*(VMのCPU数)がVMに割り当てられた
周波数と考えてよろしいのでしょうか。

日本語がわかりづらかったようで申し訳ありません。

ご認識されている通り、先の回答にも書かせて頂きましたが、

 ハイパーバイザのCPUの周波数 × VMに割り当てられたCPU数

が「VMに割り当てられたCPUの周波数」になるはずです。

ご確認ください。

ユーザー HERCULY の写真

TNKさま

お世話になっております
早々のお返事ありがとうございました

{HOME.HOME}はご指摘のとおりでタイプミスで{HOST.HOST}です
大変失礼しました。

ご指摘いただきました
vmware.hv.hw.cpu.freq[{$URL},"vmware.vm.hv.name[{$URL},{HOST.HOST}]"]
で検証したところ

「unknown hypereviser uuid」

と出ました。名前でなくuuidですと
vmware.hv.hw.uuid[{$URL},{HOST.HOST}]
で出せるかと試してみましたが今度は

「Macro '{$URL}' value is not numeric」と出ます

試してみた報告をいたします

ユーザー TNK の写真
計算アイテムで式に、
last("vmware.vm.hv.name[{$URL},{HOST.HOST}]":"vmware.hv.hw.cpu.freq[{$URL},\"vmware.vm.hv.name[{$URL},{HOST.HOST}]\"]")

と指定してハイパーバイザのCPUの周波数を参照できませんか?
ユーザー HERCULY の写真

TNKさま

早速ありがとうございます
入力したところ
Invalid first parameter in function[last("vmware.vm.hv.name[{$URL},{HOST.HOST}]":"vmware.hv.hw.cpu.freq[{$URL},\"vmware.vm.hv.name[{$URL},{HOST.HOST}]\"]")]

とエラーが出て来ました。
パラメータ値が関数とに何かあるのでしょうか?

ユーザー TNK の写真

まずは、アイテムをどのテンプレートに作成されていますか?
アイテムは、計算アイテムとして作成されていますか?
計算アイテムの「式」に入力されていますか?

Zabbix 2.4.2上のテンプレート「Template Virt VMware Guest」上
に登録してみていますが、そのようなエラーは発生しません。

実際に呼び出す先のVMware環境が今ないので、実際に動作するかま
では確認できていませんが、登録しようとする際にそのようなエラ
ーが出るということは、登録しようとしている場所や内容が誤って
いる可能性が高いと思われます。

ユーザー HERCULY の写真

TNKさま

お世話になったおります
アイテムの配置場所は「Template Virt VMware Guest」です

アイテムは
名前:CPU ferq
タイプ:計算
式:last("vmware.vm.hv.name[{$URL},{HOST.HOST}]":"vmware.hv.hw.cpu.freq[{$URL},\"vmware.vm.hv.name[{$URL},{HOST.HOST}]\"]")
データ型:数値(浮動少数)
単位:Hz
キー:calc.vmware.vm.cpu.usage.hv.name[{$URL},{HOST.HOST}]
更新間隔(秒):30
ヒストリ保存期間:90
トレンド保存期間:365
保存時の計算:なし
値のマッピング使用:なし
アプリケーション:CPU
ホストインベントリフィールドの自動設定:なし

と設定しておりますがやはり状況は同じです
先週の時点では直接インターネットに接続できる環境になかったため、テキストをそのままコピー&ペーストして試しましたが同じでした。

何が原因なのでしょうか?キーでしょうか?

ユーザー ryudai の写真

HERCULY さま

当方も、同様のエラーが発生し「取得不可」となっています。
キーのみ設定値が違いますが「Template Virt VMware Guest」に「アイテム」登録しています。

その後、問題解決されデータは取得できるようになられましたでしょうか?
もし解決されていましたら修正箇所を教えていただけないでしょうか?

よろしくお願いいたします。

ユーザー t-h の写真

HERCULYさんと似たような事象で以前投稿したことがありましたので、参考までにレスさせていただきます。

HypervisorのCPU使用率(%)は、次の2アイテムを作成することで実現できるかと思います。
・CPUの全リソースを求める計算アイテムを作成
・CPU使用率(%)を求める計算アイテムを作成

・CPUの全リソースを求める計算アイテム
テンプレート:Template Virt VMware Hypervisor
アイテムを新規作成
[アイテム作成画面]
名前:CPU Total Resource
タイプ:計算
キー:CPU_Total_Clock ←このキー名は下の計算アイテムで使用します
式:last("vmware.hv.hw.cpu.freq[{$URL},{HOST.HOST}]")*last("vmware.hv.hw.cpu.num[{$URL},{HOST.HOST}]")
データ型:数値(浮動小数)
単位:Hz

・CPU使用率(%)を求める計算アイテム
テンプレート:Template Virt VMware Hypervisor
アイテムを新規作成
[アイテム作成画面]
名前:CPU Utilization
タイプ:計算
キー:CPU_Utilization
式:100*(last("vmware.hv.cpu.usage[{$URL},{HOST.HOST}]")/last("CPU_Total_Clock"))
データ型:数値(浮動小数)
単位:Hz

各アイテムの名前やキー名は任意ですので、お好きなものに変更してください。
当方の環境はZabbix 2.2 Applianceですが、これで取得できています。

同じように仮想マシンの方も計算アイテムを作成することで実現できると思います。

ユーザー yoiyoi の写真

HERCULYさん
もう問題は解決していますでしょうか?

私も同じ問題に直面し、難儀しております。
もし解決しておりましたら、ご教示いただきたくよろしくお願いします。

あと、
私なりに調べて行っている暫定措置を記載しておきます。
ESXi機器が単体でクラスタ構成でない場合や、
クラスタ構成であっても各ESXi機器が同一スペックであった場合、
ある程度有効な手段ではないかと考えております。

---
まず、vmware.hv.hw.cpu.freq[,]で使用するの値は、
ハイパーバイザーのBIOS UUIDです。
ところが、vmware.vm.hv.name[,]返す値は
ハイパーバイザーのBIOS UUIDではなくハイパーバイザーの名前になります。
このために、
vmware.hv.hw.cpu.freq[{$URL},"vmware.vm.hv.name[{$URL},{HOST.HOST}]"]
で検証すると、「unknown hypereviser uuid」となってしまいます。

そこで、私はESXハイパーバイザーの監視にて、
vmware.hv.hw.uuid[,] の返す
ハイパーバイザーのBIOS UUIDを控えておき、
仮想マシンの監視で
vmware.hv.hw.cpu.freq[{$URL},XXXX-XXXX-XXXX-XXXX]
といった具合にダイレクトにハイパーバイザーのBIOS UUIDを記載することで
暫定措置としました。

---
余談ですが、
ハイパーバイザーのBIOS UUIDは、
ESXiホストがディスカバリ機能で自動的に見つけられたものですと、
Zabbixのホストの設定で表示される「ホスト名」と一致するようです。
また、「表示名」がvmware.vm.hv.name[,]で返す値と一致するようです。