CentOS中Nagios用第三方SMTP郵件服務實現告警之Exchange

最近一直在研究Nagios,我們公司屬於純windows環境,在這樣的環境中弄個這樣的“另類”還着實費了我一點精力啊。

首先,我們現有的環境中已經有了Exchange的郵件服務,按照網上無數部署教程的說法均是說要用sendmail,google了一下sendmail,覺得完全沒這個必要啊,我們已經有郵件服務器了,現需要的實現的僅是:用已有的郵件服務平臺來發告警。沒必要高那麼複雜,而且架一臺郵件服務器的複雜程度是怎麼樣的,搞過的人都知道:覺得不會再愛了。


於是,從檢查Nagios的配置文件開始,細節是魔鬼:

我的環境:CentOS 6.4+Nagios3.x+Exchange2007

1、首先檢查nagios的郵件發送指令:

[root@pcnnagios objects]# pwd
/usr/local/nagios/etc/objects
[root@pcnnagios objects]# vi commands.cfg
# 'notify-host-by-email' command definition
*****以上省略N行******
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' 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$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
*****以下省略N行******


2、發現一點蹊蹺,貌似nagios默認用的是這個東東在發郵件:/bin/mai -s ……

3、拉出來看看

[root@pcnnagios objects]# ll /bin/mail
lrwxrwxrwx. 1 root root 5 5月   6 17:45 /bin/mail -> mailx

4、原來如此,用的是叫做mailx的這個郵件發送程序:

[root@pcnnagios objects]# mailx -h
mailx: option requires an argument -- h
Usage: mailx -eiIUdEFntBDNHRV~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users

5、結合man和google,發現該程序的配置文件是這個:/etc/mail.rc。在這個文添加上我們環境中的SMTP服務信息:

………………以上省略N行………………
#Set MyCompany's SMTP server
set [email protected]
set smtp=10.40.1.36
#set smtp-auth-user=nagios
#set smtp-auth-password=123.abc
#set smtp-auth=login

測試一下:echo hello | mailx -v -s "test" [youremaiaddress]

6、注意:我們的公司的SMTP服務器上設定的是不需要任何帳號認證就可提供郵件服務,若此處強制提供的話會報錯:

250-SIZE
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS
250-AUTH NTLM
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XRDST
>>> AUTH LOGIN
504 5.7.4 Unrecognized authentication type
smtp-server: 504 5.7.4 Unrecognized authentication type
"/root/dead.letter" 11/307
. . . message not sent.

註釋掉帳號信息後再測試:

Resolving host 10.40.1.36 . . . done.
Connecting to 10.40.1.36 . . . connected.
220 [email protected] Microsoft ESMTP MAIL Service ready at Tue, 4 Jun 2013 17:29                                                              :18 +0800
>>> HELO nagiosServer
250 MailServerName Hello [10.40.1.115]
>>> MAIL FROM:<nagiosServer>
250 2.1.0 Sender OK
>>> RCPT TO:<YourEmailAddress>
250 2.1.5 Recipient OK
>>> DATA
354 Start mail input; end with <CRLF>.<CRLF>
>>> .
250 2.6.0 <51adb36e.mTIO0bjlR9KKEMWV%nagiosServer> Queued mail for delivery
>>> QUIT
221 2.0.0 Service closing transmission channel



OK,outlook中已經收到來信了!

7、最後到nagios中停止/打開一個服務試試,OK沒問題!


補充:我的mailx版本是


[root@pcnnagios objects]# mailx -V
12.4 7/29/08



這樣,不僅僅是在nagios中,在日工作中的其他任何程序或腳本中要啓用郵件告警功能時,均可直接調用mailx指令進行發送告警郵件了,很方便的說!當然,前提是你的環境中要有現成的郵件服務器了,不過沒有也沒關係,用第三方比若163、qq、yahoo等也可以,只有設定正確的SMTP服務地址和認證帳號就可以了。


另,參考資料來源:http://www.cnblogs.com/xiaoshi1991/archive/2012/09/19/2694465.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章