想实现nagios短信报警的方式有很多,例如安装飞信机器人、或者装个短信猫。但是这些方式会因为联通、移动号码问题或者短信猫信号问题,存在着缺陷。后来移动的139邮箱具备了短信提醒的功能、联通的手机邮箱也有了这个功能(不用不知道,一用方知联通纯粹瞎胡闹!邮箱确实很差劲。感慨发到这儿!)。许多管理员纷纷采用了这个省事且可靠的途径实现短信报警。

    但问题也随之而来,nagios发送报警邮件的功能是通过使用本地mail模块进行邮件发送的。所以其发送效率及可靠程度可想而知。而且随着各大运营商对垃圾邮件防范水平的提高,经常出现报警邮件被误识别为垃圾邮件的事情。并且这种问题是通过邮箱设置白名单解决不了的。为了解决这个问题,有的人采用了修改commands.cfg文件中mail发送命令来定义一个伪装的地址,或者使用sendmail模块来发送。但我觉得相比较来说还是使用mutt结合msmtp来是发送报警邮件效率最高。并且可以使用真实的邮箱发送报警邮件,提高了邮件发送的效率,减小了垃圾邮件的误判率。

     至于如何设置mutt及msmtp使用163、yahoo等邮箱发送邮件。这里就不在叙述,网上有太多太多了。我这里仅把,nagios上mail部分的配置提供给大家做参考。

 

 
  
  1. # 'notify-host-by-email' command definition 
  2. define command{ 
  3.         command_name notify-host-by-email 
  4.         command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState:$HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" |mutt -s "** $NOTIFICATIONTYPE$ alert $HOSTNAME$ is $HOSTSTATE$ **"  $CONTACTEMAIL$ 
  5. # 'notify-service-by-email' command definition 
  6. define command{ 
  7.         command_name notify-service-by-email 
  8.         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 \nInfo:$SERVICEOUTPUT$\n"|mutt -s "** $NOTIFICATIONTYPE$ alert $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ 

     

    配置完成后,可以使用nagios网页的发送测试邮件功能检验一下。如果需要接受报警邮件的人很多,可以在contacts.cfg、contactgroups.cfg上添加需要的账号。