Posta Nagioshändelser på IRC

Okej, IRC kanske inte är världens mest moderna protokoll. Trots sin ålder och sina konkurrenter så används det fortfarande som backend i många applikationer. Dessutom är det faktiskt ett oerhört bra verktyg när man jobbar i grupp.

Jag fick i uppdrag att göra så att en Nagios-server skickar notifieringar på en IRC-kanal. Det ska vara nya händelser och problem som inträffar som skickas ut. Det finns idag något som heter nagircbot, men den skickar bara ut aktuell status för massor av tjänster vid givna tidpunkter. Alltså, inte löpande nya händelser.

Lösningen fick bli att göra en enkel Nagios-notifier och med hjälp av den lilla IRC-klienten ii.

Ett enkelt script som jag kallar by-irc.sh:

#!/bin/bash

DIR="/etc/nagios3/irc"
HOST="irc.example.com"
CHANNEL="#nagios"

# check if already running
if [ ! -e "${DIR}/${HOST}/${CHANNEL}/in" ]; then
    killall ii
    sleep 5
    nohup su nagios -c "ii -i ${DIR} -s ${HOST} -n nagios-bot" &
    sleep 5
    #echo "/j ${CHANNEL}  ${DIR}/${HOST}/in"
    echo -e "/j ${CHANNEL}" > ${DIR}/${HOST}/in
fi

#echo $*
echo -e "$*" > ${DIR}/${HOST}/${CHANNEL}/in

Du anropar scriptet med det meddelande som du vill ha postat på kanalen. Om klienten inte är ansluten så görs det och sedan ligger den kvar i minnet och är inloggad på kanalen.

I Nagios får man sedan göra ett kommando, som t.ex:

define command{
   command_name    notify-service-by-irc
   command_line    /etc/nagios3/by-irc.sh "$SERVICESTATE$ $HOSTALIAS$ $HOSTADDRESS$ $SERVICEDESC$ $SHORTDATETIME$"                                 
}

För att få Nagios att använda notify-service-by-irc, så måste man koppla den till en konakt.