octets, discards, errors, unicastpkts, broadcastpkts, multicastpktsのいずれかを収集するmrtg.cfgファイルを作成する
(mycfgmaker.pl)
#!/usr/bin/env perl $snmpwalk = "/usr/bin/snmpwalk"; #スクリプト内でsnmpwalkを起動するので実行パスを指定してください $rrddir = "/usr/local/apache/htdocs/mrtg"; $icondir = "/usr/local/mrtg-2/share/mrtg2/icons/"; $absmax = "125000000"; #1GB $pathadd = "/usr/local/rrdtool/bin/"; $libadd = "/usr/local/rrdtool/lib/perl/\n"; $rrdrowcount = "12960"; $maxbytes = "12500000"; #100MB $usage =<<"EOS"; usage : mycfgmaker.pl [-global] [-interval min] -v 1|2c|3 -c COMMUNITY -object octets|discards|errors|unicastpkts|broadcastpkts|multicastpkts hostname EOS if($#ARGV < 6){ die $usage; } $i = 0; while($i < $#ARGV){ if($ARGV[$i] =~ /^-global$/){ $global++; }elsif($ARGV[$i] =~ /^-interval$/){ $i++; $interval = $ARGV[$i]; }elsif($ARGV[$i] =~ /^-v$/){ $i++; $snmpversion = $ARGV[$i]; if(!($snmpversion =~ /^(1|2c|3)$/)){ die "invalid option $ARGV[$i-1] $ARGV[$i]\n"; } }elsif($ARGV[$i] =~ /^-c$/){ $i++; $community = $ARGV[$i]; }elsif($ARGV[$i] =~ /^-object$/){ $i++; $object = $ARGV[$i]; if($object =~ /^octets$/){ @oid = ('ifInOctets','ifOutOctets'); }elsif($object =~ /^discards$/){ @oid = ('ifInDiscards','ifOutDiscards'); }elsif($object =~ /^errors$/){ @oid = ('ifInErrors','ifOutErrors'); }elsif($object =~ /^unicastpkts$/){ @oid = ('ifInUcastPkts','ifOutUcastPkts'); }elsif($object =~ /^multicastpkts$/){ @oid = ('ifInMulticastPkts','ifOutMulticastPkts'); }elsif($object =~ /^broadcastpkts$/){ @oid = ('ifInBroadcastPkts','ifOutBroadcastPkts'); }else{ die "invalid option $ARGV[$i-1] $ARGV[$i]\n"; } }elsif($ARGV[$i] =~ /^-\S+$/){ die "invalid option $ARGV[$i]\n"; }else{ die $usage; } $i++; } $hostname = $ARGV[$#ARGV]; $title = "$hostname-$object"; if($global > 0){ print "Title[_]: $title\n"; print "WorkDir: $rrddir\n"; print "IconDir: $icondir\n"; print "AbsMax[_]: $absmax\n"; print "Forks: 4\n"; print "SnmpOptions: timeout => 10, retiries => 3\n"; print "LogFormat: rrdtool\n"; print "PathAdd: $pathadd\n"; print "LibAdd: $libadd\n"; print "RRDRowCount[_]: $rrdrowcount\n"; print "\n"; } if($interval > 0){ print "Interval: $interval\n\n"; } #インターフェイスのインデックス番号 open(IFINDEX,"$snmpwalk -v $snmpversion -c $community $hostname IF-MIB::ifIndex|"); #インターフェイスの説明 open(IFDESCR,"$snmpwalk -v $snmpversion -c $community $hostname IF-MIB::ifDescr|"); while(($ifindex = <IFINDEX>) && ($ifdescr = <IFDESCR>)){ $ifindex =~ /^\S+ \= \w+: (\d+)/; $index = $1; $ifdescr =~ /^\S+ \= \w+: (.+)$/; $descr = $1; print "\#$descr\n"; #ファイル名に使用できない文字と大括弧を削除 $descr =~ s/[\/\\\:\*\?\<\>\|\#\{\}\%\&\~\[\]]//g; #"-"を"_"に変換する #$descr =~ s/-/_/g; #空白を削除し、"_"で連結する @temp = split(/\s+/,$descr); $descr = join("_",@temp); #target名を生成する #$target_name = "$hostname-$object-$descr"; $target_name = $descr; @temp = @oid; grep(s/.*/$_."\.$index"/e,@temp); #配列の要素全てにindexを付加する $oids = join("&",@temp); print "Target[$target_name]: $oids:$community\@$hostname\n"; print "Directory[$target_name]: $hostname/$object\n"; print "MaxBytes[$target_name]: $maxbytes\n"; print "\n"; } close(IFINDEX); close(IFDESCR);
実行例. マルチキャストパケットを収集するコンフィグファイル(グローバル設定除く)を作成
$ ./mycfgmaker.pl -v 2c -c intrawatcher -object multicastpkts 192.168.0.33 #Software Loopback Interface 1. Target[Software_Loopback_Interface_1.]: ifInMulticastPkts.1&ifOutMulticastPkts.1:intrawatcher@192.168.0.33 Directory[Software_Loopback_Interface_1.]: 192.168.0.33/multicastpkts MaxBytes[Software_Loopback_Interface_1.]: 12500000 #VMware Virtual Ethernet Adapter for VMnet1. Target[VMware_Virtual_Ethernet_Adapter_for_VMnet1.]: ifInMulticastPkts.2&ifOutMulticastPkts.2:intrawatcher@192.168.0.33 Directory[VMware_Virtual_Ethernet_Adapter_for_VMnet1.]: 192.168.0.33/multicastpkts MaxBytes[VMware_Virtual_Ethernet_Adapter_for_VMnet1.]: 12500000 #VMware Virtual Ethernet Adapter for VMnet8. Target[VMware_Virtual_Ethernet_Adapter_for_VMnet8.]: ifInMulticastPkts.3&ifOutMulticastPkts.3:intrawatcher@192.168.0.33 Directory[VMware_Virtual_Ethernet_Adapter_for_VMnet8.]: 192.168.0.33/multicastpkts MaxBytes[VMware_Virtual_Ethernet_Adapter_for_VMnet8.]: 12500000 #Bluetooth Device (RFCOMM Protocol TDI). Target[Bluetooth_Device_(RFCOMM_Protocol_TDI).]: ifInMulticastPkts.4&ifOutMulticastPkts.4:intrawatcher@192.168.0.33 Directory[Bluetooth_Device_(RFCOMM_Protocol_TDI).]: 192.168.0.33/multicastpkts MaxBytes[Bluetooth_Device_(RFCOMM_Protocol_TDI).]: 12500000 #Microsoft Virtual WiFi Miniport Adapter #2. Target[Microsoft_Virtual_WiFi_Miniport_Adapter_2.]: ifInMulticastPkts.5&ifOutMulticastPkts.5:intrawatcher@192.168.0.33 Directory[Microsoft_Virtual_WiFi_Miniport_Adapter_2.]: 192.168.0.33/multicastpkts MaxBytes[Microsoft_Virtual_WiFi_Miniport_Adapter_2.]: 12500000 ...
識別子に"."使えないかも。