51Testing软件测试论坛

标题: 自己实现了一个linux环境下的服务cpu mem的简易监控工具 [打印本页]

作者: haddis_123    时间: 2014-2-18 16:35
标题: 自己实现了一个linux环境下的服务cpu mem的简易监控工具
本帖最后由 haddis_123 于 2014-2-18 17:22 编辑

由于日常测试过程中经常会需要对linux环境下的服务做各种压力测试或者稳定性测试.
       而常见的监控工具更多的是针对服务器本身资源使用情况的监控,这样在同机器多服务的环境下很难将它们单个区分出来。
       自己使用golang+ html实现了一个简单的服务占用cpu mem实时统计工具,它包含的主要主要功能:
       1 . 定时轮询指定名称(或者指定端口)服务的cpu ,mem使用情况.(轮询间隔可自行指定,建议15秒或30秒)   ---  注意:对于多进程模型,本监控不再适应。
       2. 数据的存取. 目前只要进程存在,服务的cpu,mem使用情况会一直在内存中记录,进程结束后,数据全部消失。---  考虑到各种db并非在所有机器上都有部署,所以自己完成了数据存取的管理。
      3. 数据的展示. 自己实现一个简单的http server,将服务的占用情况通过html中图示的方法更加直观的展现出来。 ---  注意:图形化通过google chart api实现,需要联网环境,并且在大陆可能存在页面显示不稳定的问题。
      
      下面是一个图示统计展示的结果页面:
      [attach]89190[/attach]
      
      工具地址:https://github.com/chengzii/tyrael  (配置中各个参数可以在read.me中查看)
      bin 目录下 是二进制可执行程序(启动命令: nohup ./tyrael >/dev/null &      sh control.sh用于杀死进程的)
      conf 目录下 是配置文件    (主要配置包括: http server要**的端口,和查询的服务名或者服务端口,轮询周期 等)
      log 目录下 是执行过程生成的日志文件  (可以查询执行过程中,记录的服务资源统计结果)
      public 目录下 是html相关的js css img等内容存放目录
      tpl  目录下 是html页面文件
      src 目录下 是二进制可执行程序编译前的源码( golang实现)

      注意事项:
      1.  配置中获取指定端口的进程时,通过lsof命令实现的,你必须保持你机器上lsof是个全局命令(否则请安装 yum install lsof ;   ln -s  /usr/sbin/lsof /usr/bin/lsof)
      2.  工具启动时,会占用一个端口,请保证该端口在你的服务器上,还没有被占用。
      3.  工具统计的服务占用资源情况,都是通过top 命令获取的,也就是结果是一个当时的实时占用情况,一般来说它会和ps aux中统计的结果有很大不同,更多解释,请自行google.
      4.  由于工具在执行过程中,随着时间增加,更多结果数据会保存到内存中,所以它会对系统内存造成一定开销(很小,15秒间隔,3天的数据大概在百兆级别),建议工具执行时间,不超过5天。
      5.  服务启动后,在完成一次轮询后,就可以通过前端来查看统计的结果了,统计页面包括:  $ipport/line  ---- 整体结果的统计,页面见示例图 ;   $ipport/show  ----  某一瞬间服务的cpu mem占用率。

      完成这个工具的几个目的:
     1. 一来,自己没有找到针对服务的比较好的cpu mem监控工具。
     2. 二来,学了3、4个月的golang,感觉刚好这个工具的需求正好用来实践一下。(简易http server ,多线程,相对高效的内存管理这三个工具需求太适合用golang)  
     3. 三来,如果能给自己或者给别人带来一点点的方便,就更惊喜了。      

     欢迎大家进行更多交流、拍砖.  qq : 66461311
作者: 城邦    时间: 2014-7-23 11:44

作者: msnshow    时间: 2014-8-16 10:53
自已动手不错,不过感觉没有必要重复造轮子
作者: Miss_love    时间: 2014-8-27 08:57
自己都能写




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2