因为课题写的就是服务器架构相关的东西,最后实验需要监控整个服务器持续运行状态下的各项性能指标。最近得空,就把之前用过的简单方法分享出来。如何用Python脚本实现对服务器的自动监控,具体步骤如下(代码可直接使用):
1 建立 test.py文件,具体代码如下:
------------------------------------------
#!/usr/bin/python
import subprocess
w_return =subprocess.check_output(['/usr/bin/w'])
w_12 =w_return.split(" ")[12]
w_13 =w_return.split(" ")[13]
w_14 =w_return.split(" ")[14]
cpuload_1 =w_12.split(",")[0]
cpuload_5 =w_13.split(",")[0]
cpuload_15 =w_14.split("\n")[0]
iostat_return =subprocess.check_output(['/usr/bin/iostat'])
iostat_list =(filter(lambda x: x, iostat_return.split(' ')))
iostat =iostat_list[12:17]
iostat.append(iostat_list[17].split("\n")[0])
mem_return =subprocess.check_output(['/usr/bin/free'])
mem_list = (filter(lambdax: x, mem_return.split(' ')))
mem = mem_list[6:11]
mem.append(mem_list[11].split("\n")[0])
tcp_stats =subprocess.check_output(['./test.sh'])
tcp_ESTABLISHED =tcp_stats.split("\n")[0]
tcp_TIME_WAIT =tcp_stats.split("\n")[1]
sum_list =[tcp_ESTABLISHED, tcp_TIME_WAIT, cpuload_1, cpuload_5, cpuload_15]
for i in iostat:
sum_list.append(i)
for v in mem:
sum_list.append(int(v)/1024)
testfile =open('/tmp/test.txt', 'a')
for value in sum_list:
testfile.write(str(value))
testfile.write("\t")
testfile.write("\n")
testfile.close()
------------------------------------------
2. 建立 test.sh文件,在里面填入:
------------------------------------------
#!/bin/bash
netstat -tanl | grepESTABLISHED | wc -l
netstat -tanl | grepTIME_WAIT | wc -l
------------------------------------------
并给予 test.sh 文件以执行权限:
$sudo chmod +x test.sh
3. 建立输出文件:
# touch /tmp/test.txt
4. 建立 start.sh文件,在里面填入
------------------------------------------
#!/bin/bash
while true ;do
pythontest.py
sleep1
done
------------------------------------------
5. 启动
$ bash start.sh &
需要保证除 test.txt 之外,其他文件都在一个文件夹下面
6. 停止:
a. 查找到后台进程的PID
$ps aux | grep start.sh
b.kill 掉进程
$kill -9 PID
7. 去重定向输出的txt文本中将TIME_WAIT,tcp_ESTABLISHED等这些服务器的指标参数粘贴到excel中,再通过excel的制图,可以很直观的分析这些数据。
因为以上的实验是在别的机器上做的,所以这儿没有以前的实验结果图了。
这是简单的脚本实现监控。再推荐一个很强大很好用的监控软件,Zabbix。我的课题前期测试是用第一个方法,最后正式实验是用zabbix的,在web中可以很直观的看到各项数据。zabbix的我是用别人写好的方法,直接访问web的,所以zabbix具体的使用就不写了。但可以说个大概的流程,如下:
被监控服务器: 上面写一个脚本。每次执行脚本就能获取当前内存的使用值。监控服务器: 上面跑一个程序,每分钟自动去 被监控服务器执行“查看内存使用脚本”,并且将值存储到数据库中,然后通过java 或者 php 将 mysql 里面的数据取出来进行展示。
zabbix 的大致实现就这样,zabbix agent 内部内置了很多监控项,还可以自定义监控项。然后监控的结果,zabbixserver 会根据规定的时候去获取。获取到了之后,zabbix server会将值存储到设置好的数据库里面去,zabbix 支持多种数据库,比较常用的就是 MySQL 。
粘几张我的zabbix监控来的实验图。可以看出来,非常清晰的。额,这些图用在我的论文中了,就不多粘了。