性能资源监控工具res-monitor设计思路与实现
一 前言
在性能测试中,对机器资源使用情况的监控几乎是必不可少的,如何从本地windows主机同时监控多台linux服务器的性能指标?如何方便、快捷、又近似实时的观察到每个被监控主机的运行情况,而不需要提前做侵入式的操作?这些问题就是我写res-monitor的初衷。
创新互联服务项目包括乌恰网站建设、乌恰网站制作、乌恰网页制作以及乌恰网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,乌恰网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到乌恰省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
二 res-monitor是什么?
res-monitor是轻量的多机性能指标监控工具,打开即用,无需在被监控主机安装所谓的 ”agent”, 完全基于linux自带命令,如top、free、dstat完成资源的监控和采集。 res-monitor的目标是用在性能测试中,方便、近似实时的监控多台服务器的性能指标数据,为后期的性能瓶颈定位或分析提供依据。
三 为什么不用nmon或其他监控系统?
没有说哪个工具不好用,主要考虑实际应用场景或需求。Nmon是一款方便、轻量、全面的资源监控工具,非常喜欢,它也是我写性能自动化框架中使用的资源监控工具。在那个框架工具中,实现了性能场景执行自动化、监控自动化、结果分析自动化,nmon的作用功不可没,公众号有篇文章对该框架的设计思路做过介绍,感兴趣可以关注了解。但在新环境、新项目测试时,需要每台机器提前部署nmon(其实很简单),而且一般需要保存数据用在测试报告中,所以通常使用nmon写入文件的方法,测试完成后再事后分析(当然nmon是支持命令交互实时输出的),这样就额外增加了整理、分析数据的工作量。可以粗略想一下,同时监控5台中间件的4大基础资源的后期时间成本,5个nmon文件4组指标(cpu\mem\net\io)1分钟(每项指标分析、求值)≈20分钟….
Glances\Nagios\Zabbix这类监控系统,虽然相当强大,但对我们日常性能测试显的过于笨重了,安装麻烦、而且很多被监控机器是未配置外网连接的,缺少什么或要更新什么都很费劲,不是一句yum或apt-get所能解决的。我更偏向”瑞士×××”等犀利、便携式的,能达到目的就行。
四 解决思路
Res-monitor应该是一款打开即用、无需被监控系统安装额外工具(除了top\free\dstat),这些命令都是linux发行包里自带的,当然如果真的没有,那就yum install –y xxx一下吧。
Res-monitor使用paramiko完成ssh连接和命令执行;这是python里成熟的ssh方案;
Res-monitor使用rrdtool存储数据和绘制图形,其中rrdtool是一款复杂却好用的环形数据库,后面有空专门介绍一下它;
Res-monitor使用logging完成操作日志记录,同时应该支持将每次监控数据保存;
Res-monitor使用html网页展示监控数据,使用js完成页面的自动刷新;
Res-monitor应该在某台监控出现异常时,主动停止所有机器的监控,设置一个用于保存状态的类变量即可解决;
Res-monitor需要考虑linux发行版、命令命令等不同造成的输出差异化,通过使用awk、cut、tail等完成输出形式的兼容性处理;
Res-monitor需要考虑多被监控服务器可能存在多网卡的情形、网卡、磁盘命名等可能差异较大。为了工具的通用性,网卡数据取total值,即不区分哪个网卡的流量;磁盘利用率,同样不区分磁盘,只统计采集时刻最大的利用率作为结果值,这样设计的考量是,性能测试中,如果最大值就在可接受范围,那结果就无需多关心,如果有异常,最终还是要靠性能人员去定位,而不是工具。
五 期望目标
Res-monitor可以轻松完成对多服务器的性能指标监控,无需额外安装,不依赖环境,打开即用,数据结果保存及图形化输出。
六 实现效果
如下图是监控一台linux服务器的结果,html报告近似实时输出cpu\mem\net\io数据和图形,只所以说是近似,是因为工具支持配置监控采集间隔,默认5s,间隔太短可能对性能有干扰。
其他资源
关于python学习、分享、交流,笔者开通了微信公众号【小蟒社区】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学python。
分享名称:性能资源监控工具res-monitor设计思路与实现
链接地址:http://azwzsj.com/article/pjgchj.html