Direct SMTP Nagios Notifications
If you want nagios email notifications but don’t want to run a local MTA (like postfix, exim, qmail, or sendmail), you’ll need a command-line SMTP client. Such a program can connect to an SMTP server, authenticate, and generate a message based on input arguments and file handles. One such program is sendEmail (note, not “sendmail”).
I found myself wanting to use sendEmail with nagios, and I found these helpful resources:
I made some changes and came up with these instructions which show using nagios hosted on an ubuntu machine notifying via sendemail through a gmail account:
- Create the gmail account
- On your server (Ubuntu in this case) run:
sudo apt-get install sendemail
(you can use the installation instructions on the sendEmail website if you aren’t on ubuntu or debian) Edit
/etc/nagios3/resource.cfg
, adding these lines (using your account info instead of the example account info below):# The "from address" for notifications $USER5$=example@gmail.com # The SMTP server $USER7$=smtp.gmail.com # the SMTP authentication username and password $USER9$=example@gmail.com $USER10$=examplepassword
Add these commands to
/etc/nagios3/commands.cfg
:# Lots of line-continuation characters are used in these next two commands # for improved readability. # If you change the number of arguments to printf, make sure you change the # corresponding number of "%b"s in the first argument define command{ command_name notify-host-by-email command_line /usr/bin/printf "%b%b%b%b%b%b%b" \ "***** Nagios *****\n\n" \ "Notification Type: $NOTIFICATIONTYPE$\n" \ "Host: $HOSTNAME$\n" \ "State: $HOSTSTATE$\n" \ "Address: $HOSTADDRESS$\n" \ "Info: $HOSTOUTPUT$\n\n" \ "Date/Time: $LONGDATETIME$\n" \ | /usr/bin/sendemail -s $USER7$ -xu $USER9$ -xp $USER10$ \ -l /var/log/sendemail \ -f $USER5$ \ -t $CONTACTEMAIL$ \ -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" } define command{ command_name notify-service-by-email command_line /usr/bin/printf "%b%b%b%b%b%b%b%b%b" \ "***** Nagios *****\n\n" \ "Notification Type: $NOTIFICATIONTYPE$\n\n" \ "Service: $SERVICEDESC$\n" \ "Host: $HOSTALIAS$\n" \ "Address: $HOSTADDRESS$\n" \ "State: $SERVICESTATE$\n\n" \ "Date/Time: $LONGDATETIME$\n\n" \ "Additional Info:\n\n" \ "$SERVICEOUTPUT$" \ | /usr/bin/sendemail -s $USER7$ -xu $USER9$ -xp $USER10$ \ -l /var/log/sendemail \ -f $USER5$ \ -t $CONTACTEMAIL$ \ -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" }
Comment-out the old definitions of “notify-host-by-email” and “notify-service-by-email”
Create the log file with:
touch /var/log/sendemail
andchown nagios /var/log/sendemail
Restart nagios, possibly with
service nagios3 restart