Nagios通過MSN/飛信發送報警通知
Nagios通過MSN/飛信發送報警通知
1、msn報警
先在這里網上下載***的msn類文件,這個下載后其實是一套完整的msnbot的php程序,我們這里只是使用了其中的msn.class.php這個文件。
遵循nagios的標準結構,程序文件都會放在/usr/local/nagios/libexec文件夾下,所以我在此文件夾下創建phpmsnclass文件夾,將msn.class.php文件放置其中,并在此目錄下創建用于發送msn報警的php程序,內容如下。
- # cat sendmsnmsg.php
- #!/usr/local/php529/bin/php -q
- include_once('msn.class.php');
- $msn_username ='YOUR_MSN_ID'; //消息發送人的msn帳號
- $msn_password = "yourpassword"; //消息發送人msn密碼
- $msn_list = array('somebody1@hotmail.com','somebody2@hotmail.com'); //消息接收人msn地址,這里可選,因為會使用nagios傳遞過來的地址
- $fp=fopen('/tmp/tmp/1','r'); //1這個文件是消息發送的內容,這個文件由nagios自動生成,路徑根據自己實際自行修改
- $file="";
- while (! feof($fp)){
- $cont=fgets($fp);
- $file=$file.$cont; //拼接報警消息內容
- }
- $msn =new MSN('MSNP15'); //采用MSNP15協議,支持離線消息
- if (!$msn->connect($msn_username,$msn_password)) {
- echo "Error for connect to MSN networkn";
- echo "$msn->errorn";
- exit;
- }
- else {
- $msn->sendMessage("$file",$argv[1]); //將$file內容發送給$argv[1]傳遞進來的msn消息接收者。
- }
- fclose($fp);
- ?>
將此文件設置可執行權限,就可以進行測試了,首先在1文件中放入些內容比如
- # cat 1
- this is a test by wenzizone.cn
然后執行
- ./sendmsnmsg.php somebody@hotmail.com //后面跟的這個是接收人msn地址
可以看到下圖:

說明msn發送是正常的。
2、飛信報警
首先到網上下載飛信的php寫的api接口,解壓后,同樣在/usr/local/nagios/libexec創建phpfetion目錄,將class_fetion.php放到此目錄下,然后創建發送短信的php程序,如下
- #!/usr/local/php529/bin/php -q
- include_once('class_fetion.php');
- $sms_username = "1381126xxxx"; //飛信帳號
- $sms_password = "your password"; //飛信密碼
- $fp=fopen('/tmp/tmp/1','r'); //同msn內容
- $file="";
- while (! feof($fp)){
- $cont=fgets($fp);
- $file=$file.$cont;
- }
- $fetion = new fetion($sms_username,$sms_password);
- $fetion->init() or die("fetion init failure!n");
- $fetion->sent_sms('tel:'.$argv[1],$file); //根據傳送進來的電話發送報警內容
- fclose($fp);
- ?>
分配sendsms.php可執行權限,然后進行測試,執行
- ./sendsms.php 13810xxxxxx //后面這個是接受消息的手機號
用不了多一會就會收到消息,消息內容和msn那條一樣,因為我們的測試內容不變。
3、和nagios的結合使用
首先編輯command.cfg文件,添加新的如下內容
- # 'notify-host-by-msn' command definition
- define command{
- command_name notify-host-by-msn
- command_line /usr/bin/printf "%b" "***** Nagios *****nNotification Type: $NOTIFICATIONTYPE$nHost: $HOSTNAME$nState: $HOSTSTATE$nIP: $HOSTADDRESS$nInfo: HOSTOUTPUT$nDate/Time: $LONGDATETIME$n" >/tmp/tmp/1 | $USER$/phpmsnclass/sendmsnmsg.php $CONTACTEMAIL$
- }
- # 'notify-host-by-fetion' command definition
- define command{
- command_name notify-host-by-fetion
- command_line /usr/bin/printf "%b" "***** Nagios *****nNotification Type: $NOTIFICATIONTYPE$nHost: $HOSTNAME$nState: $HOST
- STATE$nIP: $HOSTADDRESS$nInfo: $HOSTOUTPUT$nDate/Time: $LONGDATETIME$n" >/tmp/tmp/1 | $USER1$/phpfetion/sendsms.php $CONTACTPAGER$
- }
然后修改contacts.cfg文件,如下
- define contact{
- contact_name nagiosadmin
- alias Nagios Admin
- email http://www.wenzizone.cn/
- pager 13810xxxxxx
- host_notification_commands notify-host-by-msn
- host_notification_options d,u
- host_notification_period 24x7
- host_notifications_enabled 1
- service_notifications_enabled 1
- service_notification_period 24x7
- service_notification_options w,u,r
- service_notification_commands notify-service-by-msn
- }
- define contact{
- contact_name nagiosadmin01
- alias Nagios Admin
- email http://www.wenzizone.cn/
- pager 13810xxxxxx
- host_notification_command snotify-host-by-fetion
- host_notification_options d,u
- host_notification_period 24x7
- host_notifications_enabled 1
- service_notifications_enabled 1
- service_notification_period 24x7
- service_notification_options w,u,r
- service_notification_commands notify-service-by-fetion
- }
接下來再host或者service上填上對應的contact然后就可以隨時收到相應的報警了。
蚊子在這兩天的測試用發現,飛信報警的送達率還是很高的,基本是每條都能收到,但是msn的送達率就令人擔憂了,我發送10個能收到一個就算不錯了,所以還請根據自己測試情況酌情考慮。
另外一點需要注意的是msn或者飛信發送報警,接收人都必須是發送人msn或飛信的好友才行,不然是不能送達的。以上就是Nagios通過MSN/飛信發送報警通知。
【編輯推薦】