最近一直在研究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