Script returns different result when ran locally versus nrpe

Support forum for Nagios Core, Nagios Plugins, NCPA, NRPE, NSCA, NDOUtils and more. Engage with the community of users including those using the open source solutions.
rickwilson7425
Posts: 125
Joined: Tue Mar 18, 2014 3:20 pm

Re: Script returns different result when ran locally versus

Post by rickwilson7425 »

Well, I've tried what combinations of switches for the echo command and escape sequences I could figure out.

My lack of in depth knowledge in scripting is probably keeping me from seeing the obvious.

Any help on this would be appreciated.
cmerchant
Posts: 546
Joined: Wed Sep 24, 2014 11:19 am

Re: Script returns different result when ran locally versus

Post by cmerchant »

If you use \n in the echo command, you need to use -e to interpret the \n as a newline.

Code: Select all

echo -e "this is a comment\n and a second line"

Code: Select all

this is a comment
 and a second line
rickwilson7425
Posts: 125
Joined: Tue Mar 18, 2014 3:20 pm

Re: Script returns different result when ran locally versus

Post by rickwilson7425 »

I tried doing the echo -e and placing a \n inside the quotes and outside and neither arrangement would make more than one line display in the Nagios GUI.
cmerchant
Posts: 546
Joined: Wed Sep 24, 2014 11:19 am

Re: Script returns different result when ran locally versus

Post by cmerchant »

I miss understood. You need to leave off the -e on the echo so that the \n does not get expanded until it gets to the GUI. Could you please post your updated script to see what you currently have? Thanks
rickwilson7425
Posts: 125
Joined: Tue Mar 18, 2014 3:20 pm

Re: Script returns different result when ran locally versus

Post by rickwilson7425 »

Code: Select all

#!/usr/bin/env bash

################# Check SENTINEL Port #################

HOSTNAME_REDIS=`hostname -s`
# Gather ports (default sentinel port is 26379)
# SEN_PORT=`grep -P '^port \d+' /etc/redis/rsentinel.conf || echo "port 26379" | cut -f2 -d' '`
# SEN_PORT=`grep -P '^port \d+' /etc/redis/rsentinel.conf | cut -f2 -d' '`
SEN_PORT=`grep -P '^port ' /etc/redis/rsentinel.conf | cut -f2 -d' '`
# SEN_PORT=`grep -w port /etc/redis/rsentinel.conf | cut -f2 -d' '`
  if [[ `/usr/local/bin/redis-cli -p $SEN_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is active and PONG was the response"
    echo "REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is OK \n"
  else
    # Failure
    echo "REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is not active and did not PONG"
    exit 1
  fi
  
################# Check MOBILE Port #################

if [[ `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_JDM` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_PWM` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_FDS` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_SYNC` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_REGISTRAR` ]];then

  MOBIL_PORT=`grep -P '^sentinel monitor MobileServices_Redis_Master ' /etc/redis/rsentinel.conf | cut -f5 -d' '`
  if [ -z $MOBIL_PORT ];then
    echo "MOBILE REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    exit 178
  fi
#  if [[ `redis-cli -p $MOBIL_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $MOBIL_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is active and PONG was the response"
    echo "REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is OK \n"
  else
    # Failure
    echo "REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is not active and did not PONG"
    exit 1
  fi
fi

################### Check NUXEO Port #################

if [[ `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/nuxeo-jdm-server` ]];then
#  NUXEO_PORT=`ls -1 /etc/redis/*.conf | cut -f1 -d' ' | grep -v $MOBIL_PORT`
#  NUXEO_PORT=`grep -P '^#sentinel monitor Nuxeo_Redis_Master ' /etc/redis/rsentinel.conf | cut -f5 -d' '`
  NUXEO_PORT=`grep -w Nuxeo_Redis_Master /etc/redis/rsentinel.conf | cut -f5 -d' '`
  if [ -z $NUXEO_PORT ];then
    echo "NUXEO REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    exit 178
  fi
#  if [[ `redis-cli -p $NUXEO_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $NUXEO_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is active and PONG was the response"
    echo "REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is OK \n"
  else
    # Failure
    echo "REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is not active and did not PONG"
    exit 1
  fi
fi
cmerchant
Posts: 546
Joined: Wed Sep 24, 2014 11:19 am

Re: Script returns different result when ran locally versus

Post by cmerchant »

We'll look into it further. I think the suggestion sreinhardt originally had would be a better solution.
Re: Script returns different result when ran locally versus

Post by sreinhardt » Wed Oct 29, 2014 4:36 pm
You need to use a \n in your output to nagios, not an actual newline or second echo. Using \n will be replaced internally with a newline for pretty output but will not cause Core to think the second line is intended as long output. You will probably want to store your results in a variable and do a single echo at the end instead of multiple echos.
rickwilson7425
Posts: 125
Joined: Tue Mar 18, 2014 3:20 pm

Re: Script returns different result when ran locally versus

Post by rickwilson7425 »

Thank you for your help.

I am researching and studying on how to dump the individual echos into variable(s) and then string them together (concatenate?).

Scripting is not one of my strong suits.
cmerchant
Posts: 546
Joined: Wed Sep 24, 2014 11:19 am

Re: Script returns different result when ran locally versus

Post by cmerchant »

concatenating the echo's is probably the wrong way to go. We will look at your script and suggest changes to make this work. Thanks.
rickwilson7425
Posts: 125
Joined: Tue Mar 18, 2014 3:20 pm

Re: Script returns different result when ran locally versus

Post by rickwilson7425 »

This is what I have come up with so far but it isn't displaying in the GUI properly either.

It does give me the proper return messages however:

Code: Select all

#!/bin/bash

################# Check SENTINEL Port #################

HOSTNAME_REDIS=`hostname -s`
# Gather ports (default sentinel port is 26379)
# SEN_PORT=`grep -P '^port \d+' /etc/redis/rsentinel.conf | cut -f2 -d' '`
# SEN_PORT=`grep -w port /etc/redis/rsentinel.conf | cut -f2 -d' '`
SEN_PORT=`grep -P '^port ' /etc/redis/rsentinel.conf | cut -f2 -d' '`
#  if [[ `redis-cli -p $SEN_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $SEN_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is OK"
     sen_return="REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is OK"
  else
    # Failure
#    echo "REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
     sen_return="REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
    exit 1
  fi
  
################# Check MOBILE Port #################

if [[ `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_JDM` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_PWM` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_FDS` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_SYNC` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_REGISTRAR` ]];then

  MOBIL_PORT=`grep -P '^sentinel monitor MobileServices_Redis_Master ' /etc/redis/rsentinel.conf | cut -f5 -d' '`
  if [ -z $MOBIL_PORT ];then
    echo "MOBILE REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    exit 178
  fi
#  if [[ `redis-cli -p $MOBIL_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $MOBIL_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is OK"
     mobil_return="REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is OK"
  else
    # Failure
#    echo "REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
     mobil_return="REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
    exit 1
  fi
fi

################### Check NUXEO Port #################

if [[ `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/nuxeo-jdm-server` ]];then
#  NUXEO_PORT=`ls -1 /etc/redis/*.conf | cut -f1 -d' ' | grep -v $MOBIL_PORT`
#  NUXEO_PORT=`grep -P '^#sentinel monitor Nuxeo_Redis_Master ' /etc/redis/rsentinel.conf | cut -f5 -d' '`
  NUXEO_PORT=`grep -w Nuxeo_Redis_Master /etc/redis/rsentinel.conf | cut -f5 -d' '`
  if [ -z $NUXEO_PORT ];then
    echo "NUXEO REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    exit 178
  fi
#  if [[ `redis-cli -p $NUXEO_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $NUXEO_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is OK"
     nuxeo_return="REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is OK"
  else
    # Failure
#    echo "REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
     nuxeo_return="REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
    exit 1
  fi
  echo "$SEN_RETURN \
        >>$MOBIL_RETURN \
        >>$NUXEO_RETURN"
fi
rickwilson7425
Posts: 125
Joined: Tue Mar 18, 2014 3:20 pm

Re: Script returns different result when ran locally versus

Post by rickwilson7425 »

One of my coworkers got the display working more or less properly. Here is how he modified the script:

Code: Select all

#!/bin/bash

################# Check SENTINEL Port #################

# Clint adds to make a single return option
sen_return=''
mobil_return=''
nuxeo_return=''
error_return=''
final_response_string=''

HOSTNAME_REDIS=`hostname -s`
# Gather ports (default sentinel port is 26379)
# SEN_PORT=`grep -P '^port \d+' /etc/redis/rsentinel.conf | cut -f2 -d' '`
# SEN_PORT=`grep -w port /etc/redis/rsentinel.conf | cut -f2 -d' '`
SEN_PORT=`grep -P '^port ' /etc/redis/rsentinel.conf | cut -f2 -d' '`
#  if [[ `redis-cli -p $SEN_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $SEN_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is OK"
     sen_return="REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is OK"
  else
    # Failure
#    echo "REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
     sen_return="REDIS Sentinel port $SEN_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
    exit 1
  fi
  
################# Check MOBILE Port #################

if [[ `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_JDM` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_PWM` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_FDS` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_SYNC` \
   || `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/Tomcat_REGISTRAR` ]];then

  MOBIL_PORT=`grep -P '^sentinel monitor MobileServices_Redis_Master ' /etc/redis/rsentinel.conf | cut -f5 -d' '`
  if [ -z $MOBIL_PORT ];then
#    echo "MOBILE REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    error_return="MOBILE REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    exit 178
  fi
#  if [[ `redis-cli -p $MOBIL_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $MOBIL_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is OK"
     mobil_return="REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is OK"
  else
    # Failure
#    echo "REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
     mobil_return="REDIS Mobile port $MOBIL_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
    exit 1
  fi
fi

################### Check NUXEO Port #################

if [[ `find /apps/opt -maxdepth 1 -type d | grep /apps/opt/nuxeo-jdm-server` ]];then
#  NUXEO_PORT=`ls -1 /etc/redis/*.conf | cut -f1 -d' ' | grep -v $MOBIL_PORT`
#  NUXEO_PORT=`grep -P '^#sentinel monitor Nuxeo_Redis_Master ' /etc/redis/rsentinel.conf | cut -f5 -d' '`
  NUXEO_PORT=`grep -w Nuxeo_Redis_Master /etc/redis/rsentinel.conf | cut -f5 -d' '`
  if [ -z $NUXEO_PORT ];then
#    echo "NUXEO REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    error_return="NUXEO REDIS NOT DEFINED IN SENTINEL. WARNING MR. ROBINSON"
    exit 178
  fi
#  if [[ `redis-cli -p $NUXEO_PORT PING | grep 'PONG' 2>&1 >/dev/null` ]];then
  if [[ `/usr/local/bin/redis-cli -p $NUXEO_PORT PING | grep 'PONG'` ]];then
    # Success
#    echo "REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is OK"
     nuxeo_return="REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is OK"
  else
    # Failure
#    echo "REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
     nuxeo_return="REDIS Nuxeo port $NUXEO_PORT on $HOSTNAME_REDIS is not active and FAILED!!"
    exit 1
  fi
#  echo -e "$SEN_RETURN>>\n$MOBIL_RETURN>>\n$NUXEO_RETURN"
#  printf '%b\n%b\n%b\n' "$SEN_RETURN" "\n$MOBIL_RETURN" "\n$NUXEO_RETURN"
final_response_string="$sen_return $mobil_return $nuxeo_return $error_return"

printf '%s' "$final_response_string"

fi
There is only a slight formatting problem in the output - the 3rd line actually starts at the end of the second line and then continues on the 3rd line.

[img]dencita1
Perform Extra Host Actions View Extra Host Notes Linux

Check Redis
Perform Extra Service Actions View Extra Service Notes
OK 08:56:11 5d 20h 28m 36s 1/3 REDIS Sentinel port 16379 on dencita1 is OK
REDIS Mobile port 6380 on dencita1 is OK REDIS
Nuxeo port 6379 on dencita1 is OK [/img]
Locked