Nagios 达到阈值时 ,不发告警邮件问题总结:
1、首先检查nrpe或定义service时,阈值有没有定义正确
2、下面这一点很重要,就是检查 /etc/hosts中是不是这样的形式写的:
192.168.80.12 主机名 主机名.com (这里的”主机名.com“其实就是指的domain name)
例如我的: 192.168.80.12 compute2 compute2.com
不然/var/log/mail.log日志会报”May 23 15:40:01 compute2 sm-msp-queue[11606]: My unqualified host name (test-compute2) unknown; sleeping for retry
May 23 15:40:01 compute2 sendmail[11385]: unable to qualify my own domain name (test- compute2) -- using short name“ 就是找不到domain name的原因
3、先手动测试,如果执行:
mail -s ”this is a test mail“ zhao.wei@eisoo.com
可以正常收到,说明mail命令是没有问题的
小说明:
mail.log日志报错解决方法:
① 报”May 23 15:40:01 compute2 sm-msp-queue[11606]: My unqualified host name (test-compute2) unknown; sleeping for retry
May 23 15:40:01 compute2 sendmail[11385]: unable to qualify my own domain name (test- compute2) -- using short name“
这个说明 /etc/hosts中没有定义domain name ,我的domain name 就是” compute2.com “
所以要在 /etc/hosts中定义domain name
② 报”May 25 12:06:01 compute2 sendmail[14133]: q4P4614o014133: to=hao.chuang@eisoo.com, ctladdr=nagios (1002/1002), delay=00:00:00, xdelay=00:00:0
0, mailer=relay, pri=30501, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (q4P461QV014134 Message accepted for delivery)“
这个说明邮件消息已经发向邮件
服务器了(
stat=Sent),但是收件人并没有收到,可能没有解析到,所以是
DNS的问题,我就在这里耽误了好长时间,后来才知道。
因为可能大多人在/etc/resolv.conf中定义的都是公司内部使用的DNS,如192.168.1.1 ,可能在解析时会出问题,后来我使用公网上的一个 DNS 地址202.96.209.5,终于可以收到邮件了。
所以正常mail 日志应该是
”May 25 12:52:57 compute2 sm-mta[20290]: q4P461vk014150: to=<zhao.wei@eisoo.com>, delay=00:46:56, xdelay=00:00:02, mailer=esmtp, pri=300729, r
elay=mx2.qiye.163.com. [123.125.50.214], dsn=2.0.0, stat=Sent (Mail OK queued as mx4,QNOowEDJq0opEL9Ptv0SAA--.4314S2 1337921579)“
4、最后就是在commond中定义发告警邮件的commond line :
host 主机告警commond:
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTAT
E$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n"
| /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAM
E$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
service主机告警commond:
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $H
OSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
好了,如果像这样都定义好了,发邮件应该就没问题了。