/performance_monitor

Monitor Linux system

Primary LanguagePythonMIT LicenseMIT

performace_monitor

介绍

已完成如下功能

1、监控整个服务器的CPU使用率、剩余内存大小、磁盘IO、网络带宽和TCP连接数
2、监控指定端口的CPU使用率、内存占用大小和TCP连接数
3、针对java应用,可以监控jvm大小和垃圾回收情况;当Full GC频率过高时,可发送邮件提醒
4、系统CPU使用率过高,或者剩余内存过低时,可发送邮件提醒;可设置自动清理缓存
5、可随时启动/停止监控指定端口
6、当端口重启后,可自动重新监控
7、可按照指定时间段可视化监控结果
8、自动按照百分位数计算出CPU、磁盘IO和带宽的数据
9、数据采样频率最高可达约1次/s,可设置任意采样频率
10、为保证监控结果准确性,直接使用Linux系统命令获取数据,且可视化时未做任何曲线拟合处理
11、可同时管理监控多台服务器

实现过程

1、使用基于协程的http框架aiohttp
2、服务端前端使用jinjia2模板渲染
3、采用线程池+队列的方式实现同时监控多个端口
4、客户端每隔5s向服务端注册本机IP和端口
5、服务端每隔5s会查询所有已注册的客户端的状态
6、使用influxDB数据库存储监控数据;数据可设置自动过期时间

使用

  1. 克隆 performance_monitor

    git clone https://github.com/leeyoshinari/performance_monitor.git

    server文件夹是服务端,只需部署一个即可;agent文件夹是客户端,部署在需要监控的服务器上

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

  3. 部署InfluxDB数据库。CentOS安装过程如下:
    (1)下载并安装
    wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.0.x86_64.rpm
    yum localinstall influxdb-1.8.0.x86_64.rpm
    (2)启动
    systemctl enable influxdb
    systemctl start influxdb
    (3)修改配置
    vim /etc/influxdb/influxdb.conf
    第256行左右,修改端口:bind-address = ":8086"
    重启
    (4)创建数据库
    create database 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核数、总内存和磁盘号
    slave home

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

    (3)主机(服务端)启动后,输入http://ip:port/startMonitor可以看到监控页面;点击开始监控按钮,即可在指定的服务器上开始监控指定的端口;点击停止监控按钮,即可在指定的服务器上停止监控指定的端口;点击获取监控列表按钮,可以查看当前已经监控的端口
    startMonitor

    (4)主机(服务端)启动后,输入http://ip:port/Visualize可以看到可视化页面;点击画图按钮,即可将指定服务器上的指定端口的监控数据可视化
    Visualize

打包

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

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

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

    pyinstaller 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即可找到可执行文件server;
    (4)将配置文件config.ini拷贝到dist/server文件夹下,并修改配置文件;
    (5)将模板文件templates和静态文件static拷贝到dist/server文件夹下;
    (6)将dist/server整个文件夹拷贝到其他环境,启动server

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

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

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

    nohup ./server &

注意

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

  2. 如果你不知道怎么在Linux服务器上安装好Python3.7+,请点我

  3. 如需查看最新的操作文档,可在运行程序后,查看教程即可。

  4. 如果你对监控要求不高,可以使用单机版,其对第三方模块依赖较少。如需获取,请切换至single分支,或点我

Requirements

  1. aiohttp>=3.6.2
  2. aiohttp_jinja2>=1.2.0
  3. jinja2>=2.10.1
  4. matplotlib<=3.2.0
  5. influxdb>=5.2.3
  6. requests
  7. Python 3.7+