黑帽联盟

 找回密码
 会员注册
查看: 1259|回复: 0
打印 上一主题 下一主题

[运维监控] 搭建个人web监控系统

[复制链接]

852

主题

38

听众

3174

积分

白金VIP

Rank: 8Rank: 8

  • TA的每日心情
    开心
    2024-3-7 12:52
  • 签到天数: 1538 天

    [LV.Master]伴坛终老

    只是加了几个简单的功能,来监控自己的vps,这样再也不用时时登录vps去看系统状态了,直接打开网页就可以了解自己vps的情况.具体的流程图如下:
    11.png

      系统:centos 5.9

    1.在服务器上创建数据库名为monitor的数据库.
    mysql -u root -p
    create database monitor;
    然后在monitor数据库创建一个servers表,用于存放监控数据:
    use monitor
    1. create table servers (
    2.     id int not null primary key auto_increment,
    3.     hostname varchar(20),
    4.     ip varchar(64),
    5.     rootpartion varchar(64),
    6.     loadaverage varchar(64),
    7.     uptime varchar(64),
    8.     memory varchar(64),
    9.     Process varchar(64),
    10.     time timestamp
    11. )
    复制代码

    上面创建这个表,要说明下:
    hostname是存放服务器主机名.
    ip是存放服务器ip.
    rootpartion是存放服务器硬盘根目录的大小.
    loadaverage是存放服务器cpu负载情况.
    uptime是存放服务器存活时间.
    memory是存放服务器内存使用情况.
    Process是存放服务器进程数.

    再给monitor数据库专门分配个用户来访问.
    grant all privileges on monitor.* to 'dbmonitor'@'localhost' identified by '123456';
    如果你要监控多个服务器的话,那就要给远程访问权限,命令如下:
    grant all privileges on monitor.* to 'dbmonitor'@'%' identified by '123456';
    最后刷新让其生效
    flush privileges;

    2.创建shell监控脚本
    vi system_monitor.sh
    1. #!/bin/bash
    2. #Server status monitor

    3. #初始化变量及设置阀值
    4. MYSQL="mysql -udbmonitor -p123456 monitor -e"     #数据库连接语句
    5. DIR="/tmp"
    6. NOW=$(date "+%F %T")
    7. >${DIR}/messages.txt

    8. ADMIN="admin@cnblackhat.com" #你的邮箱地址
    9. HOSTNAME=$(hostname) #这里也可以手动指定服务器名  如:HOSTNAME="Server1"
    10. IP=$(ifconfig eth0|grep 'inet addr'|sed 's/.*addr:\(.*\) Bcast:.*/\1/')

    11. loadaverage_MAX=3 #系统负载
    12. DISK_MAX=90 #磁盘使用率

    13. #系统负载
    14. loadaverage=$(uptime|sed 's/^.*age: \(.*\)$/\1/')
    15. loadaverage_NOW=$(echo $loadaverage|awk -F. '{print $1}')
    16. if [ $loadaverage_NOW -ge $loadaverage_MAX ];then
    17.      echo "loadaverage: $loadaverage" >>${DIR}/messages.txt
    18. fi

    19. #服务器存活时间
    20. UPTIME=$(uptime|awk '{print $3}')

    21. #内存使用率
    22. memory=$(free -m | grep - | awk '{print $3}')
    23. #memory_total=$(free -m |grep Mem |awk '{print $2}')
    24. #[ "$memory" -ge "$memory_total" ] && $(echo "memory: $memory" >> ${DIR}/messages.txt)
    25. MemTotal=`free -m | grep Mem | awk -F: '{print $2}' | awk '{print $1}'`
    26. MemFree=`free -m | grep cache | awk NR==2 | awk '{print $4}'`
    27. MemFreeB=`awk 'BEGIN{printf "%.2f%\n",'$MemFree/$MemTotal\*100'}'`
    28. MemFreeS=`awk 'BEGIN{printf "%.f",'$MemFree/$MemTotal\*100'}'`
    29. if [ $MemFreeS -lt  20 ]
    30. then
    31. echo "系统可用内存小于20%,实际可用内存为:$MemFreeB ,请查看。">>${DIR}/messages.txt
    32. else
    33. echo "Mem OK" >/dev/null
    34. fi

    35. #总进程
    36. Process=$(ps -ef |wc -l)
    37. if [ $Process -gt 200 ]
    38. then
    39. echo "系统总进程已经超过200,目前进程数位: $Process ,请查看.">>${DIR}/messages.txt
    40. else
    41. echo "Process is ok!">/dev/null
    42. fi

    43. #根分区
    44. #DISK=$(df -h|grep /$|awk '{print $5,$2,$4}')
    45. #DISK=$(df -h|grep /$|awk '{print $4,$2}')
    46. #DISK_USAGE=$(echo $DISK|awk '{print $1}'|tr -d '%')
    47. DISK=$(df -hP|grep /$|awk '{print $5,$2,$4}')
    48. DISK_USAGE=$(echo $DISK|awk '{print $1}'|tr -d '%')
    49. [ "$DISK_USAGE" -ge "$DISK_MAX" ] && $(echo "DISK: $DISK" >> ${DIR}/messages.txt)

    50. #如果messages.txt文件不为空则发送警报信
    51. if [ -s ${DIR}/messages.txt ];then
    52.      mutt -s "system monitor: $NOW  $IP  $HOSTNAME" "$ADMIN" < ${DIR}/messages.txt
    53. fi

    54. #将服务器运行状态数据入到mysql数据库中
    55. #第一次执行插入一条新记录,后续则更新记录
    56. if [ -n "$1" ];then
    57.      $MYSQL "insert into servers(hostname,ip,rootpartion,loadaverage,uptime,memory,Process,time) values('$HOSTNAME','$IP','$DISK','$loadaverage','$UPTIME','$memory','$Process',now())"
    58. else
    59.      $MYSQL "update servers set rootpartion='$DISK',loadaverage='$loadaverage',uptime='$UPTIME',memory='$memory',Process='$Process',time=now() where hostname='$HOSTNAME'"
    60. fi
    复制代码

    3.创建php在web浏览器上显示
    1. <html>
    2.     <head>
    3.         <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
    4.         <meta http-equiv="refresh" content="60">
    5.         <title>my servers</title>
    6.     </head>
    7.      <body>
    8.             <h2>My servers</h2>
    9.         <table border='1'>
    10.                <tr>
    11.                     <th>id</th>
    12.                     <th>hostname</th>
    13.                     <th>ip</th>
    14.                     <th>rootpartion</th>
    15.                     <th>loadaverage</th>
    16.                     <th>uptime</th>
    17.                     <th>memory</th>
    18.                     <th>Process</th>
    19.                     <th>time</th>
    20.                </tr>
    21.         <?php
    22.             //1、连接并选择数据库
    23.             $link=@mysql_connect("127.0.0.1","dbmonitor","123456") or die("连接数据库失败");
    24.             mysql_select_db("monitor",$link);
    25.             //2、构造sql语句并执行,返回结果集
    26.             $sql="select * from servers";
    27.             $res=mysql_query($sql,$link);
    28.             //3、遍历解析结果集
    29.             while($rows=mysql_fetch_assoc($res)){
    30.                 echo "<tr>";
    31.                 echo "<td>${rows['id']}</td>";
    32.                 echo "<td>${rows['hostname']}</td>";
    33.                 echo "<td>${rows['ip']}</td>";
    34.                 echo "<td>${rows['rootpartion']}</td>";
    35.                 echo "<td>${rows['loadaverage']}</td>";
    36.                 echo "<td>${rows['uptime']}</td>";
    37.                 echo "<td>${rows['memory']}</td>";
    38.                 echo "<td>${rows['Process']}</td>";
    39.                 echo "<td>${rows['time']}</td>";
    40.                 echo "";
    41.             }
    42.         ?>
    43.           </table>
    44.      </body>
    45. </html>
    复制代码

    4.使用方法
    第一次执行system_monitor.sh的要使用下面的命令
    ./system_monitor.sh 1
    这样才能在mysql里有数据,不然无法读取到,以后就可以直接:
    ./system_monitor.sh

    然后在系统任务计划里配置如下:
    */1 * * * * /bin/sh /root/soft_shell/system_monitor.sh
    让监控脚本每分钟执行一次.

    5.验证
    如图,我就不写了.
    12.png

    可以看到是有数据出来的,证明个人的web监控系统已经搭建成功了.
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部