打造性能监控平台
在做性能测试的时候,你是如何监控被测试系统的硬件资源的,如果是云平台,那么一般提供的有可视化的监控信息,如果是本地服务,只能通过系统命令(如ps、top、lsof等)查看。
我们可以自己打造一个可视化的系统系统资源监控平台,本文就教大家如何实现。
准备工具:Flask:一个简单的web框架。psutil:用于获取本地硬件信息。flasksocketio:基于Flask框架的websocket库,用于建立长连接。echarts:用于实现各种图表的UI库。开始动手
下面介绍大体思路,文末有源码:制作一个监控页面。
https:themes。getbootstrap。com
booststrap提供了各种各样主题,年轻人不用讲武德,偷袭!不对,你可以抄袭一个过来。
具体方式就浏览器右键查看源码,复制粘贴,替换JS、CSS一气呵成!
制作图表
https:echarts。apache。orgzhindex。html
echarts是一个apache开源的图表UI库,可以帮你生成各种图表。
官方给的实例还是比较简单的,你可照着例子熟悉一个图表的配置。
获取系统资源
https:pypi。orgprojectpsutil
pstil用于获取本地硬件资源信息,CPU、内存、磁盘等信息。
简单的API:importpsutilpsutil。cputimes()psutil。cpucount()psutil。swapmemory()psutil。virtualmemory()。。。。实时获取系统资源
前端看到的数据一定要是实时的,动态的,那么就要求前端与后端保持数据的交互,websocket就是解决这类问题而生的。后端:
FlaskSocketIO
https:github。commiguelgrinbergFlaskSocketIO前端:
socket。io。js
https:socket。io
后端实现主要代码:importtimeimportpsutilfromflaskimportFlask,rendertemplate,session,requestfromflasksocketioimportSocketIO,emitfromthreadingimportLockappFlask(name,templatefolder。)app。config〔SECRETKEY〕secret!socketioSocketIO(app,corsallowedorigins)cputhreadNonecputhreadlockLock()app。route()defindex():Web页面returnrendertemplate(index。html)socketio。on(connect,namespacegetcpu)defcpuconnect():globalcputhreadwithcputhreadlock:ifcputhreadisNone:cputhreadsocketio。startbackgroundtask(targetcpubackgroundthread)defcpubackgroundthread():count0whileTrue:count1socketio。sleep(5)ttime。strftime(H:M:S,time。localtime())cpupsutil。cpupercent(intervalNone,percpuTrue)socketio。emit(serverresponse,{data:〔t,cpu〕,count:count},namespacegetcpu)ifnamemain:socketio。run(app,host127。0。0。1,port9090,debugTrue)
这里用到了多线程,每隔5秒向前端发送一次cpu信息。
前端实现的主要代码:
前端建立socket连接,等待服务器推送数据,用回调函数更新图表。
源码
感兴趣的可以查看源码:
https:github。comdefnngjlearningAPItesttreemastersysmonitoring