Nagios達到閾值時發不出告警郵件問題總結
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$
}
好了,如果像這樣都定義好了,發郵件應該就沒問題了。