cactiEZでWindowsOSのWMI値を直接取得してグラフを作成する手順


cactiEZ 0.7から直接WMIを参照する事は出来ないのですが、Atomicorpのwmicを利用する事でcactiEZでもWindows側にSNMP Informant等を利用する事無くWindowsのWMIに直接アクセスして値を取得する事が出来ます。
もちろんRHEL系で構築したcactiにもこれは適用可能です。

Linux OS上からWMIを取得する場合の詳しい操作手順が無かったので作成しましたが、基本的なcactiEZからWMIを取得する手順は以下のサイトの手順に従い進めています。

Monitor Windows via WMI from Cacti on Linux
http://forums.cacti.net/about30438.html

WMICのインストール

WMIをLinuxから利用出来るように以下のrpmをインストールします。
インストールは直接インストールしても良いですが、今回はリポジトリを追加してyumでインストールしています。

wmi-1.3.14-2.el6.art.x86_64.rpm

atomic yumリポジトリを以下のコマンドで追加します。

# wget -q -O - http://www.atomicorp.com/installers/atomic | sh

WMIをインストールします。

# yum install wmi


インストール完了後、以下のコマンドを実行してアプリケーションが実行出来ることを確認します。

# wmic

利用環境にWindowsマシンがある場合は、以下のコマンドを実行して、結果が返ってくるか確認してみてください。

# wmic -U [domain/]<管理者アカウントID>%<パスワード> //<コンピュータ名またはIPアドレス> "select * from Win32_ComputerSystem"

例えば管理者アカウントIDがadministrator、パスワードがhogehoge、コンピュータ名がPCの場合は以下のようになります。

# wmic -U administrator%hogehoge //PC "select * from Win32_ComputerSystem"

memo
コンピュータ名を正しくDNSサーバに追加していない場合はコンピュータの名前解決は出来ません。
自宅でのアクセスの場合はコンピュータ名の値はIPアドレスを利用してください。

Atomic Archive : RPMS
http://www6.atomicorp.com/channels/atomic/centos/6/x86_64/RPMS/

WMIを利用した値の取得方法について

WMIを利用して独自の値を取得したい場合は、以下の記事を参考にWindowsOSからWMIクエリを確認してください。
Windows Server 2012でも動作してWMI経由で取得出来る値の確認が可能です。

WMI Code Creatorを使ってスクリプトを作成する
https://pnpk.net/archives/1855

CactiWMIのインストール

以下のサイトからwmi.phpとテンプレートをダウンロードします。
※フォーラムに添付されているバージョンよりも新しいバージョンです。
cactiEZ 0.7で利用する場合はこちらのテンプレートを利用しないとそのままでは上手く動作しません。
http://svn.parkingdenied.com/CactiWMI/trunk/

テンプレートは[cacti_host_template_wmi_-_all.xml]をダウンロードすれば全てのテンプレートが一度に適用出来ます。
http://svn.parkingdenied.com/CactiWMI/trunk/templates/

ダウンロードしたファイルを適当な場所に展開して、以下の変更を実行します。
※Windows PCでファイルをダウンロードした場合はWinCSP等を利用してcactiEZの所定のディレクトリにコピーしてください。
※今回の場合は以下のディレクトリにファイルをコピーしています。

ファイルwmi.phpの修正

15行目 wmicのインストールパスの変更

$wmiexe = '/usr/local/bin/wmic'; // executable for the wmic command
↓
$wmiexe = '/bin/wmic'; // executable for the wmic command

コピーしたファイルが保存されているディレクトリに移動し、以下のコマンドでscriptsフォルダにwmi.phpをコピーします。

# cp wmi.php /var/www/html/scripts

以下のコマンドを実行し、cactiEZ上に以下のディレクトリを作成します。

# mkdir -p /etc/cacti
# mkdir -p /var/log/cacti/wmi

※cactiEZのデフォルト設定の場合以下の設定は不要ですが、cronをcactiで動作させる場合には以下の設定も必要になります。

# chown cacti:cacti /etc/cacti -R
# chown cacti:cacti /var/log/cacti/wmi -R

/etc/cacti/にcactiwmi.pwというファイルを作成し、以下のフォーマットでWMI経由でアクセスする際のIDとパスワードを入力します。
このアカウントは通常Windows OSの管理者権限を所有している必要があります。

# vi /etc/cacti/cactiwmi.pw
username=<your username>
password=<your password>
domain=<your domain>

例えばログイン名administrator、パスワードがhogehogeだった場合は、以下のように入力します。
※Active Directoryに参加している場合はdomainに所属ドメインを入力する必要があります。(ドメインに所属していない場合は空欄でも動作します)

username=administrator
password=hogehoge
domain=

以下のディレクトリのパーミッションを変更します。

# chmod 700 /etc/cacti -R
# chmod 700 /var/log/cacti/wmi -R

動作確認

wmicを利用して上記のcactiwmi.pwが正しく動作しているかどうかは以下のコマンドで確認出来ます。

# /bin/wmic --namespace='root\CIMV2' --authentication-file=/etc/cacti/cactiwmi.pw //<対象端末名 or IPアドレス> "SELECT Size,FreeSpace FROM Win32_LogicalDisk WHERE DeviceID='対象ドライブ名(例 C:)'"

例えば自分の環境では、以下のような戻り値が取得出来ました。

CLASS: Win32_LogicalDisk
DeviceID|FreeSpace|Size
C:|36511567872|52322889728

上記が上手く動作したら、以下のコマンドでwmi.php経由でwmicが正しく動作するか確認してみます。

# /usr/bin/php /var/www/html/scripts/wmi.php -h '<対象端末名 or IPアドレス>' -u '/etc/cacti/cactiwmi.pw' -w 'Win32_LogicalDisk' -k 'Name' -v '対象ドライブ名(例 C:)' -c 'Size,FreeSpace' -d1

例えば自分の環境では、以下のような戻り値が取得出来ました。

Exec Status: 0

DeviceID:C
FreeSpace:36509941760
Size:52322889728

参考

wmi.phpのversion 0.0.7-SVN Usageは以下のようになっています。

wmi.php version 0.0.7-SVN

Usage:
       -h <hostname>         Hostname of the server to query.
       -u <credential path>  Path to the credential file. See format below.
       -n <namespace>        What namespace to use. (optional, defaults to root\CIMV2)
       -w <wmi class>        WMI Class to be used.
       -c <columns>          What columns to select. (optional, defaults to *)
       -k <filter key>       What key to filter on. (optional, default is no filter)
       -v <filter value>     What value for the key. (required, only when using filter key)
       -d <debug level>      Debug level. (optional, default is none, levels are 1 & 2)

                             All special characters and spaces must be escaped or enclosed in single quotes!

Example: wmi.php -h 10.0.0.1 -u /etc/wmi.pw -w Win32_ComputerSystem -c PrimaryOwnerName,NumberOfProcessors -n 'root\CIMV2'

Password file format: Plain text file with the following 3 lines replaced with your details.

                      username=<your username>
                      password=<your password>
                      domain=<your domain> (can be WORKGROUP if not using a domain)

テンプレートのインストール

WEBブラウザ上からの操作になります。


[Configuration] – [Import Templates]から[cacti_host_template_wmi_-_all.xml]を読み込みます。

ここまでで事前準備は完了です。

監視対象デバイスの追加


[Console] – [Management] – [Devices] – [Add]を開きます。

Description、Hostname等必要項目を入力した後、Saveをクリックしてください。
SNMP VersionはWMI監視のみ実行する場合には基本的にNot In Useで問題ありません。


Save後、同画面上部の[Create Graphs for this Host]を選択し、グラフ化したいデータを選択してCreateを選択してください。


作成時にテンプレートによって設定しなければならない値があります。
Credentialは認証情報なのでデフォルト設定のままで変更しないでください。
Disk I/OやDisk Space等はFilter Valueとしてドライブ名を入力してください。
例えばCドライブを対象にする場合はC:と入力します。

Graph Treesへの追加


上記で作成したグラフをCactiで表示させるためにはTreeにデバイスもしくはグラフを追加する必要があります。
[Console] – [Graph Trees] – [Default Tree] – [Add]を選択し、[Tree Item Type]に[Host]を選択後、先ほど作成したデバイスをTree Item Valueで指定します。


[Graphs]タブを選択して、上記で追加したHostが選択出来るようになっているのを確認します。
しばらく経ってから、選択したデバイスのグラフが値と共に画面に出力されることを確認します。
※グラフは即時作成されても値がグラフに反映されるまではしばらく時間がかかります

おまけ

Network使用率のグラフ


今回のテンプレートにはNetwork使用率が同梱されていません。
cactiフォーラムにNetwork利用率の取得テンプレートもあるのですが、WMIの取得とcacti設定テンプレートの設定文字列に誤りがあるのでそのままでは動作しません。

修正ポイントを書くだけにしようかと思ったのですが、かなり修正ポイントがあるので、手を加えたテンプレートをこちらに貼り付けておくので、必要であればダウンロードして使ってください。

[ダウンロードが見つかりません]

ファイルをダウンロードして任意の場所に解凍してcactiのテンプレートとして読み込んでください。
登録時にFilter Valueの値を任意のインターフェイス名に変更する必要があります。
インターフェイス名の取得はwmicからも可能なのですが、文字列の中に半角スペースが含まれる場合、wmicでの戻り値がアンダーバーになってしまっているようで、正しい名前が取得出来ません。
また、インターフェイス名が日本語の場合、上手く取得出来ません。

インターフェイス名は添付ファイル中の[show_Win32_PerfFormattedData_Tcpip_NetworkInterface.vbs]を利用して値を確認してください。
※コマンドプロンプトで実行するプログラムです。

cscript show_Win32_PerfFormattedData_Tcpip_NetworkInterface.vbs <対象デバイス名>

1 COMMENT

まーくん

こちらのページ、大変参考になりました。
参考にして、Avg. Disk Queue Lengthのテンプレートを作ろうとしたのですが、
上手く取得できなかったので、見本があれば大変助かります。
もし出来たらよろしくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です