性能测试工具 性能测试 - 基于 Python 的 Linux 服务器资源监控

leeyoshinari · 2021年02月14日 · 最后由 花菜 回复于 2021年02月16日 · 4195 次阅读

发现有不少童鞋 clone 了,如果有 bug 或者建议,欢迎在 issue 中提出哦。如果觉得不错,欢迎 star 哦!

--------------------------------------------------------------

目前常见的服务器资源监控工具存在监控指标不是性能测试想要的、监控频率太低(主要用于运维监控)、数据可视化操作不方便等问题,而在做性能测试时,服务器每一秒的资源使用情况都应该被记录下来,本人自己写了一套服务器资源监控工具,既可以做性能测试监控使用,也可以做运维监控使用,监控频率可任意设置,最高频率约为 1 次/s。详细介绍如下:

介绍

已完成如下功能

1、监控整个服务器的 CPU 使用率、io wait、内存使用、磁盘 IO、网络带宽和 TCP 连接数
2、监控指定端口的 CPU 使用率、上下文切换、内存占用大小、磁盘读写和 TCP 连接数
3、针对 java 应用,可以监控 jvm 大小和垃圾回收情况;当 Full GC 频率过高时,可发送邮件提醒
4、系统 CPU 使用率过高,或者剩余内存过低时,可发送邮件提醒;可设置自动清理缓存
5、可随时启动/停止监控指定端口
6、当端口重启后,可自动重新监控
7、支持运维监控,端口停止后,可发送邮件提醒
8、可直接在服务端停止客户端
9、可按照指定时间段可视化监控结果
10、自动按照百分位数计算出 CPU、磁盘 IO 和带宽的数据
11、数据采样频率最高可达约 1 次/s,可设置任意采样频率
12、可直接在页面查看服务器当前资源(CPU、内存、磁盘)使用情况
13、可同时管理监控多台服务器
14、服务端停止后,不影响客户端监控

实现过程

1、使用基于协程的 http 框架aiohttp
2、服务端前端使用jinjia2模板渲染
3、数据可视化采用echarts,可降低服务端压力
4、采用线程池 + 队列的方式实现同时监控多个端口
5、客户端每隔 8s 向服务端注册本机 IP 和端口
6、服务端每隔 10s 会查询所有已注册的客户端的状态
7、使用 influxDB 数据库存储监控数据;数据可设置自动过期时间
8、为保证监控结果准确性,直接使用 Linux 系统命令获取数据,且可视化时未做任何曲线拟合处理

使用

  1. 项目地址: performance_monitor
    欢迎大家 star 和 fork,https://github.com/leeyoshinari/performance_monitor
    server 文件夹是服务端,只需部署一个即可;agent 文件夹是客户端,部署在需要监控的服务器上

  2. 分别修改 server 和 agent 文件夹里的配置文件 config.ini

  3. 部署 InfluxDB 数据库。CentOS 安装过程如下:
    (1)下载并安装
    wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.3.x86_64.rpm
    yum localinstall influxdb-1.8.3.x86_64.rpm
    (2)启动
    systemctl enable influxdb
    systemctl start influxdb
    (3)修改配置
    vim /etc/influxdb/influxdb.conf
    第 256 行左右,修改端口:bind-address = ":8086"
    第 265 行左右,不打印日志:log-enabled = false
    重启
    (4)创建数据库
    create database test
    use test
    create user root with password '123456' 创建用户和设置密码
    grant all privileges on test to root 授权数据库给指定用户

  4. 分别运行 server 和 agent 文件夹中的server.py

    nohup python3 server.py &
    
  5. 页面访问
    (1)客户端启动后,输入http://ip:port可以看到页面显示服务器的 CPU 核数、总内存和磁盘号

(2)服务端启动后,输入http://ip:port/上下文可以看到首页,页面展示已经注册的从机(客户端)的 IP 和注册时间

(3)点击监控列表,可以看到监控页面;点击开始监控按钮,即可在指定的服务器上开始监控指定的端口;点击停止监控按钮,即可在指定的服务器上停止监控指定的端口;点击获取监控列表按钮,可以查看当前已经监控的端口

(4)点击可视化,可以看到可视化页面;点击画图按钮,即可将指定服务器上的指定端口的监控数据可视化

打包

pyinstaller 既可以将 python 脚本打包成 Windows 环境下的可执行文件,也可以打包成 Linux 环境下的可执行文件。打包完成后,可快速在其他环境上部署该监控服务,而不需要安装 python3.7+ 环境和第三方包。

pyinstaller 安装过程自行百度,下面直接进行打包:

  1. 打包 server
    (1) 安装好 python 环境,安装第三方包,确保程序可以正常运行;
    (2) 进入 server 文件夹,开始打包:

    pyinstaller -F server.py -p draw_performance.py -p config.py -p Email.py -p logger.py -p process.py -p request.py -p __init__.py --hidden-import draw_performance --hidden-import config --hidden-import logger --hidden-import Email --hidden-import process --hidden-import request
    

    打包过程可能提示缺少一些模块,请按照提示安装对应的模块
    (3) 打包完成后,在当前路径下会生成 dist 文件夹,进入dist即可找到可执行文件server;
    (4) 将配置文件config.ini拷贝到dist文件夹下,并修改配置文件;
    (5) 将模板文件templates和静态文件static拷贝到dist文件夹下;
    (6) 将dist整个文件夹拷贝到其他环境,启动 server

    nohup ./server &
    
  2. 打包 agent
    (1) 安装好 python 环境,安装第三方包,确保程序可以正常运行;
    (2) 进入 agent 文件夹,开始打包:

    pyinstaller -F server.py -p performance_monitor.py -p logger.py -p config.py -p common.py -p __init__.py --hidden-import logger --hidden-import performance_monitor --hidden-import common --hidden-import config
    

    (3) 打包完成后,在当前路径下会生成 dist 文件夹,进入dist即可找到可执行文件server;
    (4) 将配置文件config.ini拷贝到dist文件夹下,并修改配置文件;
    (5) 将dist整个文件夹拷贝到其他环境,启动 server

    nohup ./server &
    

    由于agent需要在待监控的服务器上运行,在CentOS系统X86架构的服务器上打包完成的可执行文件,只能运行在CentOS系统X86架构的服务器上;其他系统和架构的服务器需要重新打包。

注意

  1. 服务器必须支持以下命令:jstatiostatnetstat,如不支持,请安装。

  2. sysstat 的版本必须是 12+,目前测试过 12 的版本,其他版本未测试过,使用老版本可能会导致数据异常;最新版本下载地址请点我

  3. 当前程序几乎可以运行在任何可以运行 python 的 linux 系统上,已测试过的系统CentOSUbuntu中标麒麟银河麒麟,支持X86_64ARM架构。

Requirements

  1. aiohttp>=3.6.2
  2. aiohttp_jinja2>=1.2.0
  3. jinja2>=2.10.1
  4. influxdb>=5.2.3
  5. requests
  6. Python 3.7+
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞

很棒~已经 star

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册