I'm trying to configure my Nagios setup to automatically log a ticket in our ticketing system when a host goes down (PING service goes into a HARD CRITICAL state). I've got a script that will create tickets that runs successfully with 'sudo -u nagios'. I've got a command and event handler set up that executes when the host state fails, or at least appears to. However, the script associate with the command doesn't seem to be executing, or the logging I've added isn't working. Any ideas where to look next? The log file isn't created when the event handler is invoked.
command:
define command {
command_name make-ticket
command_line /etc/nagios/commands/make-ticket-wrapper "$SERVICESTATE$" "$SERVICESTATETYPE$" "$HOSTNAME" "$HOSTADDRESS$ "$HOSTSTATE" "$HOSTGROUPALIAS" "$SERVICEDESC"
}
example host and service
define host {
use generic-switch
host_name test
alias test
address 192.168.100.13
}
define service {
use generic-service
host_name test
service_description PING
check_command check_ping!200.0,20%!600.0,60%
normal_check_interval 5
retry_check_interval 1
event_handler make-ticket
}
wrapper script:
#!/bin/bash
#
# Cut a ticket
#
set -x
LOGFILE="/tmp/tickets.log"
touch $LOGFILE
echo Running make-ticket-wrapper `date` >> $LOGFILE
echo Params: $* >> $LOGFILE
TICKET="/etc/nagios/commands/make-ticket"
SERVICESTATE="$1"
SERVICESTATETYPE="$2"
HOSTNAME="$3"
HOSTADDRESS="$4"
HOSTSTATE="$5"
HOSTGROUPALIAS="$6"
SERVICEDESC="$7"
echo "SERVICESTATE=$SERVICESTATE" >> $LOGFILE
echo "SERVICESTATETYPE=$SERVICESTATETYPE" >> $LOGFILE
echo "HOSTNAME=$HOSTNAME" >> $LOGFILE
echo "HOSTADDRESS=$HOSTADDRESS" >> $LOGFILE
echo "HOSTSTATE=$HOSTSTATE" >> $LOGFILE
echo "HOSTGROUPALIAS=$HOSTGROUPALIAS" >> $LOGFILE
echo "SERVICEDESC=$SERVICEDESC" >> $LOGFILE
$TICKET "$SERVICESTATE" "$SERVICESTATETYPE" "$HOSTNAME" "$HOSTADDRESS" "$HOSTSTATE" "$HOSTGROUPALIAS" "$SERVICEDESC" 2>&1 | tee -a $LOGFILE
log:
[1422560163] HOST ALERT: test;DOWN;SOFT;1;(Host Check Timed Out)
[1422560253] HOST ALERT: test;DOWN;SOFT;2;(Host Check Timed Out)
[1422560353] HOST ALERT: test;DOWN;SOFT;3;(Host Check Timed Out)
[1422560433] SERVICE ALERT: test;PING;CRITICAL;HARD;1;PING CRITICAL - Packet loss = 100%
[1422560433] SERVICE EVENT HANDLER: test;PING;CRITICAL;HARD;1;make-ticket
Best Answer
command_line /etc/nagios/commands/make-ticket-wrapper "$SERVICESTATE$" "$SERVICESTATETYPE$" "$HOSTNAME" "$HOSTADDRESS$ "$HOSTSTATE" "$HOSTGROUPALIAS" "$SERVICEDESC"
You're missing a double quote after $HOSTADDRESS$, and missing a $ at the end of HOSTNAME, HOSTSTATE, HOSTGROUPALIAS, and SERVICEDESC.
When you miss a double quote, it screws up the rest of the line, causing the shell script to miss some arguments.
When you leave out the trailing dollar sign, Nagios doesn't substitute the macro, so it gets passed to the shell where it's resolved as an empty variable.