One of the most important feature of Nagios is the notification system; by default Nagios will use the local mail daemon (mail) to send all the notifications.
Maybe this kind of system was working fine in past, but today, with this huge amount of spam circulating all over the world, this kind of emails from a not verified source can be filtered by the same company antispam system.
In order to avoid this issue I will explain how to configure Nagios using an external smtp server also with smtp authentication.
Since the Nagios notification event is still a triggered command, we have to download an alternative command line email client.
I suggest the powerful “sendemail” command,
Once the install sendemail:
apt-get install sendemail
In order to troubleshoot any eventual problem, please use the following workaround to create and give the necessary authorization to write in the sendemail log file:
touch /var/log/sendemail
chmod 666 /var/log/sendemail
(remember, by default, Nagios does not start with full administrative rights, so command sent by Nagios too)
Now we need to set some variables that we need to recall later depending on your particular environment and smtp configuration:
So edit the resource.cfg file and add the following lines with your particular smtp configuration:
vi /usr/local/nagios/etc/resource.cfg
[email protected] $USER7$=smtp.server.com
#If you don’t use smtp authentication skip this variables and use the version B) of commands.cfg
$USER9$=authsmtpusername $USER10$=authsmtpassword
Save and exit
First perform a backup of the config file:
cd /usr/local/nagios/etc/objects/ cp commands.cfg commands.cfg.old
Edit the commands.cfg file and you will find two commands:
‘notify-host-by-email‘ and ‘notify-service-by-email‘
A) SMTP AUTHENTICATION COMMANDS
Now, if you use SMTP authentication replace the two commands with the following:
vi /usr/local/nagios/etc/objects/commands.cfg
# 'notify-host-by-email' command definition define command{ command_name notify-host-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -s $USER7$ -xu $USER9$ -xp $USER10$ -t $CONTACTEMAIL$ -f $USER5$ -l /var/log/sendemail -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -m "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/sendemail -s $USER7$ -xu $USER9$ -xp $USER10$ -t $CONTACTEMAIL$ -f $USER5$ -l /var/log/sendemail -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -m "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" }
B) NO SMTP-AUTHENTICATION
This is pretty much the same but without passing the authentication triggers to sendemail:
# 'notify-host-by-email' command definition 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$ \ -l /var/log/sendemail \ -f $USER5$ \ -t $CONTACTEMAIL$ \ -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" } # 'notify-service-by-email' command definition 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$ \ -l /var/log/sendemail \ -f $USER5$ \ -t $CONTACTEMAIL$ \ -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" }
Now the configuration is finished. Anyway, before applying the new configuration, run the following command to check for any error or mistake:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
or
/etc/init.d/nagios configtest
If there are no errors, restart the nagios service:
/etc/init.d/nagios restart
To troubleshoot the sendemail command run the following to check in the log file:
tail -f /var/log/sendemail
Hope this post will be useful to you.