root / plugins / snmp / snmp__apc_pdu @ e09d236f
Historique | Voir | Annoter | Télécharger (3 ko)
| 1 | d9533d61 | Diego Elio Pettenò | #!/usr/bin/perl -w |
|---|---|---|---|
| 2 | d6f29a6b | Diego Elio Pettenò | # -*- cperl -*- |
| 3 | d9533d61 | Diego Elio Pettenò | |
| 4 | =head1 NAME |
||
| 5 | |||
| 6 | snmp__apc - SNMP plugin to monitor APC metered and managed PDUs. |
||
| 7 | |||
| 8 | =head1 APPLICABLE SYSTEMS |
||
| 9 | |||
| 10 | This has been tested with AP7830 metered PDUs, but should work with |
||
| 11 | most other PDUs that follow the PowerNet-MIB published by APC. |
||
| 12 | |||
| 13 | =head1 CONFIGURATION |
||
| 14 | |||
| 15 | Most likely you want to use SNMP version 3 to connect to the PDUs, as |
||
| 16 | they don't support version 2 (only 1 or 3). This can be achieved by |
||
| 17 | using: |
||
| 18 | |||
| 19 | [snmp_*_apc] |
||
| 20 | env.version 3 |
||
| 21 | |||
| 22 | Please see 'perldoc Munin::Plugin::SNMP' for further configuration |
||
| 23 | information. |
||
| 24 | |||
| 25 | =head1 MIB INFORMATION |
||
| 26 | |||
| 27 | This plugin requires the PowerNet-MIB from APC. |
||
| 28 | |||
| 29 | =head1 MAGIC MARKERS |
||
| 30 | |||
| 31 | #%# family=snmpauto |
||
| 32 | #%# capabilities=snmpconf |
||
| 33 | |||
| 34 | =head1 BUGS |
||
| 35 | |||
| 36 | None known. |
||
| 37 | |||
| 38 | =head1 AUTHOR |
||
| 39 | |||
| 40 | Copyright (C) 2012 Diego Elio Pettenò. |
||
| 41 | |||
| 42 | =head1 LICENSE |
||
| 43 | |||
| 44 | GPLv2 |
||
| 45 | |||
| 46 | =cut |
||
| 47 | |||
| 48 | use strict; |
||
| 49 | use Munin::Plugin; |
||
| 50 | use Munin::Plugin::SNMP; |
||
| 51 | |||
| 52 | d6f29a6b | Diego Elio Pettenò | # This corresponds to PowerNet-MIB::rPDU |
| 53 | my $oidBase = '1.3.6.1.4.1.318.1.1.12'; |
||
| 54 | |||
| 55 | # PowerNet-MIB::rPDUIdentModelNumber |
||
| 56 | my $oidModelNo = "$oidBase.1.5"; |
||
| 57 | # PowerNet-MIB::rPDUIdentSerialNumber |
||
| 58 | my $oidSerialNo = "$oidBase.1.6"; |
||
| 59 | # PowerNet-MIB::rPDULoadDevNumPhases |
||
| 60 | my $oidNumPhases = "$oidBase.2.1.2"; |
||
| 61 | # PowerNet-MIB::rPDULoadPhaseConfigEntry |
||
| 62 | # .3 -> PowerNet-MIB::rPDULoadPhaseConfigNearOverloadThreshold |
||
| 63 | # .4 -> PowerNet-MIB::rPDULoadPhaseConfigOverloadThreshold |
||
| 64 | my $oidConfigBase = "$oidBase.2.2.1.1"; |
||
| 65 | # PowerNet-MIB::rPDULoadStatusLoad (+) |
||
| 66 | my $oidPhaseLoad = "$oidBase.2.3.1.1.2"; |
||
| 67 | d9533d61 | Diego Elio Pettenò | |
| 68 | if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") {
|
||
| 69 | d6f29a6b | Diego Elio Pettenò | print "require $oidBase.2.3.1.1.2.[1-9]"; |
| 70 | exit 0; |
||
| 71 | d9533d61 | Diego Elio Pettenò | } |
| 72 | |||
| 73 | # SNMP needed for both config and fetch. |
||
| 74 | my $session = Munin::Plugin::SNMP->session(); |
||
| 75 | d6f29a6b | Diego Elio Pettenò | my $data = $session->get_entries(-columns => [$oidNumPhases, |
| 76 | $oidModelNo, |
||
| 77 | $oidSerialNo]); |
||
| 78 | d9533d61 | Diego Elio Pettenò | |
| 79 | if ($ARGV[0] and $ARGV[0] eq "config") {
|
||
| 80 | d6f29a6b | Diego Elio Pettenò | my ($host) = Munin::Plugin::SNMP->config_session(); |
| 81 | |||
| 82 | print <<END; |
||
| 83 | host_name $host |
||
| 84 | |||
| 85 | graph_title PDU Current Drain |
||
| 86 | graph_vlabel Ampere |
||
| 87 | graph_category sensors |
||
| 88 | graph_info This graph if for $data->{"$oidModelNo.0"} serial $data->{"$oidSerialNo.0"}
|
||
| 89 | a9ce052b | Diego Elio Pettenò | graph_args --base 1000 -l 0 |
| 90 | d6f29a6b | Diego Elio Pettenò | END |
| 91 | |||
| 92 | my $phaseData = $session->get_hash(-baseoid => "$oidConfigBase", |
||
| 93 | -cols => { 3 => 'nearOverloadThreshold',
|
||
| 94 | 4 => 'overloadThreshold' } |
||
| 95 | ); |
||
| 96 | my $phaseIndex; |
||
| 97 | for( $phaseIndex = 1; $phaseIndex <= $data->{"$oidNumPhases.0"}; $phaseIndex++ ) {
|
||
| 98 | print <<END; |
||
| 99 | phase$phaseIndex.label Phase $phaseIndex load |
||
| 100 | phase$phaseIndex.min 0 |
||
| 101 | phase$phaseIndex.warning $phaseData->{$phaseIndex}->{'nearOverloadThreshold'}
|
||
| 102 | phase$phaseIndex.critical $phaseData->{$phaseIndex}->{'overloadThreshold'}
|
||
| 103 | END |
||
| 104 | d9533d61 | Diego Elio Pettenò | } |
| 105 | |||
| 106 | 060ddd51 | Diego Elio Pettenò | unless ( $ENV{MUNIN_CAP_DIRTYCONFIG} == 1 ) {
|
| 107 | exit 0; |
||
| 108 | } |
||
| 109 | d9533d61 | Diego Elio Pettenò | } |
| 110 | |||
| 111 | d6f29a6b | Diego Elio Pettenò | my $phasesLoad = $session->get_entries(-columns => [$oidPhaseLoad]); |
| 112 | |||
| 113 | my $phaseIndex; |
||
| 114 | for( $phaseIndex = 1; $phaseIndex <= $data->{"$oidNumPhases.0"}; $phaseIndex++ ) {
|
||
| 115 | d9533d61 | Diego Elio Pettenò | # the phaseLoad value is defined in dA — we might as well convert to full Amperes |
| 116 | d6f29a6b | Diego Elio Pettenò | my $phaseLoad = $phasesLoad->{"$oidPhaseLoad.$phaseIndex"} / 10.0;
|
| 117 | d9533d61 | Diego Elio Pettenò | print "phase$phaseIndex.value $phaseLoad\n"; |
| 118 | } |
