Python全栈项目--基于Python的网络监控工具

Python全栈项目--基于Python的网络监控工具 项目简介在企业内网、校园网络或小型机房中管理员经常需要知道服务器、网关、交换机、数据库主机等设备是否在线延迟是否异常故障是否已经被处理。本文实现一个“基于 Python 的网络监控工具”全栈项目后端提供用户认证、设备管理、网络探测、指标记录和告警接口前端提供注册登录、设备列表、仪表盘和告警处理页面。项目不是单纯演示 Ping 命令而是一个具备完整前后端结构、数据库持久化和鉴权保护的全栈应用可作为运维监控平台、资产管理系统或机房巡检系统的基础版本。技术栈后端FastAPI、SQLAlchemy、Pydantic、SQLite前端Vue 3、Vite、Fetch API、组件化单文件组件认证PBKDF2 密码哈希、Bearer Token、数据库 Token 吊销数据库SQLite本地文件自动创建部署运行Uvicorn 提供后端服务Vite 提供前端开发服务系统架构浏览器 / Vue 3 前端 │ │ HTTP JSON Bearer Token ▼ FastAPI API 服务 │ ├── Auth 模块注册、登录、退出、当前用户 ├── Device 模块监控设备 CRUD ├── Probe 模块ICMP Ping / TCP 探测 ├── Metric 模块检测结果与延迟记录 └── Alert 模块离线告警与处理 │ ▼ SQLite 数据库前端负责展示和交互后端负责业务规则和数据安全。除注册、登录、健康检查外设备、指标、告警和仪表盘接口都必须携带 Token。功能模块用户模块用户注册用户登录Token 保存和退出登录获取当前用户信息网络设备模块新增设备名称、IP/主机名、描述、检测间隔查询当前用户设备删除设备及其历史指标网络检测模块优先执行 ICMP Ping失败时尝试 TCP 80 端口连通性探测保存在线/离线、延迟、检测时间和消息告警模块设备离线自动生成 critical 告警查询告警列表标记告警已处理仪表盘模块设备总数在线设备数离线设备数平均延迟未处理告警数数据库/数据模型设计本项目使用 SQLite核心表如下表名说明关键字段users用户表username、email、hashed_passwordaccess_tokens登录令牌表token、user_id、revokeddevices监控设备表name、ip_address、last_status、owner_idmetrics检测指标表device_id、status、latency_ms、checked_atalerts告警表device_id、level、message、resolvedUser与Device是一对多关系Device与Metric、Alert也是一对多关系。这样每个用户只能看到自己的设备和告警满足多用户隔离需求。核心模型示例classDevice(Base):__tablename__devicesidColumn(Integer,primary_keyTrue,indexTrue)nameColumn(String(80),nullableFalse)ip_addressColumn(String(64),nullableFalse)descriptionColumn(Text,default)check_intervalColumn(Integer,default60)is_activeColumn(Boolean,defaultTrue)last_statusColumn(String(20),defaultunknown)last_latency_msColumn(Float,nullableTrue)last_checked_atColumn(DateTime,nullableTrue)owner_idColumn(Integer,ForeignKey(users.id),nullableFalse)后端接口设计后端 API 统一以/api开头方法地址说明是否需要登录GET/api/health健康检查否POST/api/auth/register注册否POST/api/auth/login登录否POST/api/auth/logout退出登录是GET/api/users/me当前用户是GET/api/dashboard仪表盘统计是GET/api/devices设备列表是POST/api/devices新建设备是PUT/api/devices/{device_id}更新设备是DELETE/api/devices/{device_id}删除设备是POST/api/devices/{device_id}/check立即检测是GET/api/devices/{device_id}/metrics检测历史是GET/api/alerts告警列表是POST/api/alerts/{alert_id}/resolve处理告警是鉴权依赖会解析请求头Authorization: Bearer token如果 Token 不存在、无效或已吊销接口返回 401。前端页面设计前端采用 Vue 3 Vite主要页面集中在App.vue中适合教学和二次拆分登录/注册区域通过标签切换登录和注册表单顶部 Banner展示项目名称和技术栈仪表盘卡片展示设备数量、在线数、离线数、平均延迟和告警数设备表单新增监控设备设备列表显示状态、延迟、最近检测时间并提供立即检测和删除按钮告警中心显示离线告警并支持标记处理API 请求统一封装在src/api.js中自动读取本地保存的 Token并加到请求头中。核心代码讲解1. 密码哈希与登录 Token后端没有明文保存密码而是使用标准库 PBKDF2 生成哈希defhash_password(password:str)-str:saltos.urandom(16).hex()digesthashlib.pbkdf2_hmac(sha256,password.encode(),salt.encode(),120_000).hex()returnfpbkdf2_sha256$120000${salt}${digest}登录成功后生成随机 Token并写入access_tokens表。退出登录时将 Token 标记为revokedTrue。2. 受保护接口FastAPI 通过依赖注入实现认证defget_current_user(token:strDepends(extract_token),db:SessionDepends(get_db)):usercrud.get_user_by_token(db,token)ifnotuser:raiseHTTPException(status_code401,detailToken 无效或已过期)returnuser之后只要在接口参数中加入current_user: models.User Depends(get_current_user)该接口就受到鉴权保护。3. 网络检测逻辑检测设备时系统先尝试 ICMP Ping。如果环境不支持 Ping 或 Ping 失败再尝试 TCP 80 端口探测defprobe_device(ip_address:str):resultsubprocess.run([ping,-c,1,-W,2,ip_address],capture_outputTrue,timeout3)ifresult.returncode0:returnonline,latency,ICMP Ping 成功ok,latency,message_tcp_probe(ip_address)return(online,latency,message)ifokelse(offline,None,message)检测完成后会更新设备最新状态并写入metrics表如果离线则生成告警。4. 前端鉴权请求src/api.js封装了统一请求方法asyncfunctionrequest(path,options{}){constheaders{Content-Type:application/json,...(options.headers||{})}consttokengetToken()if(token)headers.AuthorizationBearer${token}constresponseawaitfetch(${API_BASE}${path},{...options,headers})if(!response.ok)thrownewError(请求失败)returnresponse.json()}这样所有业务接口自动携带 Token前端页面不需要重复处理认证细节。部署与运行步骤项目源码位于project/目录。1. 启动后端cdbackend python3-mvenv .venvsource.venv/bin/activate pipinstall-rrequirements.txt uvicorn app.main:app--reload--host0.0.0.0--port8000后端默认地址http://127.0.0.1:8000。2. 启动前端cdfrontendnpminstallnpmrun dev前端默认地址通常是http://127.0.0.1:5173。3. 使用流程打开前端页面。注册新用户并登录。添加设备例如8.8.8.8、127.0.0.1或内网服务器 IP。点击“立即检测”查看在线状态和延迟。在告警中心处理离线告警。项目总结本文完成了一个完整的 Python 全栈网络监控工具涵盖后端 API、数据库模型、用户认证、设备管理、网络探测、指标记录、告警处理和 Vue 3 前端页面。项目结构清晰适合继续扩展定时巡检、邮件通知、企业微信告警、SNMP 采集、Prometheus 指标导出和 Grafana 可视化等功能。对于想学习 Python 全栈开发、FastAPI 接口设计、Vue 3 前端交互以及运维监控系统原型设计的同学这个项目可以作为一个完整的实战模板。项目代码下载链接