免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1197 | 回复: 0
打印 上一主题 下一主题

写完“Linux服务器监控系统 ServMon V1.1” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-23 10:50 |只看该作者 |倒序浏览

                 [文章作者:张宴 本文版本:v1.1 最后修改:2007.08.31 转载请注明出处:

[url='http://blog.s135.com' target=_blank>http://blog.s135.com

[url='http://blog.s135.com/read.php/276.htm' target=_blank>http://blog.s135.com/read.php/276.htm[/url]
引用
wget

[url='http://blog.s135.com/soft/linux/servmon/servmon-1.1.linux.tar.gz' target=_blank>http://blog.s135.com/soft/linux/servmon/servmon-1.1.linux.tar.gz

[url='http://yourdomain/servmon/interface.php' target=_blank>http://yourdomain/servmon/interface.php[/url]
  注:此处的password为interface.php程序中设置的数据传输验证密码。
  客户端安装包源码:
  │
  ├─
[color="#4f6371"]install
  ├─[src]
  │  ├─[bin]
  │  │  ├─
[color="#4f6371"]diskstat_send
  │  │  ├─
[color="#4f6371"]loadstat_send
  │  │  └─
[color="#4f6371"]swapstat_send
  │  ├─[cron]
  │  │  └─
[color="#4f6371"]servmon
  │  └─[data]
  屏幕演示:
  

  2、监控端服务器配置(Linux)
  (1)、启动sendmail
  /usr/sbin/sendmail -bd -q30m
  -b:指定Sendmail在后台运行,并且监听端口25的请求。
  -d:指定Sendmail以Daemon方式运行(守护进程)。
  -q:当Sendmail无法将邮件成功地发送到目的地时,它会将邮件保存在队列里。该参数指定邮件在队列里保存的时间。其中的30m表示保留30分钟。
  (2)、修改php.ini的[mail function]部分为以下内容,然后重启Apache,使PHP能够使用mail()函数发送电子邮件
引用
[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25
; For Win32 only.
;sendmail_from =
me@example.com
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -t -i
  (4)、在MySQL上创建一个数据库servmon,然后在该数据库中执行以下SQL语句创建表:
引用
CREATE TABLE `tb_diskstat` (
`ip` varchar(128) NOT NULL default '',
`date` int(10) NOT NULL default '0',
UNIQUE KEY `ip` (`ip`)
) TYPE=MyISAM;
  备注:这张表是PHP接口程序用来记录发送磁盘分区报警邮件的时间,避免在一段时间内重复发送大量报警邮件的。
  (3)、PHP接口程序
  

[url='http://yourdomain/servmon/interface.php' target=_blank>http://yourdomain/servmon/interface.php

[color="#808080"]view plain
[color="#808080"]copy to clipboard
[color="#808080"]print
[color="#808080"]?
[color="#008000"]/**   
[color="#008000"]*********************************************************************   
[color="#008000"]* Copyright (c) 2007, 回忆未来[张宴]   
[color="#008000"]* All rights reserved.   
[color="#008000"]*   
[color="#008000"]* 文件名称: interface.php   
[color="#008000"]* 摘    要: 服务器监控系统ServMon接口程序   
[color="#008000"]* 描    述:   
[color="#008000"]* 作    者: 张宴  新浪UC:103500  博客:blog.s135.com   
[color="#008000"]* 版    本: 1.1   
[color="#008000"]* 时    间: 2007-08-31   
[color="#008000"]*********************************************************************   
[color="#008000"]*/     
     
[color="#008000"]//------------------配置信息------------------      
[color="#dd0000"]$password = [color="#0000ff"]"yourpassword";[color="#008000"]//设置数据传输验证密码,ServMon客户端安装时需要指定此密码      
[color="#dd0000"]$mysql_server = [color="#0000ff"]"127.0.0.1:3306";[color="#008000"]//MySQL服务器地址及端口,例如localhost:3306      
[color="#dd0000"]$mysql_db = [color="#0000ff"]"servmon";[color="#008000"]//MySQL数据库名      
[color="#dd0000"]$mysql_username = [color="#0000ff"]"root";[color="#008000"]//MySQL帐号      
[color="#dd0000"]$mysql_password = [color="#0000ff"]"";[color="#008000"]//MySQL密码      
[color="#dd0000"]$disk_max = [color="#0000ff"]"90";[color="#008000"]//磁盘分区使用百分比超过此值,则报警。默认为90%      
[color="#dd0000"]$disk_sendmail_interval = [color="#0000ff"]"43200";[color="#008000"]//如果同一台服务器连续报警,设置每隔多少秒发送一次报警邮件。默认为43200秒,即12小时。      
[color="#dd0000"]$swap_max = [color="#0000ff"]"50";[color="#008000"]//Swap交换空间使用百分比超过此值,则报警。默认为50%      
[color="#dd0000"]$email = "
webmaster@s135.com
,
info@s135.com
";[color="#008000"]//管理员邮箱,多个邮箱以逗号分割      
[color="#008000"]//--------------------------------------------      
  
[color="#008000"]//密码验证   
[color="#0000ff"]if (htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"password"]) != [color="#dd0000"]$password)   
{   
    echo [color="#0000ff"]"数据传输验证密码错误!\n";   
    exit();   
}   
  
[color="#008000"]//磁盘分区报警(分区使用率超过90%后会发邮件报警)   
[color="#0000ff"]if (htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"menu"]) == [color="#0000ff"]"diskstat")   
{   
    [color="#dd0000"]$is_send_mail = [color="#0000ff"]"0";[color="#008000"]//是否发邮件,0为不发邮件   
    [color="#dd0000"]$date = htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"date"]);   
    [color="#dd0000"]$ip = htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"ip"]);   
    [color="#dd0000"]$data = htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"data"]);   
    [color="#dd0000"]$arr1 = explode([color="#0000ff"]";", [color="#dd0000"]$data);   
    [color="#0000ff"]foreach ([color="#dd0000"]$arr1 [color="#0000ff"]as [color="#dd0000"]$key1 => [color="#dd0000"]$value1)   
    {   
        [color="#dd0000"]$arr2 = explode([color="#0000ff"]":", [color="#dd0000"]$value1);   
        [color="#0000ff"]if ([color="#dd0000"]$arr2[0] != [color="#0000ff"]"" && [color="#dd0000"]$arr2[1] != [color="#0000ff"]"" && [color="#dd0000"]$arr2[1] >= [color="#dd0000"]$disk_max)   
        {   
            [color="#dd0000"]$subject = [color="#0000ff"]"[系统监控]_磁盘分区空间不足_" . [color="#dd0000"]$ip;   
            [color="#dd0000"]$message = [color="#0000ff"]"服务器监控系统 ServMon V1.1\r\n";   
            [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
            [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警服务器:" . [color="#dd0000"]$ip . [color="#0000ff"]"\r\n";   
            [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
            [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警时间:" . [color="#dd0000"]$date . [color="#0000ff"]"\r\n";   
            [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
            [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警内容:\r\n";   
            [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●磁盘分区 " . [color="#dd0000"]$arr2[0] . [color="#0000ff"]" 空间不足(空间使用率达到" . [color="#dd0000"]$arr2[1] . [color="#0000ff"]"%)\r\n";   
            [color="#dd0000"]$headers = 'From: ServMon ' . [color="#0000ff"]"\r\n" .   
                'Reply-To: ServMon ' . [color="#0000ff"]"\r\n" . [color="#0000ff"]'X-Mailer: PHP/' . phpversion();   
            [color="#dd0000"]$is_send_mail = [color="#0000ff"]"1";[color="#008000"]//是否发邮件,1为发送邮件   
        }   
    }   
    [color="#0000ff"]if ([color="#dd0000"]$is_send_mail == [color="#0000ff"]"1")   
    {   
        [color="#dd0000"]$connect = mysql_connect([color="#dd0000"]$mysql_server, [color="#dd0000"]$mysql_username, [color="#dd0000"]$mysql_password);   
        [color="#dd0000"]$select = mysql_select_db([color="#dd0000"]$mysql_db, [color="#dd0000"]$connect);   
        [color="#dd0000"]$select_result = mysql_query([color="#0000ff"]"SELECT date FROM tb_diskstat WHERE ip='" . [color="#dd0000"]$ip .   
            [color="#0000ff"]"' LIMIT 1");   
        [color="#dd0000"]$rs = mysql_fetch_array([color="#dd0000"]$select_result);   
        [color="#dd0000"]$interval = date([color="#0000ff"]"U") - [color="#dd0000"]$rs[[color="#0000ff"]"date"];   
        [color="#0000ff"]if ([color="#dd0000"]$interval >= [color="#dd0000"]$disk_sendmail_interval)   
        {   
            [color="#0000ff"]if (mail([color="#dd0000"]$email, [color="#dd0000"]$subject, [color="#dd0000"]$message, [color="#dd0000"]$headers))   
            {   
                echo [color="#0000ff"]"已成功发送报警邮件!\n";   
            }   
            [color="#0000ff"]else  
            {   
                echo [color="#0000ff"]"发送报警邮件失败!\n";   
            }   
            [color="#dd0000"]$insert_result = mysql_query([color="#0000ff"]"REPLACE INTO tb_diskstat (ip, date) VALUES ('" . [color="#dd0000"]$ip .   
                [color="#0000ff"]"', '" . date([color="#0000ff"]"U") . [color="#0000ff"]"');");   
        }   
        [color="#0000ff"]else  
        {   
            [color="#0000ff"]if ([color="#dd0000"]$disk_sendmail_interval >= 3600)   
            {   
                [color="#dd0000"]$disk_sendmail_interval_text = [color="#dd0000"]$disk_sendmail_interval / 3600 . [color="#0000ff"]"小时";   
            }   
            [color="#0000ff"]else  
            {   
                [color="#dd0000"]$disk_sendmail_interval_text = [color="#dd0000"]$disk_sendmail_interval . [color="#0000ff"]"秒";   
            }   
            echo [color="#0000ff"]"已发送过报警邮件," . [color="#dd0000"]$disk_sendmail_interval_text . [color="#0000ff"]"内不再重复发送!\n";   
        }   
  
    }   
    [color="#0000ff"]else  
    {   
        echo [color="#0000ff"]"磁盘分区空间足够,无须发送报警邮件!\n";   
    }   
    exit();   
}   
  
[color="#008000"]//Swap交换空间报警(Swap交换空间使用率超过60%后会发邮件报警)   
[color="#0000ff"]if (htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"menu"]) == [color="#0000ff"]"swapstat")   
{   
    [color="#dd0000"]$is_send_mail = [color="#0000ff"]"0";[color="#008000"]//是否发邮件,0为不发邮件   
    [color="#dd0000"]$date = htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"date"]);   
    [color="#dd0000"]$ip = htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"ip"]);   
    list([color="#dd0000"]$total, [color="#dd0000"]$used, [color="#dd0000"]$free) = split([color="#0000ff"]":", htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"data"]));   
    [color="#dd0000"]$percentage = round([color="#dd0000"]$used / [color="#dd0000"]$total * 100, 0);   
    [color="#0000ff"]if ([color="#dd0000"]$percentage >= [color="#dd0000"]$swap_max)   
    {   
        [color="#dd0000"]$subject = [color="#0000ff"]"[系统监控]_Swap交换空间使用率高达" . [color="#dd0000"]$percentage . [color="#0000ff"]"%_" . [color="#dd0000"]$ip;   
        [color="#dd0000"]$message = [color="#0000ff"]"服务器监控系统 ServMon V1.1\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警服务器:" . [color="#dd0000"]$ip . [color="#0000ff"]"\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警时间:" . [color="#dd0000"]$date . [color="#0000ff"]"\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警内容:\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●Swap交换空间使用率高达" . [color="#dd0000"]$percentage . [color="#0000ff"]"%,若继续增加到100%可能会导致服务器死机。\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●Swap交换空间总量:" . [color="#dd0000"]$total . [color="#0000ff"]" MB\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●Swap交换空间使用:" . [color="#dd0000"]$used . [color="#0000ff"]" MB\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●Swap交换空间剩余:" . [color="#dd0000"]$free . [color="#0000ff"]" MB\r\n";   
        [color="#dd0000"]$headers = 'From: ServMon ' . [color="#0000ff"]"\r\n" .   
            'Reply-To: ServMon ' . [color="#0000ff"]"\r\n" . [color="#0000ff"]'X-Mailer: PHP/' . phpversion();   
        [color="#dd0000"]$is_send_mail = [color="#0000ff"]"1";[color="#008000"]//是否发邮件,1为发送邮件   
    }   
    [color="#0000ff"]if ([color="#dd0000"]$is_send_mail == [color="#0000ff"]"1")   
    {   
        [color="#0000ff"]if (mail([color="#dd0000"]$email, [color="#dd0000"]$subject, [color="#dd0000"]$message, [color="#dd0000"]$headers))   
        {   
            echo [color="#0000ff"]"已成功发送报警邮件!\n";   
        }   
        [color="#0000ff"]else  
        {   
            echo [color="#0000ff"]"发送报警邮件失败!\n";   
        }   
    }   
    [color="#0000ff"]else  
    {   
        echo [color="#0000ff"]"Swap交换空间使用率不高,无须发送报警邮件!\n";   
    }   
    exit();   
}   
  
[color="#008000"]//系统负载过高报警   
[color="#0000ff"]if (htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"menu"]) == [color="#0000ff"]"loadstat")   
{   
    [color="#dd0000"]$is_send_mail = [color="#0000ff"]"0";[color="#008000"]//是否发邮件,0为不发邮件   
    [color="#dd0000"]$date = htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"date"]);   
    [color="#dd0000"]$ip = htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"ip"]);   
    list([color="#dd0000"]$load_last_1min, [color="#dd0000"]$load_last_5min, [color="#dd0000"]$load_last_15min) = split([color="#0000ff"]",",   
        htmlspecialchars([color="#dd0000"]$_POST[[color="#0000ff"]"data"]));   
    [color="#0000ff"]if ([color="#dd0000"]$load_last_15min >= 25)   
    {   
        [color="#0000ff"]if ([color="#dd0000"]$load_last_15min
        {   
            [color="#dd0000"]$level = [color="#0000ff"]"轻微";   
        }   
        [color="#0000ff"]elseif ([color="#dd0000"]$load_last_15min
        {   
            [color="#dd0000"]$level = [color="#0000ff"]"严重";   
        }   
        [color="#0000ff"]elseif ([color="#dd0000"]$load_last_15min
        {   
            [color="#dd0000"]$level = [color="#0000ff"]"非常严重";   
        }           
        [color="#0000ff"]else  
        {   
            [color="#dd0000"]$level = [color="#0000ff"]"接近崩溃";   
        }   
        [color="#dd0000"]$subject = [color="#0000ff"]"[系统监控]_系统负载过高(" . [color="#dd0000"]$level . [color="#0000ff"]")_" . [color="#dd0000"]$ip;   
        [color="#dd0000"]$message = [color="#0000ff"]"服务器监控系统 ServMon V1.1\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警服务器:" . [color="#dd0000"]$ip . [color="#0000ff"]"\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警时间:" . [color="#dd0000"]$date . [color="#0000ff"]"\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"-------------------------------------------------------\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"报警内容:\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●系统负载过高,级别:" . [color="#dd0000"]$level . [color="#0000ff"]" (25~50轻微、50~100严重、100~500非常严重、>500接近崩溃)\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●最近 1分钟系统负载:" . [color="#dd0000"]$load_last_1min . [color="#0000ff"]"\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●最近 5分钟系统负载:" . [color="#dd0000"]$load_last_5min . [color="#0000ff"]"\r\n";   
        [color="#dd0000"]$message = [color="#dd0000"]$message . [color="#0000ff"]"●最近15分钟系统负载:" . [color="#dd0000"]$load_last_15min . [color="#0000ff"]"\r\n";   
        [color="#dd0000"]$headers = 'From: ServMon ' . [color="#0000ff"]"\r\n" .   
            'Reply-To: ServMon ' . [color="#0000ff"]"\r\n" . [color="#0000ff"]'X-Mailer: PHP/' . phpversion();   
        [color="#dd0000"]$is_send_mail = [color="#0000ff"]"1";[color="#008000"]//是否发邮件,1为发送邮件   
    }   
    [color="#0000ff"]if ([color="#dd0000"]$is_send_mail == [color="#0000ff"]"1")   
    {   
        [color="#0000ff"]if (mail([color="#dd0000"]$email, [color="#dd0000"]$subject, [color="#dd0000"]$message, [color="#dd0000"]$headers))   
        {   
            echo [color="#0000ff"]"已成功发送报警邮件!\n";   
        }   
        [color="#0000ff"]else  
        {   
            echo [color="#0000ff"]"发送报警邮件失败!\n";   
        }   
    }   
    [color="#0000ff"]else  
    {   
        echo [color="#0000ff"]"系统负载不高,无须发送报警邮件!\n";   
    }   
    exit();   
}   
?>  
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93926/showart_1872459.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP