コンテンツ
Cactiはネットワークやサーバーの状態をグラフ化するソフトウェアです。このソフトをWindowsで動かします。
S.M.A.R.T.とは、Self-Monitoring, Analysis and Reporting Technologyのことです。HDDの故障予測に役立つSMARTをWMIで取得します。
フリーエリア
アクセス数
Wiki内検索
最近更新したページ
最新コメント
FrontPage by ≪潟若
FrontPage by ≪潟若 2014
FrontPage by ASDWE
WindowsでCacti by 井上 馨

スクリプトの作成(Data Input Method用)

Cacti起動後の初期設定 テンプレートの作成

データを取得するスクリプトを作成します。
(このスクリプトは後で説明するData Input Method用です)

Cactiが受け取れるデータ形式は、データが一つの場合は、
10
とします。行末に改行を入れてはいけません。
複数のデータの場合は、
load:50 diskused:33
のように"項目名1:値1 項目名2:値2 ..."のように項目名と値を:でつなぎ、それらをスペースで区切っていく形とします。行末に改行を入れてはいけません。また経験上、先頭にスペースが入っていてもうまく読み取れないようです(のちに説明するpoller.phpではOKだったりするが、spineだとNGだったりするので、たぶんだめだと思います)。

スクリプトは上記の出力ができればBATでもPerlでもexeでもなんでもよいのですが、以下ではWindows標準で使えるVBSで作成してみます。

まずは手始めにlocalhostのCPU使用率(LoadPercentage)を取得してみます。
Win32_Processorオブジェクトの各メソッドを取得します。
processor.vbs()として以下の内容を記述します。

1: '変数の設定
2: strComputer = "localhost" 'ログインするホスト
3: load = 0 'LoadPercentage
4:
5: 'WMIオブジェクトの作成
6: 'localhost
7: Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
8:
9: 'クエリ
10: Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor",,48)
11:
12: '状態表示
13: For Each objItem in colItems
14: load = load + objItem.LoadPercentage
15: Next
16: Wscript.StdOut.Write load

7行目でWMIのオブジェクトを作成しています。
10行目でWMIのクエリをサーバーに対して行っています。
13?15行目でLoadPercentageを計算しています。
ループになっていますが、この理由は値をサーバー全体で返すのではなくCPUごとに値を持っているために全体の値を出すために足し合わせています。
最近のマルチコアのCPUの場合は注意が必要です。

動作テストをします。
コマンドプロンプトで作業します。
cscriptはスクリプト・ベースと呼ばれているもので、XPですとc:\windows\system32\cscript.exeです。
VBSには、コンソールベースのcscript.exeとGUIベースのwscript.exeがあるようです。
後でcactiで動作するときはGUIベースでは具合がよくないので、cscriptを使用します。

shell> cscript //b processor.vbs
4
shell>

個別のCPUの値を出したいときは次のように変更します。
processor1-2.vbs()

1: '変数の設定
2: strComputer = "localhost" 'ログインするホスト
3: index = 0
4:
5: 'WMIオブジェクトの作成
6: 'localhost
7: Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
8:
9: 'クエリ
10: Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor",,48)
11:
12: '状態表示
13: For Each objItem in colItems
14: Wscript.StdOut.Write "cpu" & index & ":" & objItem.LoadPercentage & " "
15: index = index + 1
16: Next

が変更部分です。
複数の値を出すときは項目名が必要です。

動作テストをします。
コマンドプロンプトで作業します。
shell> cscript //b processor2.vbs
cpu0:2 cpu1:4
shell>

リモートのサーバーの場合、WMIオブジェクトの生成部分が異なります。
また、リモートサーバー上にある管理者アカウントとパスワードを使って情報を取得する必要があります。
ついでにホスト名などを引数で渡せるようにします。
processor1-3.vbs()

1: '変数の設定
2: strComputer = "" 'ログインするホスト
3: strUser = "" 'ログインアカウント
4: strPassword="" 'ログインパスワード
5: index = 0
6:
7: '引数の解析
8: Set args = Wscript.Arguments
9: strComputer = args(0)
10: strUser = args(1)
11: strPassword = args(2)
12:
13: 'WMIオブジェクトの作成
14: 'remote host
15: Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
16: Set objWMIService = objSWbemLocator.ConnectServer(strComputer, "root\CIMV2", strUser, strPassword)
17:
18: 'クエリ
19: Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Processor",,48)
20:
21: '状態取得
22: For Each objItem in colItems
23: '状態表示
24: Wscript.StdOut.Write "cpu" & index & ":" & objItem.LoadPercentage & " "
25: index = index + 1
26: Next


動作テストをします。
コマンドプロンプトで作業します。

ローカルサーバーへのアクセスはユーザーアカウント、パスワードを入力すると
SWbemLocator: ユーザー資格情報はローカル接続には使用できません
とはねられてしまうので、アカウント、パスワードに空文字列""を指定します。
shell> cscript //b processor1-3.vbs localhost "" ""
cpu0:2 cpu1:4
shell>

これをc:\cacti\scripts\WMIフォルダに格納します。
(WMIフォルダは新規に作成します)



表記上の問題で画面上のテキストをそのままコピー&ペーストしづらいと思いますので、ファイルを用意しました。
ただし、使用しているシステムの都合上、画像かPDFしかアップロードできないため、プログラムをPDFファイルでおいてあります。
PDFのテキスト部分をテキストエディタなどにコピーしてからお使いください。

Cacti起動後の初期設定 テンプレートの作成
2007年11月27日(火) 07:10:16 Modified by slt33333




スマートフォン版で見る