Nagios plugin problem using check_nrpe

Assaf Flatto nagios at flatto.net
Tue May 11 18:46:37 CEST 2010


Antonio Fernando Evangelista wrote:
>
> Hi.
>
> I’m writing a new Nagios plugin that will be responsible to monitor 
> the server internal components temperature.
>
> I have a Proliant DL380 G5 with the HP Management CLI for Linux 
> installed on it, and I wrote a perl program to check the
>
> Temperature.
>
> When I execute the perl script directly from the command prompt, I 
> receive a message indicating the behavior of the
>
> Temperature. But, when I call this script perl using check_nrpe 
> command, I received the same message, but the information
>
> of the temperature stays in blank.
>
> Following are my nrpe.cfg configuration file and the perl script.
>
> Does anybody know how can I fix this?
>
> *_NRPE.CFG_*
>
> pid_file=/var/run/nrpe.pid
>
> server_port=5666
>
> nrpe_user=nagios
>
> nrpe_group=nagios
>
> allowed_hosts=172.16.4.56,localhost
>
> dont_blame_nrpe=0
>
> debug=1
>
> command_timeout=60
>
> connection_timeout=300
>
> command[check_load]=/usr/local/nagios/libexec/check_load -w 3,3,3 -c 4,4,4
>
> command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/mapper/vg01-lvol1
>
> command[check_sda2]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/cciss/c0d0p1
>
> command[check_sda3]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/mapper/vg01-lvol6
>
> command[check_sda4]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/mapper/vg01-lvol4
>
> command[check_sda5]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/mapper/vg01-lvol3
>
> command[check_sda6]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/mapper/vg01-lvol2
>
> command[check_sda7]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/sda7
>
> command[check_sda8]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/sda8
>
> command[check_sda9]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% 
> -p /dev/sda9
>
> command[check_sda10]=/usr/local/nagios/libexec/check_disk -w 15% -c 
> 10% -p /dev/sda10
>
> command[check_drbd0]=/usr/local/nagios/libexec/check_disk -w 15% -c 
> 10% -p /dev/drbd0
>
> command[check_drbd1]=/usr/local/nagios/libexec/check_disk -w 15% -c 
> 10% -p /dev/drbd1
>
> command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 2 
> -c 4 -s Z
>
> command[check_informix]=/usr/local/nagios/libexec/check_procs -c 1:50 
> -C oninit
>
> command[check_crond]=/usr/local/nagios/libexec/check_procs -c 1:50 -C 
> crond
>
> command[check_cupsd]=/usr/local/nagios/libexec/check_procs -c 1:50 -C 
> cupsd
>
> command[check_freemem]=/usr/local/nagios/libexec/check_mem.pl -w 10 -c 
> 5 -f
>
> command[check_swap]=/usr/local/nagios/libexec/check_swap -w 90% -c 80%
>
> command[check_bonding]=/usr/local/nagios/libexec/check_linux_bonding
>
> command[check_iozone]=/usr/local/nagios/libexec/check_temperature_hp.pl 
> -s1 -w80 -c85
>
> command[check_ambient]=/usr/local/nagios/libexec/check_temperature_hp.pl 
> -s2 -w80 -c85
>
> command[check_sensor1_cpu1]=/usr/local/nagios/libexec/check_temperature_hp.pl 
> -s3 -w80 -c85
>
> command[check_sensor2_cpu1]=/usr/local/nagios/libexec/check_temperature_hp.pl 
> -s4 -w80 -c85
>
> command[check_teste]=/usr/local/nagios/libexec/check_teste.pl -s 4 -w 
> 80 -c 85
>
> *_The Perl program:_*
>
> #! /usr/bin/perl -w
>
> # $Id: check_teste.pl
>
> use lib "/usr/local/nagios/libexec" ;
>
> # Tell Perl what we need to use
>
> use strict;
>
> use Getopt::Std;
>
> # Predefined exit codes for Nagios
>
> use vars qw($opt_s $opt_c $opt_f $opt_u $opt_w $opt_C $opt_v %exit_codes);
>
> #use vars qw($numero $descricao $tempatual $templimite $sensor);
>
> %exit_codes = ('UNKNOWN' ,-1,
>
> 'OK' , 0,
>
> 'WARNING' , 1,
>
> 'CRITICAL', 2,
>
> );
>
> # Get our variables, do our checking:
>
> init();
>
> get_temperature();
>
> # Show usage
>
> sub usage() {
>
> print "\ncheck_mem.pl v1.0 - Nagios Plugin\n\n";
>
> print "usage:\n";
>
> print " check_mem.pl -<f|u> -w <warnlevel> -c <critlevel>\n\n";
>
> print "options:\n";
>
> print " -f Check FREE memory\n";
>
> print " -u Check USED memory\n";
>
> print " -C Count OS caches as FREE memory\n";
>
> print " -w PERCENT Percent free/used when to warn\n";
>
> print " -c PERCENT Percent free/used when critical\n";
>
> print "\nCopyright (C) 2000 Dan Larsson <dl\@tyfon.net>\n";
>
> print "check_mem.pl comes with absolutely NO WARRANTY either implied 
> or explicit\n";
>
> print "This program is licensed under the terms of the\n";
>
> print "GNU General Public License (check source code for details)\n";
>
> exit $exit_codes{'UNKNOWN'};
>
> }
>
> #-----------------------------------------------------------------------------
>
> # Verifica parametros passados
>
> #-----------------------------------------------------------------------------
>
> sub init {
>
> # Get the options
>
> if ($#ARGV le 0) {
>
> &usage;
>
> }
>
> else {
>
> getopts('c:s:w:vh');
>
> }
>
> # Shortcircuit the switches
>
> if (!$opt_w or $opt_w == 0 or !$opt_c or $opt_c == 0) {
>
> print "*** You must define WARN and CRITICAL levels!\n";
>
> &usage;
>
> }
>
> elsif (!$opt_s) {
>
> print "*** You must select the SENSOR number!\n";
>
> &usage;
>
> }
>
> # Check if levels are sane
>
> if ($opt_w >= $opt_c) {
>
> print "*** WARN level must not be greather than CRITICAL!\n";
>
> &usage;
>
> }
>
> }
>
> #-----------------------------------------------------------------------------
>
> # Termina o programa enviando mensagem e postando RC
>
> #-----------------------------------------------------------------------------
>
> sub finish {
>
> my ($msg,$state) = @_;
>
> print "$msg\n";
>
> exit $state;
>
> }
>
> #-----------------------------------------------------------------------------
>
> # Checa a temperatura do sensor solicitado
>
> #-----------------------------------------------------------------------------
>
> sub get_temperature {
>
> my $numero=0;
>
> my $descricao=0;
>
> my $tempatual=0;
>
> my $templimite=0;
>
> my $sensor=0;
>
> my $command=0;
>
> $sensor = $opt_s;
>
> $command=sprintf("/usr/local/nagios/libexec/check_temp_atual.sh 
> %s",$sensor);
>
> $tempatual = `$command`;
>
> chomp($tempatual);
>
> $command=sprintf("/usr/local/nagios/libexec/check_temp_thre.sh 
> %s",$sensor);
>
> $templimite = `$command`;
>
> chomp($templimite);
>
> $numero = $opt_s;
>
> my $twarning = $templimite - ($templimite-($templimite * ($opt_w / 100)));
>
> my $tcritical =$templimite - ($templimite-($templimite * ($opt_c / 100)));
>
> if($tempatual < $twarning)
>
> {
>
> print STDOUT "OK: TEMPERATURA ATUAL: $tempatual C - THRESHOLD: 
> $templimite C\n";
>
> exit(0);
>
> }
>
> elsif($tempatual < $templimite)
>
> {
>
> print STDOUT "WARNING: TEMPERATURA ATUAL: $tempatual C - THRESHOLD: 
> $templimite C\n";
>
> exit(1);
>
> }
>
> else
>
> {
>
> print STDOUT "CRITICAL: TEMPERATURA ATUAL: $tempatual C - THRESHOLD: 
> $templimite C\n";
>
> exit(2);
>
> }
>
> }
>
> *If I execute the script directly from the command prompt:*
>
> [root at lnxaphmoa04 libexec]# /usr/local/nagios/libexec/check_teste.pl 
> -s4 -w80 -c85
>
> OK: TEMPERATURA ATUAL: 30 C - THRESHOLD: 127 C
>
> *If I execute the script calling through the check_nrpe command:*
>
> [root at lnxaphmoa04 libexec]# /usr/local/nagios/libexec/check_nrpe -H 
> localhost -c check_teste
>
> CRITICAL: TEMPERATURA ATUAL: C - THRESHOLD: C
>
> Thanks in advance.
>
> Regards,
>
Make sure your script have sudo permissions .

most system calls to hardware require root level access , so when the 
nrpe is running the script as nagios user , it is not executed properly 
and hence the output is not generated and rendered.


Assaf

-- 
Never,Ever Cut A Deal With a Dragon 


I am doing a Charity Bike ride On the 27 of June for the
Capital to Coast Charity. Please help by Donating
http://www.justgiving.com/Lovefilm-capital-to-coast



------------------------------------------------------------------------------

_______________________________________________
Nagios-users mailing list
Nagios-users at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nagios-users
::: Please include Nagios version, plugin version (-v) and OS when reporting any issue. 
::: Messages without supporting info will risk being sent to /dev/null





More information about the Users mailing list