I have several Cisco templates. This one is for IOS Modularity:
Code:
$head_lines .= <<ECHO
#.....................................................................
# Router processor utilization.
#
ECHO
;
snmpMIB_to_OID("/usr/share/snmp/mibs/CISCO-SMI-V1SMI.my");
snmpMIB_to_OID("/usr/share/snmp/mibs/CISCO-TC-V1SMI.my");
snmpMIB_to_OID("/usr/share/snmp/mibs/CISCO-PROCESS-MIB.my");
snmpMIB_to_OID("/usr/share/snmp/mibs/ENTITY-MIB-V1SMI.my");
my (@entid) = snmpwalk($router,$v3opt,'cpmCPUTotalPhysicalIndex');
my %entids;
foreach my $ent (@entid) {
$ent =~ /(\d+):(\d+)/;
my $instance= $1;
my $entindex = $2;
my ($entname) = snmpget($router,$v3opt,'entPhysicalName.'.$entindex);
$entids{$instance}=$entname;
}
my %cpu;
my (@temp) = snmpwalk($router,$v3opt,'cpmCPUTotal5secRev');
foreach my $tempi(@temp) {
$tempi =~ /(\d+):\d+/;
my $instance=$1;
my $target_name=$router_name.".cpu".$instance;
$cpu{$instance}++;
$target_lines .= <<CPU
Target[$target_name]: cpmCPUTotal5secRev.$instance&cpmCPUTotal1minRev.$instance:$router
SnmpOptions[$target_name]: $v3options
MaxBytes[$target_name]: 100
routers.cgi*ShortDesc[$target_name]: CPU # $entids{$instance}
routers.cgi*Options[$target_name]: nototal
bb*host[$target_name]: $router_name
bb*svc[$target_name]: cpu
bb*red[$target_name]: 90
bb*yellow[$target_name]: 80
Options[$target_name]: gauge
Directory[$target_name]: $directory_name
WithPeak[$target_name]: wmy
YLegend[$target_name]: % Utilization
ShortLegend[$target_name]: %
Legend1[$target_name]: 5 Second Load
Legend2[$target_name]: 1 Minute Load
LegendI[$target_name]: 5sec :
LegendO[$target_name]: 1min :
Title[$target_name]: $sysname
PageTop[$target_name]: <H1>$sysname Processor Load - $entids{$instance} </H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
CPU
;
}
my (@temp) = snmpwalk($router,$v3opt,'cpmCPUTotal5sec');
foreach my $tempi(@temp) {
$tempi =~ /(\d+):\d/;
my $instance=$1;
next if exists $cpu{$instance};
my $target_name=$router_name.".cpu".$instance;
$cpu{$instance}++;
$target_lines .= <<CPUOLD
Target[$target_name]: cpmCPUTotal5sec.$instance&cpmCPUTotal1min.$instance:$router
SnmpOptions[$target_name]: $v3options
MaxBytes[$target_name]: 100
routers.cgi*ShortDesc[$target_name]: CPU # $entids{$instance}
routers.cgi*Options[$target_name]: nototal
bb*host[$target_name]: $router_name
bb*svc[$target_name]: cpu
bb*red[$target_name]: 90
bb*yellow[$target_name]: 80
Options[$target_name]: gauge
Directory[$target_name]: $directory_name
WithPeak[$target_name]: wmy
YLegend[$target_name]: % Utilization
ShortLegend[$target_name]: %
Legend1[$target_name]: 5 Second Load
Legend2[$target_name]: 1 Minute Load
LegendI[$target_name]: 5sec :
LegendO[$target_name]: 1min :
Title[$target_name]: $sysname
PageTop[$target_name]: <H1>$sysname Processor Load -- $entids{$instance}</H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
CPUOLD
;
}
my (@temp) = snmpwalk($router,$v3opt,'cpmCPUMemoryFree');
foreach my $tempi(@temp) {
$tempi =~ /(\d+):\d+/;
my $instance=$1;
my ($free,$used,$kernel) = snmpget($router,$v3opt,"cpmCPUMemoryFree.$instance","cpmCPUMemoryUsed.$instance","cpmCPUMemoryKernelReserved.$instance");
my $max = $free + $used + $kernel;
my $target_name=$router_name.".memory".$instance;
$cpu{$instance}++;
$target_lines .= <<TOTALMEM
Target[$target_name]: cpmCPUMemoryUsed.$instance&cpmCPUMemoryKernelReserved.$instance:$router
SnmpOptions[$target_name]: $v3options
MaxBytes[$target_name]: $max
routers.cgi*ShortDesc[$target_name]: Total Memory Used # $entids{$instance}
routers.cgi*Options[$target_name]: nototal
routers.cgi*GraphStyle[$target_name]: stack
bb*host[$target_name]: $router_name
bb*svc[$target_name]: memory
bb*red[$target_name]: 90%
bb*yellow[$target_name]: 80%
Options[$target_name]: gauge
Directory[$target_name]: $directory_name
WithPeak[$target_name]: wmy
YLegend[$target_name]: Memory
ShortLegend[$target_name]: B
Legend1[$target_name]: Memory used
Legend2[$target_name]: Kernel Reserved
Kilo[$target_name]: 1024
Factor[$target_name]: 1024
Title[$target_name]: $sysname
PageTop[$target_name]: <H1>$sysname Total Memory -- $entids{$instance}</H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
TOTALMEM
;
}
#snmpMIB_to_OID("/usr/share/snmp/mibs/CISCO-QOS-PIB-MIB-V1SMI.my");
#snmpMIB_to_OID("/usr/share/snmp/mibs/SNMPv2-SMI-V1SMI.my");
#snmpMIB_to_OID("/usr/share/snmp/mibs/SNMP-FRAMEWORK-MIB-V1SMI.my");
#snmpMIB_to_OID("/usr/share/snmp/mibs/ENTITY-MIB-V1SMI.my");
snmpMIB_to_OID("/usr/share/snmp/mibs/CISCO-ENHANCED-MEMPOOL-MIB-V1SMI.my");
my (@temp) = snmpwalk($router,$v3opt,'cempMemPoolName');
foreach my $tempi(@temp) {
$tempi =~ /^([\d\.]+):(.+)/;
my $instance=$1;
my $pool_name=$2;
my ($entity,$in2) = split('\.',$instance);
my ($used, $free, $pool_descr) = snmpget($router,$v3opt,
'cempMemPoolUsed.'.$instance,
'cempMemPoolFree.'.$instance,
'entPhysicalName.'.$entity
);
$pool_descr .= ' '.$pool_name;
my $target_name=$router_name.".memory".$instance;
my $maxsize = $used+$free;
if ($pool_name !~ /posix/) {
$target_lines .= <<DISK
#--------------------------------------------------------------------------------------
# Memory Utilization
Target[$target_name]: cempMemPoolFree.$instance&cempMemPoolLargestFree.$instance:$router
SnmpOptions[$target_name]: $v3options
YLegend[$target_name]: Bytes Free
Options[$target_name]: gauge
Directory[$target_name]: $directory_name
MaxBytes[$target_name]: $maxsize
ShortLegend[$target_name]: bytes
routers.cgi*ShortDesc[$target_name]: Memory $pool_name
routers.cgi*Options[$target_name]: nototal
bb*host[$target_name]: $router_name
bb*svc[$target_name]: memory
bb*red[$target_name]: 5%:101%
bb*yellow[$target_name]: 15%:100%
Legend1[$target_name]: Free Mem
Legend2[$target_name]: Largest Block
LegendI[$target_name]: Free
LegendO[$target_name]: Block
WithPeak[$target_name]: ymw
Title[$target_name]: $sysname $pool_descr
PageTop[$target_name]: <H1>Memory on $sysname $pool_descr </H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
DISK
;
} else {
$target_lines .= <<POSIX
#--------------------------------------------------------------------------------------
# Memory Utilization
Target[$target_name]: cempMemPoolFree.$instance&cempMemPoolUsed.$instance:$router
SnmpOptions[$target_name]: $v3options
YLegend[$target_name]: Bytes Free
Options[$target_name]: gauge
Directory[$target_name]: $directory_name
MaxBytes[$target_name]: $maxsize
ShortLegend[$target_name]: bytes
routers.cgi*ShortDesc[$target_name]: Memory $pool_name
routers.cgi*Options[$target_name]: nototal
routers.cgi*GraphType[$target_name]: stack
Legend1[$target_name]: Free Mem
Legend2[$target_name]: Used Memory
LegendI[$target_name]: Free
LegendO[$target_name]: Used
WithPeak[$target_name]: ymw
Title[$target_name]: $sysname $pool_descr
PageTop[$target_name]: <H1>Memory on $sysname $pool_descr </H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
POSIX
;
}
}
snmpMIB_to_OID("/usr/share/snmp/mibs/CISCO-ENTITY-FRU-CONTROL-MIB.my");
my $firstfru = 0;
my (@fru) = snmpwalk($router,$v3opt,'cefcPowerUnits');
foreach my $frui (@fru) {
next if $firstfru++ >0;
my $factor = 1;
my ($finstance,$funits) = ($frui =~ /(\d+):(.+)$/) ;
$factor /= 100 if $funits =~ s/^centi//;
if ($funits =~ /AmpsAt(\d+)v/) {
$factor *= $1;
$funits = "VoltAmps";
}
my ($avail) = snmpget($router,$v3opt,'cefcTotalAvailableCurrent.'.$finstance);
my $target_name =$router_name.".power";
$target_lines .= <<POWER
#--------------------------------------------------------------------------------------
# Power Consumption
Target[$target_name]: cefcTotalDrawnCurrent.$finstance&cefcTotalDrawnCurrent.$finstance:$router
SnmpOptions[$target_name]: $v3options
YLegend[$target_name]: $funits used
Options[$target_name]: gauge
Directory[$target_name]: $directory_name
MaxBytes[$target_name]: $avail
ShortLegend[$target_name]: $funits
Factor[$target_name]: $factor
routers.cgi*ShortDesc[$target_name]: Power
routers.cgi*Options[$target_name]: nototal
bb*host[$target_name]: $router_name
bb*svc[$target_name]: power
bb*red[$target_name]: 95%
bb*yellow[$target_name]: 90%
Legend1[$target_name]: Power used
Legend2[$target_name]:
LegendI[$target_name]: Used
LegendO[$target_name]:
WithPeak[$target_name]: ymw
Title[$target_name]: $sysname Power
PageTop[$target_name]: <H1>Power on $sysname </H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
POWER
;
}
snmpMIB_to_OID("/usr/share/snmp/mibs/POWER-ETHERNET-MIB-V1SMI.my");
my (@pet) = snmpwalk($router,$v3opt,'pethMainPsePower');
foreach my $peti (@pet) {
my ($pinstance,$pmax) = ($peti =~ /(\d+):(.+)$/) ;
if ($pmax == 0) {
$pmax = 840;
}
my $factor = 1;
my $abspmax = $pmax;
my ($curval) = snmpget($router,$v3opt,"pethMainPseConsumptionPower.".$pinstance);
if ($curval > $pmax) {
$factor = .001;
$pmax *= 1000;
$abspmax = $pmax;
} elsif ($curval == 0) {
$abspmax=$pmax * 1000;
};
my $target_name =$router_name.".poe.".$pinstance;
$target_lines .= <<POEMOD
#--------------------------------------------------------------------------------------
# Per Module Power Over Ethernet Consumption
Target[$target_name]: pethMainPseConsumptionPower.$pinstance&pethMainPseConsumptionPower.$pinstance:$router
SnmpOptions[$target_name]: $v3options
YLegend[$target_name]: watts used
Options[$target_name]: gauge
Directory[$target_name]: $directory_name
AbsMax[$target_name]: $abspmax
MaxBytes[$target_name]: $pmax
Factor[$target_name]: $factor
ShortLegend[$target_name]: w
routers.cgi*ShortDesc[$target_name]: PoE Mod $pinstance
routers.cgi*Graph[$target_name]: PoE noi
bb*host[$target_name]: $router_name
bb*svc[$target_name]: power
bb*red[$target_name]: 95%
bb*yellow[$target_name]: 90%
Legend1[$target_name]: Power used
Legend2[$target_name]:
LegendI[$target_name]: Used
LegendO[$target_name]:
WithPeak[$target_name]: ymw
Title[$target_name]: $sysname Power
PageTop[$target_name]: <H1>Power on $sysname module $pinstance </H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
POEMOD
;
}
#
# Look for dBm meters - probably interesting
snmpMIB_to_OID("/usr/share/snmp/mibs/ENTITY-SENSOR-MIB.my");
snmpMIB_to_OID("/usr/share/snmp/mibs/CISCO-ENTITY-SENSOR-MIB-V1SMI.my");
my (@est) = snmpwalk($router,$v3opt,'entSensorType');
foreach my $esti (@est) {
my ($tinstance,$ttype) = ($esti =~ /(\d+):(.+)$/) ;
next if $ttype != 14;
my (@estv) = snmpwalk($router,$v3opt,'entSensorThresholdValue.'.$tinstance);
my %thresh;
foreach my $estvi (@estv) {
my ($thin,$value) = ($estvi =~ /(\d+):(.+)$/) ;
$thresh{$thin} = $value;
};
my $maxsize = $thresh{1}+10;
my ($sens_name) = snmpget($router,$v3opt,'entPhysicalName.'.$tinstance);
my $sens_descr .= ' '.$sens_name;
my $target_name=$router_name.".signal".$tinstance;
$target_lines .= <<SIGNAL
#--------------------------------------------------------------------------------------
# Signal Strength
Target[$target_name]: entSensorValue.$tinstance&entSensorValue.$tinstance:$router
SnmpOptions[$target_name]: $v3options
YLegend[$target_name]: dB
Options[$target_name]: gauge, noi, nopercent
Directory[$target_name]: $directory_name
MaxBytes[$target_name]: $maxsize
ShortLegend[$target_name]: dB
Factor[$target_name]: .1
routers.cgi*ShortDesc[$target_name]: $sens_name
routers.cgi*Options[$target_name]: nototal
bb*host[$target_name]: $router_name
bb*svc[$target_name]: signal
bb*red[$target_name]: $thresh{4}:$thresh{1}
bb*yellow[$target_name]: $thresh{3}:$thresh{2}
Legend1[$target_name]: dB
WithPeak[$target_name]: ymw
Title[$target_name]: $sysname $sens_descr
PageTop[$target_name]: <H1>$sysname $sens_descr </H1>
<TABLE>
<TR><TD>System:</TD><TD>$sysname </TD></TR>
<TR><TD>Location:</TD><TD>$syslocation </TD></TR>
</TABLE>
SIGNAL
;
}