【描述】

网上有很多提示cacti的短信报警,主要有用飞信或者是通过邮件,使用139邮箱之类,本文修改cacti的源码来实现短信报警机制。实现方式很简单,通过触发URL来实现手机短信报警(有自己的短信接口)。

【实现方式】

软件安装

CactiStable : 0.8.7g
SpineStable : 0.8.7g
Plugin ArchitectureStable : 2.8
Monitor    : 0.8.2
Settings    : 0.5
Thold    : 0.4.3

第一步:打开plugins\settings\setup.php

修改:

  1. $tabs['mail'] = 'Mail / Mobile';  

在$temp数组下增加如下代码:

  1. "settings_mobile_header" => array(  
  2.     "friendly_name" => "Mobile Options",  
  3.     "method" => "spacer",  
  4.     ),  
  5. "settings_mobile_number" => array(  
  6.     "friendly_name" => "Mobile Number",  
  7.     "description" => "This is the China Mobile Number that the dead host notifications will be sent to.",  
  8.     "method" => "textbox",  
  9.     "max_length" => 255,  
  10.     ), 
到此setup.php修改完成,打开web 界面可以看到如下:


支持多个号码,号码之间用英文逗号分隔

第二步:将内容发送到手机上,具体操作如下:

打开plugins\thold\thold_functions.php

修改thold_mail 这个函数,大约在1350行,在下面这段代码前加入以下代码

  1. if ($Mailer->send($text) == false) {  
  2.       print 'ERROR: ' . $Mailer->error() . "\n";  
  3.       return $Mailer->error();  
  4. }  
  5.    
  6. return ''
加入的代码为:
  1. //发送短信  (2011-07-26)  
  2. preg_match("/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}/",$subject,$ip);  
  3. preg_match('/-(.*)]/',$subject,$content);  
  4. $flag = stristr($subject,'normal');  
  5. $content = str_replace('-','',str_replace('','',$content[0]));  
  6. if ($flag) {  
  7.     $content = $ip[0] . $content . ' is OK:' . strip_tags($message);  
  8. else {  
  9.     $content = $ip[0] . $content . ' has problem:' . strip_tags($message);  
  10. }  
  11. thold_mms($content); 
将发送到手机上的短信内容做了处理。大家可以根据自己的实际情况做修改
这下面最主要的就是thold_mms这个函数了,将这个函数添加到thold_mail 函数下
代码如下:
  1. /* sms */ 
  2. function thold_sms($content) {  
  3.     $number = db_fetch_row("SELECT value FROM settings WHERE name = 'settings_mobile_number'");  
  4.     $mobile_string = $number['value'];  
  5.     $mms_content = iconv("UTF-8","GB2312",$content);  
  6.     $API_Endpoint="http://api.mysmsurl.com/s.aspx";  
  7.     $nvpStr ="n=".$mobile_string."&m=".urlencode($mms_content);  
  8.     $ch = curl_init();  
  9.     curl_setopt($ch, CURLOPT_URL,$API_Endpoint);  
  10.     curl_setopt($ch, CURLOPT_VERBOSE, 1);  
  11.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  
  12.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  
  13.     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
  14.     curl_setopt($ch, CURLOPT_POST, 1);  
  15.     curl_setopt($ch,CURLOPT_POSTFIELDS,$nvpStr);  
  16.     $response = curl_exec($ch);  
  17.     if(curl_errno($ch)){  
  18.         $curl_error_no >=curl_errno($ch) ;  
  19.         $curl_error_msg>=curl_error($ch);  
  20.     }else{  
  21.         curl_close($ch);  
  22.     }  
  23.     return $response;  
此文章由 flyinweb 于 2011-07-28 17:11:29 编辑

本日志由 flyinweb 于 2011-07-26 18:09:14 发表,目前已经被浏览 1134 次,评论 0 次;

作者添加了以下标签: Cacti

引用通告:http://www.517sou.net/Article/637/Trackback.ashx

评论订阅:http://www.517sou.net/Article/637/Feeds.ashx

相关文章

评论列表

    暂时没有评论
(必填)
(必填,不会被公开)