コンテンツ
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 Queries用)

スクリプトの作成(Data Input Method用) Data Queries用設定XMLの作成

Data Input Methodでデータを取得する方法は基本なんですが、ディスクドライブやネットワークインターフェースなど一つのサーバーに複数あるような項目について、一つ一つスクリプトやテンプレートを作成していくのはサーバーごとに数が違ったりするので大変です。

CactiにはData Queryという手法があって、このような場合に簡単にグラフを作成できる仕組みを備えています。

Data Query用のスクリプトを作成します。
以下ではディスクドライブの情報を取得するスクリプトdisk_index.vbsを作成します。
作成したスクリプトはC:\cacti\scripts\WMIに保存します。

スクリプトの仕様


Data Queryに使用するスクリプトは以下の仕様が必要です。

index (項目数)

項目数を取得するためのコマンドindexを与えられたときに、1行ずつ項目番号を返します。
shell> cscript //b disk_index.vbs localhost "" "" index
0
1

shell>

query (項目一覧)

項目一覧を取得するためのコマンドqueryを与えられたときに項目番号とその項目の値を区切り文字(ここでは!)をはさんで返します。
ここではディスクドライブ名Captionの値を取得しています。
shell> cscript //b disk_index.vbs localhost "" "" query Caption
0!C:
1!R:

shell>

ドライブタイプDriveTypeでは以下のようになるようにしました。
shell> cscript //b disk_index.vbs localhost "" "" query DriveType
0!LocalDisk
1!RemovableDisk

shell>

get (個別項目値の取得)

個別の項目の値を取得するためのコマンドgetを与えられたときに値のみを返します。getのときのみ最後に改行をつけてはいけません。

shell> cscript //b disk_index.vbs localhost "" "" get Caption 0
C:
shell>

ソース

'
' Win32_LogicalDisk
'
' Usage: disk_index.vbs hostname user passwd index
' query method
' get method index

'変数の設定
strComputer = "localhost" 'ログインするホスト
strUser = "administrator" 'ログインアカウント
strPassword = "admin" 'ログインパスワード
command="" '取得コマンド
field="" '取得オブジェクト
index=0 'インデックス
selected = -1 '取得したいオブジェクトのインデックス
Dim array(2) '状態情報保持用

'引数の解析
Set args = Wscript.Arguments
strComputer = args(0)
strUser = args(1)
strPassword = args(2)
If args.length > 0 Then
command = args(3)
If args(3) = "query" Then
field = args(4)
End If
If args(3) = "get" Then
field = args(4)
selected = args(5)
End If
End If

'WMIオブジェクトの作成
If strComputer = "localhost" Then
'localhost
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Else
'remote host
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objSWbemLocator.ConnectServer(strComputer, "root\CIMV2", strUser, strPassword)
End If

'クエリ
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk",,48)

'状態表示
For Each objItem in colItems
array(0) = FormatNumber(index, 0, -1, 0, 0)
Select Case field
Case "Caption" array(1) = objItem.Caption
Case "Used" array(1) = (objItem.Size - objItem.FreeSpace)
Case "Total" array(1) = objItem.Size
Case "MediaType"
Select Case objItem.MediaType
Case "0" array(1) = "Unknown"
Case "11" array(1) = "RemovableMedia"
Case "12" array(1) = "FixedHardDisk"
Case Else array(1) = "FloppyDisk"
End Select
Case "DriveType"
Select Case objItem.DriveType
Case "1" array(1) = "NoRootDirectory"
Case "2" array(1) = "RemovableDisk"
Case "3" array(1) = "LocalDisk"
Case "4" array(1) = "NetworkDrive"
Case "5" array(1) = "CompactDisk"
Case "6" array(1) = "RAMDisk"
Case Else array(1) = "Unknown"
End Select
Case Else array(1) = ""
End Select

Select Case command
Case "index" Wscript.StdOut.Writeline array(0) & " "
Case "query" Wscript.StdOut.Writeline array(0) & "!" & array(1) & " "
Case "get" If selected = array(0) Then Wscript.StdOut.Write array(1) & " " End If
End Select
index = index + 1
Next

disk_index.vbs()

BATファイルでラップ

後述する「Data Queries用設定XMLの作成」で説明していますが、設定XMLにスクリプトのパスが実行時に一部の文字が置き換えられてしまいこのままでは正しく動作しません。BATファイル経由で実行することで回避します。

disk_index.bat
@c:\windows\system32\cscript.exe //b C:\cacti\scripts\WMI\disk_index.vbs %1 %2 %3 %4 %5 %6



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

スクリプトの作成(Data Input Method用) Data Queries用設定XMLの作成
2007年12月06日(木) 11:51:14 Modified by slt33333

添付ファイル一覧(全1件)
b861839df1c6d2ef.pdf (32.84KB)
Uploaded by slt33333 2007年11月29日(木) 14:32:52



スマートフォン版で見る