Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

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
}