使用Centos系统自带的sendmail服务作为客户端,使用第三方SMTP服务发送邮件报警。

此功能是在nagios服务正常安装运行的基础上实现的;因此要先安装好基本的nagios运行环境,这个可以参考本人相关的博文。


1.软件检测及安装

#rpm -q sendmail

若不存在则安装

#yum -y install sendmail


2.停止sendmail服务

这里不需要sendmail作为邮件服务端来运行,所以关闭sendmail服务。

#service sendmail stop


3.配置sendmail服务

配置发送邮件的邮箱认证信息

1)普通邮箱非TSL加密协议(25端口)

vi /etc/mail.rc 

--- 增加如下内容 ---

set from="[email protected]"               -->收件人显示的发件人名称

set smtp="smtp.xxx.com"                          -->外部邮箱服务器地址

set smtp-auth-user="MailName"              -->邮箱地址

set smtp-auth-password="yourpasswd"   -->邮箱密码

set smtp-auth=login



2)TSL加密协议(465端口)

可能有时外网防火墙禁止25端口,可以使用TSL加密协议的邮箱(465端口)

set from="[email protected]"               -->收件人显示的发件人名称

set smtp="smtps://smtp.xxx.com:465"      -->外部邮箱服务器地址

set smtp-auth-user="MailName"              -->邮箱地址

set smtp-auth-password="yourpasswd"   -->邮箱密码

set smtp-auth=login

set ssl-verify=ignore                                  -->忽略ssl

set nss-config-dir=/etc/pki/nssdb            -->邮件证书

证书配置,请自行百度。



4.测试发送邮件功能

格式:echo "邮件内容" | mail -s "邮件标题" 目标邮件地址

echo "hello word" | mail -s "mail title" [email protected]


5.配置nagios邮件发送命令

修改nagios命令配置文件

#vim nagios/etc/object/command.cfg

#notify-host-by-email命令的定义 

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" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$

        }


#notify-service-by-email命令的定义 

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$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$

        }

注:命令是在一行上的,这里排版问题被分成了多行.


接着修改nagios中定义的主机和服务的报警机制,实现nagios利用邮件自动报警。



鸣谢:本人参考了多篇文章后总结而得,在此感谢各位网络分享者!