Skip to content

chn-lee-yumi/switch-monitor

Repository files navigation

广东工业大学交换机监控

  • 注:项目已交接。现在代码已用Java重写前端也移植到了别的框架。同时有了微信小程序版本的前端。该仓库应该不会有更新了。
  • 2019年1月31日记:学校新建了两栋楼,现在要监控的交换机数量为810台。
  • 2016年“数字校园”学生科技项目。(已结题,但仍在持续更新) (因即将毕业,以后应该不再更新。代码留给网管队技术组维护。)
  • 由于权限问题,目前只监控大学城校区学生宿舍的交换机和生活区核心交换机。未对教学区和其它校区的交换机进行适配。
  • 使用GPLv3开源协议。
  • 最新版本:v5.7.0

留下的坑

  • 在尝试使用uwsgi部署的时候,执行到扫描线程的pick = pickle.dumps(switch)时会卡住,原因未知。故生产环境部署无法成功
  • 目前部署在学校的云主机上,系统为CentOS,采用apache反向代理来访问交换机监控(开启了HTTPS)。(见SwitchMonitor_ApacheReverseProxy.conf
  • lib扫描模式内存溢出的问题暂时没有完美的解决办法,所以现在学校部署的参数是使用bin扫描模式(达到1分钟轮询约需要4核E7-4820)。

部署说明

设备

  • 推荐配置:

    • CPU:amd64,2核,>2GHz
    • 内存:1GB
  • 设备和性能

    • 云主机,E7-4820 v3,1核,达到轮询一次60s的性能时CPU使用率约75%(lib扫描模式,v5.4.0)
    • 在树莓派2B+超频到1020MHz的情况下,CPU满载可以达到轮询一次60s的性能(lib扫描模式,v5.3.0)(该设备存在CPU瓶颈)
    • 在树莓派3B默认频率1200MHz的情况下,达到轮询一次60s的性能时CPU使用率约50%(lib扫描模式,v5.3.0)
    • 最短轮询时间取决于交换机的CPU。当扫描线程数等于交换机总数的时候,有大量交换机CPU过载,轮询间隔约15s。
  • 注:

    • SwitchMonitor.service文件自行选用,用法见文件自身注释。

系统环境

  • 操作系统:Linux
  • 环境:Python3
  • 依赖包:flask、python3-netsnmp、psutil、requests

Debian系统部署(开发环境)

# 需要root权限
apt-get install python3 python3-pip snmp
pip3 install flask python3-netsnmp psutil requests
cd SwitchMonitor # 切换到监控所在目录
python3 SwitchMonitor.py # 运行

CentOS系统部署(开发环境)

# 需要root权限
yum install python34 python34-pip python34-devel net-snmp-utils
pip3 install flask python3-netsnmp psutil requests
cd SwitchMonitor # 切换到监控所在目录
python3.4 SwitchMonitor.py # 运行

生产环境部署(Debian+Nginx)

# 假设Nginx已经安装好了
# 需要root权限
apt-get install python3 python3-pip snmp
apt-get install uwsgi uwsgi-plugin-python3
pip3 install virtualenv
cp -r SwitchMonitor /var/www # 复制监控目录
cd /var/www/SwitchMonitor
# 配置虚拟环境
virtualenv venv
. venv/bin/activate
pip3 install flask python3-netsnmp psutil requests
# 复制配置文件(如果存在default配置文件,需要先删除)
ln -s /var/www/SwitchMonitor/SwitchMonitor_Nginx.conf /etc/nginx/conf.d/
# 启动uwsgi,uid=1000
uwsgi --ini /var/www/SwitchMonitor/SwitchMonitor_uwsgi.ini --uid 1000 -s /tmp/SwitchMonitor.sock --plugin python3
# 重新加载Nginx配置
nginx -s reload

生产环境部署(CentOS+Nginx)

# 假设Nginx已经安装好了
# 需要root权限
yum install python34 python34-pip python34-devel net-snmp-utils
yum install uwsgi uwsgi-plugin-python3
pip3 install virtualenv
cp -r SwitchMonitor /var/www # 复制监控目录
cd /var/www/SwitchMonitor
# 配置虚拟环境
virtualenv venv
. venv/bin/activate
pip3 install flask python3-netsnmp psutil requests
# 复制配置文件(如果存在default配置文件,需要先删除)
ln -s /var/www/SwitchMonitor/SwitchMonitor_Nginx.conf /etc/nginx/conf.d/
# 启动uwsgi,uid=1000
uwsgi --ini /var/www/SwitchMonitor/SwitchMonitor_uwsgi.ini --uid 1000 -s /tmp/SwitchMonitor.sock --plugin python3 --enable-threads
# 重新加载Nginx配置
nginx -s reload

参数说明

  • 必须要修改的参数:(Config.py)
    • WEB_USERNAME:网页用户名
    • WEB_PASSWORD:网页登录密码
    • SWITCH_PASSWORD:交换机密码
    • corpid:微信开放平台corpid
    • corpsecret:微信开放平台corpsecret
    • SNMP_READ_COMMUNITY:SNMP读取密码
    • SNMP_WRITE_COMMUNITY:SNMP写入密码
  • 默认报警参数(详见Config.py)
    • 交换机掉线5分钟后发送微信通知。
    • 每天下午18点发送统计信息。每天凌晨4点自动重启过载的交换机。
    • CPU过载阈值:80%
    • 内存过高阈值:80%
    • 温度过高阈值:60℃
  • 其它较为重要的参数
    • SCAN_THREADS:每个扫描进程的扫描线程数
    • SCAN_PROCESS:扫描进程数
    • 参考值:对于学校751台交换机,达到60秒一个轮询需要的线程数为80(我的配置为20*4)

更新日志

  • v5.7.0:
    • 前端页面美化(背景图片位于static\bg.jpg,可以自行修改或删除)
    • 增加日志查看和清除功能
    • 增加发送微信全体消息功能
    • 新增端口流量过大报警(测试功能,不纳入每日统计和微信报警,仅显示在网页上,因为流量时刻变化)
    • 现在普通账号也能进入配置页面,但是只能看,不能设置
    • 修复一些BUG
  • v5.6.0:
    • 部分代码重构
    • 新增HTTPS/HTTP选项
    • 新增SNMP扫描方式选项(使用库或可执行文件。使用库有内存泄漏的问题,但是扫描效率高;使用可执行文件扫描效率低,但没有BUG。)
    • 新增管理员账号。只有管理员才能进入Web配置页面
    • 交换机端口页面增加端口带宽数据
    • 一些小优化
    • 修复一些BUG
  • v5.5.0:
    • 部分代码重构
    • 新增微信是否启用的参数
    • 增加服务器自身内存监控功能(用于判断针对SNMP库的内存泄漏的替代解决方案是否出现异常)
    • 增加一键重启扫描进程的功能(针对SNMP库的内存泄漏的替代解决方案出BUG时的解决办法)
    • 修复一些BUG
  • v5.4.1:
    • 优化图表显示
  • v5.4.0:
    • 优化图表显示
    • 优化数据库写入和扫描任务发放的代码
    • 修复一些BUG
  • v5.3.0:
    • 部分代码重构
    • 现在使用多进程进行扫描,充分发挥多核性能
    • 修复一些BUG
  • v5.2.0:
    • 部分代码重构
    • 更新SNMP模块,提高速度
    • 优化网页交互体验
    • 修复一些BUG
  • v5.1.0:
    • 整合部分参数到配置文件
    • 性能调优,加快启动速度,减少CPU占用。
    • 现在交换机端口历史流量页面修改单位后不会重新获取数据,提高了相应速度。
    • 修复一些小BUG
  • v5.0.0:
    • 重构代码。

屏幕截图

登陆页面

login.png

主页

index.png

设备列表

devices.png

设备页面

device.png

端口列表

ports.png

端口页面

port.png

设置

settings.png