| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- From mm@elabnet.de Mon Nov 18 09:59:04 2002
- Date: Mon, 18 Nov 2002 12:19:04 +0100
- From: Michael Markstaller <mm@elabnet.de>
- To: nagiosplug-devel@lists.sourceforge.net
- Subject: [Nagiosplug-devel] Submission: check_insight / checking Compaq
- Insight Agent status
- Hi,
- I've been looking to check the status/health of Compaq Insight Agents on
- servers and found a spong plugin
- (http://spong.sourceforge.net/downloads/plugins/spong-network/check_insi
- ght) which I've slightly changed to work with Nagios.
- I have pretty no idea of perl at all, just wanted to make it work for
- me, so please don't shoot me for this copy-paste-code. I've tested some
- basic things, it seems to work at least to report a warning if smthg is
- degraded and OK of xcourse ;)
- I'm also quite unsure if this is the right way to submit, so I'll just
- try ;)
- There're some "unknown" components on all servers I've checked so far,
- if anybody has a documentation of what's exactly returned when getting
- the OID 1.3.6.1.4.1.232.11.2.10.1.0 (CPQHOST_MIB isn't very descriptive)
- I'd be happy to fix this.
- --- cut ---
- #!/usr/bin/perl
- #
- # (c)2002 Michael Markstaller, Elaborated Networks GmbH
- # send bug reports to <mm@elabnet.de>
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty
- # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # you should have received a copy of the GNU General Public License
- # along with this program (or with Nagios); if not, write to the
- # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- # Boston, MA 02111-1307, USA
- #
- #
- # Check Comapq Insight Management Agents Systems Status by SNMP
- # based on the spong-plugin check_insight from:
- #
- http://spong.sourceforge.net/downloads/plugins/spong-network/check_insig
- ht
- #
- # Usage:
- # check_insight -H <host> -C community
- #
- use Net::SNMP;
- use Getopt::Long;
- Getopt::Long::Configure('bundling');
- $version=0.01;
- my %ERRORS = ('UNKNOWN' , '-1',
- 'OK' , '0',
- 'WARNING', '1',
- 'CRITICAL', '2');
- #
- # some default values
- #
- $TIMEOUT=15;
- #
- # get command line options the regular way
- #
- GetOptions
- ("V" => \$opt_V, "version" => \$opt_V,
- "h" => \$opt_h, "help" => \$opt_h,
- "v" => \$verbose, "verbose" => \$verbose,
- "H=s" => \$opt_H, "hostname=s" => \$opt_H,
- "C=s" => \$opt_C, "community=s" => \$opt_C);
- #
- # handle the verbose stuff first
- #
- if ($opt_V) {
- print "\n";
- print "check_insight nagios plugin version $version\n";
- print "\n";
- print "The nagios plugins come with ABSOLUTELY NO WARRANTY. You
- may redistribute\n";
- print "copies of the plugins under the terms of the GNU General
- Public License.\n";
- print "For more information about these matters, see the file
- named COPYING.\n";
- print "\n";
- print "(c)2002 Michael Markstaller, Elaborated Networks GmbH\n";
- print "\n";
- print "\n";
- exit $ERRORS{'UNKNOWN'};
- }
- if ($opt_h) {
- print_help();
- exit $ERRORS{'UNKNOWN'};
- }
- #
- # now get options the weired way and set the defaults
- # if nothing else is provided
- #
- $opt_H = shift unless ($opt_H);
- print_usage() unless ($opt_H);
- #
- # dont let us wait forever...
- #
- $SIG{'ALRM'} = sub {
- print ("ERROR: No response from server (alarm)\n");
- exit $ERRORS{"UNKNOWN"};
- };
- alarm($TIMEOUT);
- #
- # now we set things up for the real work
- # and fire up the request
- #
- ########################################################################
- ########
- my ($host) = ($opt_H);
- my ($color, $summary, $message ) = ( "green", "", "" );
- ($opt_C) || ($opt_C = shift) || ($opt_C = "public");
- my ($community) = $opt_C;
- # We use some look up tables for checking some config options.
- my (@State) = ("Not Available", "Other", "OK", "Degraded", "Failed");
- my (@MIBName) = ("", "Std", "Unknown", "Array",
- "Netware", "SCSI", "Health","Unknown",
- "Store", "SM2", "Thresh", "OS", "UPS",
- "Unknown", "IDE", "Clusters", "Fibre",
- "MIB", "NIC");
- # These are the positions within the table to actually look at.
- my (@MIBs) = (1, 2, 3, 5, 6, 10, 11, 14, 18);
- my ($oid) = "1.3.6.1.4.1.232.11.2.10.1.0"; # SysArray
- # Open the connection.
- my ($session, $error) = Net::SNMP->session(Hostname => $host,
- Community => $community);
- # If we can't open a connection, just return red straight away.
- if (! defined $session) {
- print ("ERROR: Unable to contact server '$opt_H'\n");
- exit $ERRORS{"UNKNOWN"};
- }
- $session->translate;
- my ($response) = $session->get_request($oid);
- if (!defined $response) {
- # If there's no response, something screwy is going on, give up.
- $summary = $session->error;
- print ("ERROR: $summary\n");
- exit $ERRORS{"UNKNOWN"};
- $session->close;
- } else {
- $session->close;
- # I'm not convinced that this is the easiest way to go about this,
- this is
- # from some code which I've inherited and I've modified for use in
- here.
- # Hi George!
- %h = %$response;
- my ($d) = $h{$oid};
- my (@list) = ();
-
- # Gobble the first two char's.
- $d = substr $d,2;
- while (length($d) > 0) {
- my ($v) = substr($d,0,2);
- $v = hex($v);
- $d = substr $d,2;
- push @list, $v;
- }
- # Value in $MIBs[1] is the overall status of the machine...
- my ($cond) = $MIBs[1];
- $message .= "Status: $State[$cond] ";
- foreach my $v (@MIBs) {
- $cond = $list[($v*4)+1]; # A little bit of magic.
- # We only bother printing the status out if it's actually
- available,
- # as if it's N/A or Unknown then it's probably because the machine
- # isn't available.
- $message .= "$MIBName[$v]: $State[$cond] " if $cond > 1;
- next if $cond < 2;
- # What follows is some trickery to try and not to override a
- previous
- # message at the same or lower color.
- if ($cond == 4) {
- if ($color ne 'red') {
- $color = 'red';
- $summary = "$MIBName[$v] is failed";
- }
- } elsif ($cond == 3) {
- if ($color ne 'red') {
- $color = 'yellow';
- $summary = "$MIBName[$v] is degraded" if $summary eq "";
- }
- } elsif ($cond < 2) {
- if ($color eq 'green') {
- $color = 'yellow';
- $summary = "$MIBName[$v] is unknown ($cond)" if $summary eq
- "";
- }
- }
- }
- }
-
- $summary = "Ok" if $summary eq "";
- # return ($color, $summary, $message);
- if ($color eq 'red') {
- print ("red Output: $message\n");
- exit $ERRORS{"CRITICAL"};
- } elsif ($color eq 'yellow') {
- print ("$summary $message\n");
- exit $ERRORS{"WARNING"};
- } elsif ($color eq 'green') {
- print ("$message\n");
- exit $ERRORS{"OK"};
- }
- sub print_usage () {
- print "Usage: $0 -H <host> -C <community> \n"; }
-
- sub print_help () {
- print "\n";
- print "\n";
- print "check_insight nagios plugin version $version\n";
- print "\n";
- print "The nagios plugins come with ABSOLUTELY NO WARRANTY. You
- may redistribute\n";
- print "copies of the plugins under the terms of the GNU General
- Public License.\n";
- print "For more information about these matters, see the file
- named COPYING.\n";
- print "\n";
- print "(c)2002 Michael Markstaller, Elaborated Networks GmbH\n";
- print "\n";
- print "\n";
- print "This plugin checks the Compaq Insight Management agents
- system status via SNMP on the specified host.\n";
- print "\n";
- print "\n";
- print_usage();
- print "\n";
- print "Options:\n";
- print " -H, --hostname=ADDRESS\n";
- print " host name argument for server.\n";
- print " -C, --community=STRING\n";
- print " SNMP Read-community string.\n";
- print " -h, --help\n";
- print " print detailed help screen.\n";
- print " -V, --version\n";
- print " print version information.\n";
- print "\n";
- print "\n";
- }
- --- cut ---
- Michael
- -------------------------------------------------------
- This sf.net email is sponsored by: To learn the basics of securing
- your web site with SSL, click here to get a FREE TRIAL of a Thawte
- Server Certificate: http://www.gothawte.com/rd524.html
- _______________________________________________
- Nagiosplug-devel mailing list
- Nagiosplug-devel@lists.sourceforge.net
- https://lists.sourceforge.net/lists/listinfo/nagiosplug-devel
|