2011年4月8日金曜日

アップしているインターフェースのoid取得

サーバ、ネットワーク機器のアップしているインターフェース
ifInOctets、ifOutOctetsのoidを取得するツール。


$ vi check_ifIn_OutOctets.rb

#!/usr/bin/ruby

hostip = ARGV[0]
comm = ARGV[1]

ifInOctets_mib = ".1.3.6.1.2.1.2.2.1.10"
ifOutOctets_mib = ".1.3.6.1.2.1.2.2.1.16"
ifDescr = ".1.3.6.1.2.1.2.2.1.2"


if ARGV.length != 2
  puts("[hostip] [community]")
  exit 1
end

`snmpwalk -v 1 -c #{comm} #{hostip} IF-MIB::ifOperStatus`.each do |line|
  if line =~ /ifOperStatus\.(\d*) =.*up/
                index = $1

    eth = `snmpwalk -v 1 -Ovq -c #{comm} #{hostip} IF-MIB::ifDescr.#{index}`.chomp!

    `snmpwalk -v 1 -c #{comm} #{hostip} IF-MIB::ifInOctets.#{index}`.each do
       print("ifInOctets  #{eth} #{ifInOctets_mib}.#{index}\n")
     end

    `snmpwalk -v 1 -c #{comm} #{hostip} IF-MIB::ifOutOctets.#{index}`.each do
       print("ifOutOctets #{eth} #{ifOutOctets_mib}.#{index}\n")
     end

  end
end


実行する
$ ./check_ifIn_OutOctets.rb 10.0.0.1 public
ifInOctets  Vlan1 .1.3.6.1.2.1.2.2.1.10.1
ifOutOctets Vlan1 .1.3.6.1.2.1.2.2.1.16.1
ifInOctets  Port-channel1 .1.3.6.1.2.1.2.2.1.10.5001
ifOutOctets Port-channel1 .1.3.6.1.2.1.2.2.1.16.5001
ifInOctets  GigabitEthernet1/0/1 .1.3.6.1.2.1.2.2.1.10.10101
ifOutOctets GigabitEthernet1/0/1 .1.3.6.1.2.1.2.2.1.16.10101
ifInOctets  GigabitEthernet1/0/2 .1.3.6.1.2.1.2.2.1.10.10102
ifOutOctets GigabitEthernet1/0/2 .1.3.6.1.2.1.2.2.1.16.10102
ifInOctets  GigabitEthernet1/0/3 .1.3.6.1.2.1.2.2.1.10.10103
(略)