ZabbixでVMwareの監視登録(パフォーマンス値取得)を手動でやってみる


Advent Calendar初参加になります!宜しくお願いします。
私がZabbixを使い始めたきっかけは Zabbixは監視対象に縛られない監視システムが作れる1 という点でした。
昨今のインフラ機器はWeb API(SOAPやREST)が標準提供されているものが多くなってきており昔のように専用ツールじゃないと監視が出来ないというところは緩和されてきている感じがします。
サーバやネットワーク・ストレージ機器や仮想レイヤー(ハイパーバイザーやVM)などをまとめてZabbixで管理・監視ができる時代はとても便利になったと思っています。
最近、Zabbixを使ってVMware監視をやっているので、今回はZabbixの標準機能で対応可能なVMware監視について書いてみようと思います。

前提として

環境説明

今回、試した環境は以下のものになります。

項目 バージョン
Zabbix 3.0.13-2
OS CentOS 7.4
vCenter 6.5
ESXi 6.5

所々でpythonを使ったスクリプトを使った解説もしていこうと思います。

ZabbixでVMwareを監視

Zabbixで可能な監視項目

Zabbixで出来るVMware監視項目は以下のページを参照ください。

クラスタやデータストアなどのディスカバリやVM・ハイパーバイザーのリソース監視(CPU、メモリなど)ができます。
ちなみに vmware.hv.perfcountervmware.vm.perfcounter キーを使うことで、VMwareが管理しているパフォーマンス値をほぼ取得することが可能です。やり方については後述します。

ZabbixでVMwareを監視するには

Zabbixでは、VMwareのAPI(SOAP)を使って監視をします。
監視を始めるには以下の設定が必要です。

パラメーター 説明
StartVMwareCollectors VMwareの監視プロセス数(1以上にする)
VMwareCacheSize APIで取得した値をキャッシュする共有メモリサイズ
VMwareFrequency APIでステータス情報などを取得する間隔(クラスタのステータスなど)
VMwarePerfFrequency APIでパフォーマンスカウンターから値を取得する間隔(CPU使用率など)
VMwareTimeout vCenterやESXiハイパーバイザーからの応答を待つ秒数

一先ず動かすだけであれば StartVMwareCollectors を1以上にしてみてください :-)

[root@localhost ~]# vi /etc/zabbix/zabbix_server.conf
(snip)
### Option: StartVMwareCollectors
#       Number of pre-forked vmware collector instances.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartVMwareCollectors=0
StartVMwareCollectors=1
(snip)
[root@localhost ~]# systemctl start zabbix-server

Zabbixに監視登録をする

仮想マシンの監視登録

Zabbixに仮想マシンのCPU使用率の監視登録をやってみたいと思います。
Zabbixではインストール時に標準でVMware監視テンプレートが入っていますが、今回はそれを使わず手作業で登録してみたいと思います。
手動で登録することで、ZabbixがVMwareの何の情報を元に取得しているか?など理解ができると思います。
Zabbixで仮想マシンの監視を登録するには以下の項目が必要です。

  • vCenter/ESXiのアドレス(https://ip or FQDN/sdk)
  • vCenter/ESXiのログインアカウント
  • vCenter/ESXiのログインアカウントのパスワード
  • 仮想マシンのinstanceUuid

Zabbixでは 仮想マシンのinstanceUuid を元にしてVMware環境から監視対象を選別しています。
※Zabbixのディカバリ機能を使えばこんなややこしい事しなくても自動で取得してくれます。
instanceUuidを確認する方法としては2つあります。

  • Managed Object Browserから確認する
    • https://IP or FQDN/mob でアクセスする事ができます。詳細に知りたい方はは Managed Object Browser を確認ください。
  • スクリプトでAPI経由から取得する

今回は後者のスクリプト経由で確認してみたいと思います。
確認するのに以下のツール(Managed Objectのプロパティや値、メソッドなど確認できる)を使ってみます。

mob-property-view

[root@localhost ~]# git clone https://github.com/sky-joker/mob-property-view.git
[root@localhost ~]# cd mob-property-view/
[root@localhost mob-property-view]# pip3 install -r requirements.txt
[root@localhost mob-property-view]# chmod +x mob-property-view.py

早速instanceUuidを取得してみたいと思います。
ここでは devel という仮想マシン名がついたものから取得してみます。

[root@localhost mob-property-view]# ./mob-property-view.py -vc vcenter01.local --mob VirtualMachine -t devel --property config | grep instanceUuid
Password:
   instanceUuid = '50376abf-fc92-ed1c-0923-1ce796c1d0e0',

ホストを追加してみます。

項目 説明
ホスト名 instanceUuidを入力します
表示名 ホスト名など人間が分かりやすい名前を入れます

グループIPアドレス などを設定して 追加 をクリックします。

次に マクロ を登録します。
マクロにはvCenter/ESXiのアドレスやアカウント情報を入力します。

項目 説明
{$URL} vCenter/ESXiのAPIアドレスである https://IP or FQDN/sdk を入力します
{$USERNAME} vCenter/ESXiへのログインアカウント名を入力します
{$PASSWORD} vCenter/ESXiへのログインアカウントのパスワードを入力します

入力後 更新 します。

次に アイテム を作成してみます。
アプリケーション はここでは省きます。

アイテムは以下のように登録してみました。

項目 説明
名前 アイテム名
タイプ シンプルチェック
キー 仮想マシンのCPU使用量(Hz)を取得するキーを指定
ユーザー名 マクロで登録したユーザー
パスワード マクロで登録したパスワード
データの値 10進数
単位 hz
更新間隔 データ取得間隔、VMwarePerfFrequencyを下回る値を設定しない

最新データ で値が取得できれ入れば大丈夫です。

ハイパーバイザーの監視登録

基本、手順は同じです。
ただ、登録するuuidとキーが違います。

ハイパーバイザー(ここでは、esxi-03.local)はinstanceUuidではなく以下のuuidを使用します。

[root@localhost mob-property-view]# ./mob-property-view.py -vc vcenter01.local --mob HostSystem -t esxi-03.local --property hardware | grep uuid
Password:
      uuid = '32393735-3733-504a-5430-343634394a43',

キーも vmware.hv.cpu.usage[{$URL},{HOST.HOST}] を使います。

perfcounterキーを使ってみる

標準で用意されているアイテムキーだけでは物足りなさがあります。
例えば取得できるCPU情報は プロセッサ数 プロセッサ有効時間 プロセッサ利用量 しかありません。
プロセッサ使用率 を監視したい!という人もいると思います。(私は監視したい!)
Zabbixでは、好きなパフォーマンスカウンターを監視できるよう以下のキーが用意されています。

  • vmware.hv.perfcounter[,,,]
  • vmware.vm.perfcounter[,,,]

このキーで取得したいVMwareが管理しているパフォーマンスデータを指定することで値を取得することが可能です。
VMwareを触った事ある人であれば見覚えのあるこの画面で表示されるカウンターが対象です。

perfcounterキーの引数は以下のものを指定します。

パラメーター 説明
url vCenter/ESXiのURL
uuid 監視対象のuuid(VM: instanceUuid/ESXi: uuid)
path pathは group/counter[rollup] という形で指定します
instance ターゲットオブジェクトです(省略可)

path について説明します。

パラメーター 説明
group チャートメトリックを指定します
counter カウンター名を指定します
rollup ロールアップ名を指定します

例えば、上図のチェックが入ってる部分を監視しようとすると以下のようになります。

groupcpucounter(内部名)usagerollup(ロールアップ)平均値

そのためpathは cpu/usage[average] になります。
キーを設定する場合以下のようになります。

vmware.vm.perfcounter[{$URL},{HOST.HOST},"cpu/usage[average]",]

設定は以下のようにします。

path に設定する情報を一覧で取得するツールを作って観ました。
以下のツールを使う事でVMwareのパフォーマンスカウンター一覧をJSON形式で表示することができます。

vmware-get-perfcounter-info

使用方法は以下のようにします。

$ ./vmware-get-perfcounter-info.py -vc vcenter01.local
Password:
{
  "CPU": [
    {
      "group": "cpu",
      "rollup": "none",
      "counter": "usage",
      "unit": "%"
    },
    {
      "group": "cpu",
      "rollup": "average",
      "counter": "usage",
      "unit": "%"
    },
(snip)

vCenter6.5のパフォーマンスカウンター一覧を参考として以下に保存しました。

vcenterPerfCounter.json

注意点としては、ツールで取得した一覧が全て取得できるわけではありません。
あくまでも、vCenterやESXiのチャートで表示される項目が取得できます。
ツールはそれ以外のもの取得するため情報量が多いです。

まとめ

仮想マシンは instanceUuid ESXiは uuid を確認すれば手動でVMwareの監視登録が可能です。
ディスカバリ機能を使えば自動で取得してくれますが、自動登録だと一部変更できない設定内容などあるので監視登録情報を全てコントロールしたい場合は手動登録で対応できます。
また perfcounterキー を使う事で監視の幅が広がるので色々なパフォーマンスデータを監視してみるのは如何でしょうか :-)


  1. 自由度が高いので作り込みすぎるとZabbixおじさんが必要になってしまいますが...