SNMP続き

ラムディスクの容量

  • こちらは意外と簡単に解決した。ドライブレターがz:\である点が問題なので、a:\にしてしまえばいいだけでした。これに伴い、c:\以下のOIDが一個ずつずれちゃいましたが、設定を一律にずらすだけなので問題なし。
  • .iso.org.dod.internet.mgmt.mib-2.host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageSize
    • .1.3.6.1.2.1.25.2.3.1.6.1
  • .iso.org.dod.internet.mgmt.mib-2.host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed
    • .1.3.6.1.2.1.25.2.3.1.5.1

メモリ使用量

% snmpwalk -v 2c -c PASSWORD IPADDRESS .1.3.6.1.2.1.25.2.3.1.3 
HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: A:\ Label:RamDisk  Serial Number 
HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: C:\ Label:  Serial Number 
HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: D:\ Label:  Serial Number 
HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: E:\ Label:  Serial Number 
HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: F:\ Label:  Serial Number 
HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: G:\ Label:  Serial Number 
HOST-RESOURCES-MIB::hrStorageDescr.7 = STRING: H:\ Label:  Serial Number 
HOST-RESOURCES-MIB::hrStorageDescr.8 = STRING: I:\
HOST-RESOURCES-MIB::hrStorageDescr.9 = STRING: J:\
HOST-RESOURCES-MIB::hrStorageDescr.10 = STRING: L:\
HOST-RESOURCES-MIB::hrStorageDescr.11 = STRING: M:\
HOST-RESOURCES-MIB::hrStorageDescr.12 = STRING: N:\
HOST-RESOURCES-MIB::hrStorageDescr.13 = STRING: O:\
HOST-RESOURCES-MIB::hrStorageDescr.14 = STRING: Virtual Memory
HOST-RESOURCES-MIB::hrStorageDescr.15 = STRING: Physical Memory
% snmpwalk -v 2c -c PASSWORD IPADDRESS .1.3.6.1.2.1.25.2.3.1.5 
HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 261887
HOST-RESOURCES-MIB::hrStorageSize.2 = INTEGER: 7679062
HOST-RESOURCES-MIB::hrStorageSize.3 = INTEGER: 236510938
HOST-RESOURCES-MIB::hrStorageSize.4 = INTEGER: 244190000
HOST-RESOURCES-MIB::hrStorageSize.5 = INTEGER: 244190000
HOST-RESOURCES-MIB::hrStorageSize.6 = INTEGER: 122096000
HOST-RESOURCES-MIB::hrStorageSize.7 = INTEGER: 61049000
HOST-RESOURCES-MIB::hrStorageSize.8 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageSize.9 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageSize.10 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageSize.11 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageSize.12 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageSize.13 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageSize.14 = INTEGER: 46566
HOST-RESOURCES-MIB::hrStorageSize.15 = INTEGER: 49137
% snmpwalk -v 2c -c PASSWORD IPADDRESS .1.3.6.1.2.1.25.2.3.1.6
HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 576
HOST-RESOURCES-MIB::hrStorageUsed.2 = INTEGER: 3369671
HOST-RESOURCES-MIB::hrStorageUsed.3 = INTEGER: 63427834
HOST-RESOURCES-MIB::hrStorageUsed.4 = INTEGER: 55692534
HOST-RESOURCES-MIB::hrStorageUsed.5 = INTEGER: 85055997
HOST-RESOURCES-MIB::hrStorageUsed.6 = INTEGER: 117271240
HOST-RESOURCES-MIB::hrStorageUsed.7 = INTEGER: 55616613
HOST-RESOURCES-MIB::hrStorageUsed.8 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.9 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.10 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.11 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.12 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.13 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageUsed.14 = INTEGER: 9447
HOST-RESOURCES-MIB::hrStorageUsed.15 = INTEGER: 11652
  • しかし、問題はVirtual MemoryとPhysical Memoryの項目が最初じゃなくて、最後に並んでいる点。一連のドライブレターにはUSBメディアなども含むので、必ず14番目と15番目に目的の値が返ってくる保障はありません。よって、MRTG単体でなんとかするのは諦めるしかない。
  • 代わりに、MRTGからスクリプトを実行して、snmpwalkして取得したデータを整形して、必要な二つのデータ系列だけを出力するようなスクリプトを作って上げればいいんですよね。perlだとこんな感じだろうか。Virtual用とPhisical用に二つのスクリプトを用意する必要有りますかね。まあ、Virtualはいらないんだけど。
use strict;
use warnings;

snmpwalk -v 2c -c PASSWORD IPADDRESS .1.3.6.1.2.1.25.2.3.1.5を実行して、出力を配列1に収納する;
snmpwalk -v 2c -c PASSWORD IPADDRESS .1.3.6.1.2.1.25.2.3.1.6を実行して、出力を配列2に収納する;

配列1の最後を正規表現でマッチさせ、数値だけ取り出す
  if(/HOST-RESOURCES-MIB::hrStorageSize.15 = INTEGER: (\d+)/){ $hrStorageSize_Phisical = $1; }

配列2の最後を正規表現でマッチさせ、数値だけ取り出す
  if(/HOST-RESOURCES-MIB::hrStorageUsed.15 = INTEGER: (\d+)/){ $hrStorageUsed_Phisical = $1; }

$hrStorageSize_Phisicalと$hrStorageUsed_Phisicalを適当な形式でprintする
  • 勢いでこのまま作ってしまいたい気持ちがありますが、perlの文法をすっかり忘れちゃったのですねえ。orz 週末の宿題と言うことにしておきましょう。プログラム自体は楽しいので、久しぶりにチャレンジしてみよう。