SNMP GetNext の使用

メモ この例は説明のために示されているに過ぎず、実際にはサポートされていません。Ipswitch は、Context オブジェクト、SNMP API、およびスクリプティング環境については、テクニカルサポートを提供しますが、JScript、VBScript、およびアクティブスクリプトのモニタとアクションの開発とデバッグについては、サポートを提供しません。この例および自社独自のスクリプトを作成することに関する援助については、WhatsUp Gold ユーザーコミュニティにアクセスしてください。

このパフォーマンスモニタはストレージテーブル内でハードディスクを見つけるために hrStorageType MIB を検索します。ハードディスクが見つかった後、そのインデックスを取得して新しいオブジェクトをポーリングします (ストレージサイズと個数)。

// このスクリプトはハードディスクを見つけるためにストレージテーブルで hrStorageType を検索します。
// ハードディスクの hrStorageType は "1.3.6.1.2.1.25.2.1.4" (hrStorageFixedDisk) です。
// その後、そのテーブル内のハードディスクのインデックスを取得します。ポーリングの対象となるのは、
// そのテーブル内の 2 つの新しいオブジェクト、ストレージサイズとそのエントリの個数です。
// すべてを加算してギガバイトに変換。
var hrStorageType = "1.3.6.1.2.1.25.2.3.1.2";

// snmp オブジェクトの作成と初期化
var oSnmpRqst = new ActiveXObject("CoreAsp.SnmpRqst");
var nDeviceID = Context.GetProperty("DeviceID");
var oResult = oSnmpRqst.Initialize(nDeviceID);

var arrIndexes = new Array(); // 見つかったディスクのインデックスを入れた配列
// テーブルの列を検索
var oSnmpResponse = oSnmpRqst.GetNext(hrStorageType);
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
var sOid = String(oSnmpResponse.GetOid);
var sPayload = String(oSnmpResponse.GetPayload);

while (!oSnmpResponse.Failed && sOid < (hrStorageType + ".99999999999"))
{
if (sPayload == "1.3.6.1.2.1.25.2.1.4") {
// このストレージエントリはディスクなのでインデックスをテーブルに追加します。
// インデックスは OID の最後の要素です。
var arrOid = sOid.split(".");
arrIndexes.push(arrOid[arrOid.length - 1]);
}

oSnmpResponse = oSnmpRqst.GetNext(sOid);
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
sOid = String(oSnmpResponse.GetOid);
sPayload = String(oSnmpResponse.GetPayload);
}
Context.LogMessage("Found disk indexes:" + arrIndexes.toString());
if (arrIndexes.length == 0) Context.SetResult(1, "No disk found");

// ディスクのインデックスが取得されたので、使用率と個数をポーリングします。
var nTotalDiskSize = 0;
for (var i = 0; i < arrIndexes.length; i++) {

oSnmpResponse = oSnmpRqst.Get("1.3.6.1.2.1.25.2.3.1.5."+ arrIndexes[i])
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
nSize = oSnmpResponse.GetPayload;
oSnmpResponse = oSnmpRqst.Get("1.3.6.1.2.1.25.2.3.1.4."+ arrIndexes[i])
if (oSnmpResponse.Failed) Context.SetResult(1, oSnmpResponse.GetPayload);
nUnits = oSnmpResponse.GetPayload;

nTotalDiskSize += (nSize * nUnits);
}
// サイズの合計をギガバイト単位で返す。
Context.SetValue(nTotalDiskSize / 1024 / 1024 / 1024); // 出力はギガバイト単位

参照

アクティブスクリプトのパフォーマンスモニタの例

プリンタインク使用率グラフの作成

参照変数をポーリングして計算を実行する

温度モニタのグラフ化

複数の参照変数のポーリング