MSN消息監控Linux服務器

 MSN消息監控Linux服務器

 

 
管理服務器太多了,不可能每時每刻都登錄到上面查看服務器狀況,從http://blog.s135.com上看到,電子郵件監控linux服務器,和msn消息監控(沒有開源核心技術),結合其文章和提示,自己寫了一個msn消息監控Linux服務器。監控程序以shell和PHP程序編寫: 
系統監控接口程序(boobooke.php)具有的報警方式 
     1、MSN實時報警 
    Shell腳本在計劃任務設定時間內執行,結合PHP程序判斷是否發送短消息到管理員的MSN。 
         發送MSN短消息用了一個PHP類:sendMsg(網上可以下載到),使用該PHP類發消息,必須將發送、接收雙方的MSN加爲聯繫  人,發送中文時,先用iconv將字符集轉爲UTF-8: $sendMsg->sendMessage(iconv("GBK", "UTF-8", $message), 'Times New Roman', '008000'); 
     2、被監控服務器Shell腳本 
      ①磁盤分區使用率監控 
/usr/local/servmon/bin/diskstat_send 
#!/bin/sh 
LANG=zh_cn 
disk=$(/bin/df -kP | grep / | awk -F ' ' ' {print $6":"$5}' | awk -F '%' ' {print $1}' | tr -s '\n' ';') 
date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S") 
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '\n' ';') 
/usr/bin/curl -d menu=diskstat -d password=$2 -d date=$date -d ip=$ip -d data=$disk $1 

      ②交換分區使用率監控 
/usr/local/servmon/bin/swapstat_send 
#!/bin/sh 
LANG=zh_cn 
data=$(/usr/bin/free -m | grep Swap | awk '{print $2":"$3":"$4}') 
date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S") 
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '\n' ';') 
/usr/bin/curl -d menu=swapstat -d password=$2 -d date=$date -d ip=$ip -d data=$data $1 

      ③負載情況使用率監控 
/usr/local/servmon/bin/loadstat_send 
#!/bin/sh 
LANG=zh_cn 
load=$(/usr/bin/uptime | awk -F'load average: ' '{print $2}' | awk '{print $1$2$3}') 
date=$(date -d "today" +"%Y-%m-%d_%H:%M:%S") 
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '\n' ';') 
/usr/bin/curl -d menu=loadstat -d password=$2 -d date=$date -d ip=$ip -d data=$load $1
 

      ④Linux服務器計劃任務
 
/etc/cron.d/boobooke 
*/30 * * * * root /bin/sh /usr/local/servmon/bin/diskstat_send http://127.0.0.1/boobooke.php password 
*/10 * * * * root /bin/sh /usr/local/servmon/bin/swapstat_send 
http://127.0.0.1/boobooke.php password 
1,16,31,46 * * * * root /bin/sh /usr/local/servmon/bin/loadstat_send 
http://127.0.0.1/boobooke.php password 

      ⑤service crond start
 
     3、PHP接口程序 
http://192.168.1.22/boobooke.php 
<?php 
/** 
********************************************************************* 
* Copyright (c) 2008, [趕星] 
* All rights reserved. 

* 文件名稱: boobooke.php 
* 摘    要: 服務器監控系統※趕星修改※接口程序 
* 描    述: 
* 作    者: 張宴  新浪UC:103500  博客:blog.s135.com 
* 作    者: 趕星  QQ:10908105    博客:51CTO提醒您,請勿濫發廣告! 
* 版    本: 1.1 
* 時    間: 2008-10-07 
********************************************************************* 
*/
 
//------------------配置信息------------------ 
$password = "123123";//設置數據傳輸驗證密碼,※趕星修改※客戶端安裝時需要指定此密碼 
$disk_max = "70";//磁盤分區使用百分比超過此值,則報警。默認爲90% 
$swap_max = "1";//Swap交換空間使用百分比超過此值,則報警。默認爲50% 
//-------------------------------------------- 
//-----------------定義發msn函數--------------- 
function sendmsn() 

$send_msn = "
[email protected]";//機器人MSN帳號 
$send_msn_password = "boobooke";//機器人MSN密碼 
$re_msn = "
[email protected]";//接收管理員MSN帳號 
global $message; 
error_reporting(E_ALL); 
include('sendMsg.php'); 
$sendMsg = new sendMsg(); 
$sendMsg->login($send_msn,$send_msn_password); 
$sendMsg->createSession($re_msn); 
$sendMsg->sendMessage(iconv("GBK", "UTF-8", $message), 'Times New Roman', '008000'); 

//--------------函數定義結束-------------------
 
//密碼驗證 
if (htmlspecialchars($_POST["password"]) != $password) 

    echo "數據傳輸驗證密碼錯誤!\n"; 
    exit(); 
}
 
//磁盤分區報警(分區使用率超過90%後會發MSN消息報警) 
if (htmlspecialchars($_POST["menu"]) == "diskstat") 

    $is_send_msn = "0";//是否發MSN消息,0爲不發郵件 
    $date = htmlspecialchars($_POST["date"]); 
    $ip = htmlspecialchars($_POST["ip"]); 
    $data = htmlspecialchars($_POST["data"]); 
    $arr1 = explode(";", $data); 
    foreach ($arr1 as $key1 => $value1) 
    { 
        $arr2 = explode(":", $value1); 
        if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max) 
        { 
            $subject = "[系統監控]_磁盤分區空間不足_" . $ip; 
            $message = "服務器監控系統 ※趕星修改※ V1.1\r\n"; 
            $message = $message . "----------------------------------------\r\n"; 
            $message = $message . "報警服務器:" . $ip . "\r\n"; 
            $message = $message . "----------------------------------------\r\n"; 
            $message = $message . "報警時間:" . $date . "\r\n"; 
            $message = $message . "----------------------------------------\r\n"; 
            $message = $message . "報警內容:\r\n"; 
            $message = $message . "●磁盤分區 " . $arr2[0] . " 空間不足(空間使用率達到" . $arr2[1] . "%)\r\n"; 
            $is_send_msn = "1";//是否發MSN消息,1爲發送MSN消息 
        } 
    } 
    if ($is_send_msn == "1") 
            { 
           sendmsn(); 
            } 
           else 
      { 
         echo "磁盤分區空間足夠,無須發送報警MSN消息!\n"; 
      } 
    exit(); 
}
 
//Swap交換空間報警(Swap交換空間使用率超過60%後會發MSN消息報警) 
if (htmlspecialchars($_POST["menu"]) == "swapstat") 

    $is_send_msn = "0";//是否發MSN消息,0爲不發MSN消息 
    $date = htmlspecialchars($_POST["date"]); 
    $ip = htmlspecialchars($_POST["ip"]); 
    list($total, $used, $free) = split(":", htmlspecialchars($_POST["data"])); 
    $percentage = round($used / $total * 100, 0); 
    if ($percentage >= $swap_max) 
    { 
        $subject = "[系統監控]_Swap交換空間使用率高達" . $percentage . "%_" . $ip; 
        $message = "服務器監控系統 ※趕星修改※ V1.1\r\n"; 
        $message = $message . "--------------------------------------------\r\n"; 
        $message = $message . "報警服務器:" . $ip . "\r\n"; 
        $message = $message . "--------------------------------------------\r\n"; 
        $message = $message . "報警時間:" . $date . "\r\n"; 
        $message = $message . "--------------------------------------------\r\n"; 
        $message = $message . "報警內容:\r\n"; 
        $message = $message . "●Swap交換空間使用率高達" . $percentage . "%,若繼續增加到100%可能會導致服務器死機。\r\n"; 
        $message = $message . "●Swap交換空間總量:" . $total . " MB\r\n"; 
        $message = $message . "●Swap交換空間使用:" . $used . " MB\r\n"; 
        $message = $message . "●Swap交換空間剩餘:" . $free . " MB\r\n"; 
        $is_send_msn = "1";//是否發MSN消息,1爲發送MSN消息 
    } 
    if ($is_send_msn == "1") 
    { 
        sendmsn(); 
    } 
    else 
    { 
        echo "Swap交換空間使用率不高,無須發送報警MSN!\n"; 
    } 
    exit(); 
}
 
//系統負載過高報警 
if (htmlspecialchars($_POST["menu"]) == "loadstat") 

    $is_send_msn = "0";//是否發MSN消息,0爲不發MSN消息 
    $date = htmlspecialchars($_POST["date"]); 
    $ip = htmlspecialchars($_POST["ip"]); 
    list($load_last_1min, $load_last_5min, $load_last_15min) = split(",", 
        htmlspecialchars($_POST["data"])); 
    if ($load_last_15min >= 25) 
    { 
        if ($load_last_15min < 50) 
        { 
            $level = "輕微"; 
        } 
        elseif ($load_last_15min < 100) 
        { 
            $level = "嚴重"; 
        } 
        elseif ($load_last_15min < 500) 
        { 
            $level = "非常嚴重"; 
        } 
        else 
        { 
            $level = "接近崩潰"; 
        } 
        $subject = "[系統監控]_系統負載過高(" . $level . ")_" . $ip; 
        $message = "服務器監控系統 ※趕星修改※ V1.1\r\n"; 
        $message = $message . "-------------------------------------------------------\r\n"; 
        $message = $message . "報警服務器:" . $ip . "\r\n"; 
        $message = $message . "-------------------------------------------------------\r\n"; 
        $message = $message . "報警時間:" . $date . "\r\n"; 
        $message = $message . "-------------------------------------------------------\r\n"; 
        $message = $message . "報警內容:\r\n"; 
        $message = $message . "●系統負載過高,級別:" . $level . " (25~50輕微、50~100嚴重、100~500非常嚴重、>500接近崩潰)\r\n"; 
        $message = $message . "●最近 1分鐘系統負載:" . $load_last_1min . "\r\n"; 
        $message = $message . "●最近 5分鐘系統負載:" . $load_last_5min . "\r\n"; 
        $message = $message . "●最近15分鐘系統負載:" . $load_last_15min . "\r\n"; 
        $is_send_msn = "1";//是否發MSN消息,1爲發送MSN消息 
    } 
    if ($is_send_msn == "1") 
    { 
        sendmsn(); 
    } 
    else 
    { 
        echo "系統負載不高,無須發送報警MSN消息!\n"; 
    } 
    exit(); 

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