搭建个人web监控系统
本文是根据开发自己的监控系统二、web篇来的,我只是加了几个简单的功能,来监控自己的vps,这样再也不用时时登录vps去看系统状态了,直接打开网页就可以了解自己vps的情况.具体的流程图如下:
这个图是借的运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)里的,如果大家有兴趣也可以去看看这位大神做的监控系统,比本文要精细得多,当然个人使用的话我觉得没必要整那么精细了,可以看cpu、内存、硬盘、服务器存活时间就够了.
系统:centos 5.9
1.在服务器上创建数据库名为monitor的数据库.
mysql -u root -p
create database monitor;
然后在monitor数据库创建一个servers表,用于存放监控数据:
use monitor
上面创建这个表,要说明下:
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
3.创建php在web浏览器上显示
4.使用方法
第一次执行system_monitor.sh的要使用下面的命令
./system_monitor.sh 1
这样才能在mysql里有数据,不然无法读取到,以后就可以直接:
./system_monitor.sh
然后在系统任务计划里配置如下:
*/1 * * * * /bin/sh /root/soft_shell/system_monitor.sh
让监控脚本每分钟执行一次.
5.验证
如图,我就不写了.
可以看到是有数据出来的,证明个人的web监控系统已经搭建成功了.
这个图是借的运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(一)里的,如果大家有兴趣也可以去看看这位大神做的监控系统,比本文要精细得多,当然个人使用的话我觉得没必要整那么精细了,可以看cpu、内存、硬盘、服务器存活时间就够了.
系统:centos 5.9
1.在服务器上创建数据库名为monitor的数据库.
mysql -u root -p
create database monitor;
然后在monitor数据库创建一个servers表,用于存放监控数据:
use monitor
01 | create table servers ( |
02 | id int not null primary key auto_increment, |
03 | hostname varchar(20), |
04 | ip varchar(64), |
05 | rootpartion varchar(64), |
06 | loadaverage varchar(64), |
07 | uptime varchar(64), |
08 | memory varchar(64), |
09 | 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
01 | #!/bin/bash |
02 | #Server status monitor |
03 | |
04 | #初始化变量及设置阀值 |
05 | MYSQL= "mysql -udbmonitor -p123456 monitor -e" #数据库连接语句 |
06 | DIR= "/tmp" |
07 | NOW=$( date "+%F %T" ) |
08 | >${DIR}/messages.txt |
09 | |
10 | ADMIN= "slogra@126.com" #你的邮箱地址 |
11 | HOSTNAME=$( hostname ) #这里也可以手动指定服务器名 如:HOSTNAME="Server1" |
12 | IP=$( ifconfig eth0| grep 'inet addr' | sed 's/.*addr:\(.*\) Bcast:.*/\1/' ) |
13 | |
14 | loadaverage_MAX=3 #系统负载 |
15 | DISK_MAX=90 #磁盘使用率 |
16 | |
17 | #系统负载 |
18 | loadaverage=$(uptime| sed 's/^.*age: \(.*\)$/\1/' ) |
19 | loadaverage_NOW=$( echo $loadaverage| awk -F. '{print $1}' ) |
20 | if [ $loadaverage_NOW - ge $loadaverage_MAX ]; then |
21 | echo "loadaverage: $loadaverage" >>${DIR}/messages.txt |
22 | fi |
23 |
24 | #服务器存活时间 |
25 | UPTIME=$(uptime| awk '{print $3}' ) |
26 |
27 | #内存使用率 |
28 | memory=$( free -m | grep - | awk '{print $3}' ) |
29 | #memory_total=$(free -m |grep Mem |awk '{print $2}') |
30 | #[ "$memory" -ge "$memory_total" ] && $(echo "memory: $memory" >> ${DIR}/messages.txt) |
31 | MemTotal=` free -m | grep Mem | awk -F: '{print $2}' | awk '{print $1}' ` |
32 | MemFree=` free -m | grep cache | awk NR==2 | awk '{print $4}' ` |
33 | MemFreeB=` awk 'BEGIN{printf "%.2f%\n",' $MemFree/$MemTotal\*100 '}' ` |
34 | MemFreeS=` awk 'BEGIN{printf "%.f",' $MemFree/$MemTotal\*100 '}' ` |
35 | if [ $MemFreeS - lt 20 ] |
36 | then |
37 | echo "系统可用内存小于20%,实际可用内存为:$MemFreeB ,请查看。" >>${DIR}/messages.txt |
38 | else |
39 | echo "Mem OK" >/dev/null |
40 | fi |
41 |
42 | #总进程 |
43 | Process=$( ps -ef | wc -l) |
44 | if [ $Process - gt 200 ] |
45 | then |
46 | echo "系统总进程已经超过200,目前进程数位: $Process ,请查看." >>${DIR}/messages.txt |
47 | else |
48 | echo "Process is ok!" >/dev/null |
49 | fi |
50 |
51 | #根分区 |
52 | #DISK=$(df -h|grep /$|awk '{print $5,$2,$4}') |
53 | #DISK=$(df -h|grep /$|awk '{print $4,$2}') |
54 | #DISK_USAGE=$(echo $DISK|awk '{print $1}'|tr -d '%') |
55 | DISK=$( df -hP| grep /$| awk '{print $5,$2,$4}' ) |
56 | DISK_USAGE=$( echo $DISK| awk '{print $1}' | tr -d '%' ) |
57 | [ "$DISK_USAGE" - ge "$DISK_MAX" ] && $( echo "DISK: $DISK" >> ${DIR}/messages.txt) |
58 | |
59 | #如果messages.txt文件不为空则发送警报信 |
60 | if [ -s ${DIR}/messages.txt ]; then |
61 | mutt -s "system monitor: $NOW $IP $HOSTNAME" "$ADMIN" < ${DIR}/messages.txt |
62 | fi |
63 | |
64 | #将服务器运行状态数据入到mysql数据库中 |
65 | #第一次执行插入一条新记录,后续则更新记录 |
66 | if [ -n "$1" ]; then |
67 | $MYSQL "insert into servers(hostname,ip,rootpartion,loadaverage,uptime,memory,Process,time) values('$HOSTNAME','$IP','$DISK','$loadaverage','$UPTIME','$memory','$Process',now())" |
68 | else |
69 | $MYSQL "update servers set rootpartion='$DISK',loadaverage='$loadaverage',uptime='$UPTIME',memory='$memory',Process='$Process',time=now() where hostname='$HOSTNAME'" |
70 | fi |
3.创建php在web浏览器上显示
01 | <html> |
02 | < head > |
03 | <meta http-equiv= 'Content-Type' content= 'text/html; charset=utf-8' /> |
04 | <meta http-equiv= "refresh" content= "60" > |
05 | <title>my servers</title> |
06 | </ head > |
07 | <body> |
08 | <h2>My servers</h2> |
09 | <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.验证
如图,我就不写了.
可以看到是有数据出来的,证明个人的web监控系统已经搭建成功了.
评论: