<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 5.50.4912.300" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>hi all,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>First excuse me for my english I'm a newbee in
english and in Perl language...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I run Nagios V. 1.0b3 on a linux box (RedHat 7.3),
and I compile it with no embedded perl. Nagios run under nagios user, and
...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I make a perl script for openning a telnet session
on a Cisco routeur and retrive the cpu usage, here the script :</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV><FONT face=Arial size=2><FONT
face="Courier New" size=2>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
<DIV dir=ltr><FONT face=Arial>#!/usr/bin/perl</FONT></DIV>
<DIV dir=ltr><FONT face=Arial># écrit par Moi !</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>use strict;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>use Net::Telnet;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>use Getopt::Long;</FONT></DIV>
<DIV dir=ltr><FONT
face=Arial>&Getopt::Long::config('auto_abbrev');</FONT></DIV>
<DIV dir=ltr><FONT
face=Arial>#---------------------------------------</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my %ERRORS = ('UNKNOWN' , '-1',</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
'OK' , '0',</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
'WARNING', '1',</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
'CRITICAL', '2');</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>my $state = "UNKNOWN";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my ($host, $user, $pass, $warning,
$critical);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $telnettimeout =60;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $ltime = localtime();</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $code = -1;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial># Evaluation des paramètres passés à la
commande</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $status = GetOptions(</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
"host=s",\$host,</FONT></DIV>
<DIV dir=ltr><FONT
face=Arial>
"user=s",\$user,</FONT></DIV>
<DIV dir=ltr><FONT
face=Arial>
"pass=s",\$pass,</FONT></DIV>
<DIV dir=ltr><FONT
face=Arial>
"warning=s",\$warning,</FONT></DIV>
<DIV dir=ltr><FONT
face=Arial>
"critical=s",\$critical,</FONT></DIV>
<DIV dir=ltr><FONT
face=Arial>
);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>usage() if ($status == 0 || ! ($host &&
$pass ));</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial># -h means host name</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>$host = shift unless ($host);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>unless ($host) { usage(); exit (-1);
}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>if ($host &&</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
$host =~
m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0-9]*(\.[a-zA-Z][-a-zA-Z0-9]*)*)$/)</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> {</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
$host = $1;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>} else {</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
print "$host is not a valid host name \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
exit (-1);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial># -u means user name not needed</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial># -p means password</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>$pass = shift unless ($pass);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>unless ($pass) { usage(); exit (-1);
}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial># -w means warning</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>$warning = shift unless ($warning);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>$warning = 60 unless ($warning);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial># -c means critical</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>$critical = shift unless
($critical);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>$critical = 90 unless ($critical);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial># Si tous les paramètres sont bons, on recupère
les info en telnet...</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $line;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my @lines;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $cpuval;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $t</FONT><FONT face=Arial>;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial> $t = new Net::Telnet (Timeout
=> $telnettimeout);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
$t->open($host);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>if ($user){</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
$t->prompt("/:/");</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> @lines =
$t->cmd($user);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
$t->prompt("/>/");</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> @lines =
$t->cmd($pass);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> @lines = $t->cmd("term len
0");</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> @lines = $t->cmd("show
processes cpu");</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>$line = $lines[0];</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>if ($line=~/one
minute\s*:\s*(\d+)\%/){</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> $cpuval = $1;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>eval{</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
$t->cmd("exit");</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>};</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $detail;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>my $report;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>if ($cpuval!~/^\d+$/){</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> my $report = "$ltime,
$detail";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> $state =
"UNKNOWN";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
nsexit($report,'UNKNOWN');</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>elsif ($cpuval < $warning){</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> $report = "$ltime, OK - Cisco
CPU on $host is at $cpuval %, $line";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> $state = "OK";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
nsexit($report,'OK');</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>elsif ($cpuval < $critical){</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> my $report = "$ltime, WARNING
- Cisco CPU on $host is at $cpuval %, $line";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> $state =
"WARNING";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
nsexit($report,'WARNING');</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>else{</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> #Par default CRITICAL
:</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> my $report = "$ltime,
CRITICAL - Cisco CPU on $host is at $cpuval %, $line";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> $state =
"CRITICAL";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>
nsexit($report,'CRITICAL');</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>#
----------------------------------------------------------------------</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>sub nsexit {</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> my ($report,$code) =
@_;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> $code=$state if (!defined
$code);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> print "$code : $report\n" if
(defined $report);</FONT></DIV>
<DIV dir=ltr><FONT face=Arial> exit
$ERRORS{$code};</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>#
----------------------------------------------------------------------</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>sub usage {</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>print "Moniteur charge CPU
Cisco\n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print "Ce plugin questionne un routeur cisco et
recupère la moyenne en % de la charge CPU depuis une minute.\n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print "Usage : \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " Les options suivantes doivent être
fournis : \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " -host=texte Host du serveur FTP
\n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " -user=texte Login pour la connection,
pas obligatoire \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " -pass=texte Mot de passe pour la session
Telnet \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " -warning=pourcentage Le niveau pour le
Warning pas obligatoire (par defaut : 60)\n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " -critical=pourcentage Le niveau pour le
Critical pas obligatoire (par defaut : 90)\n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " Les options peuvent être abrégées
\n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " Example: \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " -h=host -pa=pw -us=user -wa=warning
-cr=critical\n" ;</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print " Copyleft Moi \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print "This script comes with ABSOLUTELY NO
WARRANTY \n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print "This programm is licensed under the terms
of the ";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>print "GNU General Public License \n
\n";</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>exit $ERRORS{"UNKNOWN"};</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
<DIV dir=ltr><FONT face=Arial>#
---------------------------------------------------------------------</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>My problem is, in the nagios cgi the
"Current Status" is always CRITICAL and "Status Information" is (no output!)
...</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>I don't understand because when I run the plugin
in command line like 'root' or 'nagios' user, the plugin return me something
like :</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>OK: Mon Jul 29 14:19:47 2002 OK - Cisco CPU
on xxx.xxx.xxx.xxx is at 0 %</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>And with a strace "the command line" I see the
plugin exit with the good exit code... like 0, 1, 2 or -1</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>So I think my script work fine but not with
nagios ????</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>Anyone could help me ? please !</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>I plan to make other script for CISCO with
telnet or snmp session (when this one run correctly, off course !), so If
anyone is interrest with other plugin for Cisco tell me, or if anyone could
give plugin for Cisco, I was very happy...</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>Best regards,</FONT></DIV>
<DIV dir=ltr><FONT face=Arial></FONT> </DIV>
<DIV dir=ltr><FONT face=Arial>Tom</FONT></DIV></BLOCKQUOTE></FONT></FONT>
<DIV><FONT face=Arial size=2></FONT> </DIV></BODY></HTML>