Ubuntu‎ > ‎

Cacti thold URL 簡訊

。20120315
 
        最近公司有個專案需要幫助客戶監控主機狀況,在主機出問題時能主動發mail及簡訊通知,以前就有看過類似文章,但都是使用大陸的飛信機器人或自備modem達成,但是都不適合使用在公司現有環境,正好公司程式也有用到Web service及URL傳送簡訊,於是修改Cacti thold plugin加上wget來達到Cacti發簡訊通知的功能。

        本文需要安裝Cacti的settings/thold plugin, 相關文章網路搜尋有很多, 關鍵字"Cacti thold plugin"。安裝完後就能找到Cacti下thold目錄。

一, 將thold超過監控值的mail訊息主旨傳到簡訊

         1.修改
/usr/share/cacti/site/plugins/thold/thold_functions.php

    
         找到第一行thold_mail($alert_emails, '', $subject, $msg, $file_array);
         將原本如下程式

    if (trim($alert_emails) != '') {
        thold_mail($alert_emails, '', $subject, $msg, $file_array);
    }

         增加兩行
 
    if (trim($alert_emails) != '') {
        thold_mail($alert_emails, '', $subject, $msg, $file_array);
        exec("echo '$subject' > /usr/share/cacti/site/plugins/thold/sms.log");
        exec("/bin/sh /usr/share/cacti/site/plugins/thold/sendsms");
    }

        2.利用wget POST簡訊資料到簡訊功能URL, 撰寫sendsms shell script:
          
            撰寫
/usr/share/cacti/site/plugins/thold/sendsms 內容如下:

    #!/bin/bash
    info=$(cat /usr/share/cacti/site/plugins/thold/sms.log)

    xml=$(echo '<?xml version="1.0" encoding="utf-8"?>
       <soap12:Body>
        <SendSMS xmlns="http://WES_SMS/">
          <Phone>9999999999</Phone>
          <Content>'$info'</Content>
        </SendSMS>
      </soap12:Body>
    </soap12:Envelope>')

    wget "http://192.168.1.11/WES_SMS/SMS.asmx?op=SendSMS" --post-data="$xml" --header="Content-Type: text/xml; charset=utf-8" -O /usr/share/cacti/site/plugins/thold/WES_SMS_respons >/dev/null 2>&1 
    
       這裡使用wget參數--post-data傳送xml簡訊資料到我們公司的簡訊web service, 當然用來傳送URL的query string會更簡單, 另外也可以使用--post-file傳送檔案內容,完成後thold就能傳送訊息了。

       附註:
       1. 需注意目錄權限的問題,Ubuntu執行Apache預設使用者是www-data。
       2. shell script sendsms內的變數建議加上單引號,避免Cacti傳送過來的資料格式造成的問題。

 
二,讓Cacti傳送主機Down及UP簡訊:  

       
        修改/usr/share/cacti/site/plugins/thold/includes/polling.php檔案
        在兩行thold_mail($alert_email, '', $subject, $msg, ''); 上面加上

  exec("echo '$subject' > /usr/share/cacti/site/plugins/thold/includes/sms");
  exec("/bin/ba /usr/share/cacti/site/plugins/thold/includes/sendsms");

  thold_mail($alert_email, '', $subject, $msg, '');

        其餘參考一,傳thold 監控值主旨到簡訊的步驟。




參考資料來源:

    
Comments