基于机器学习的异常流量检测系统的设计与实现(原创)
这是系统(原创)的用户使用手册
需要完整代码,可以私信作者
第一部分 软件建设方案
一、目标概要
异常流量检测系统旨在通过主动监测与被动日志分析相结合的方式,实时监控网站的流量状况,及时发现并预警异常流量行为,为网站安全运营提供全方位保障。系统采用机器学习算法对流量数据进行分析和预测,能够精准识别流量异常、响应时间异常和错误率异常等情况,帮助用户及时处理潜在风险,提升网站的稳定性和安全性。
本系统具备易用性高、扩展性强、检测精准等特点,适用于各类需要对网站流量进行监控的企业和个人用户。通过直观的可视化界面,用户可以实时掌握网站的运行状态,查看历史数据趋势,制定有效的防护策略,从而降低因异常流量导致的业务中断风险。
二、系统建设方案
(一)建设基本流程
(1)需求分析阶段:深入调研用户对网站流量监控的实际需求,明确系统需要实现的核心功能,包括站点管理、流量监测、异常检测、数据预测等。
(2)技术选型阶段:基于需求分析结果,选择合适的技术栈。确定采用Python 3.10.6作为开发语言,Flask 3.1.2作为Web框架,SQLite作为数据库,并选用合适的Python库支持日志解析、机器学习等功能。
(3)系统设计阶段:进行系统架构设计,划分功能模块,设计数据库表结构,确定各模块之间的交互方式。制定日志监控、主动监测、流量预测等核心功能的实现方案。
(4)开发实现阶段:按照设计方案进行代码编写,实现系统的各项功能。包括用户界面开发、数据库操作、日志解析、异常检测算法实现、定时任务调度等。
(5)测试优化阶段:对系统进行全面测试,包括功能测试、性能测试、兼容性测试等。根据测试结果进行优化,修复存在的问题,提升系统的稳定性和准确性。
(6)部署上线阶段:编写部署文档,指导用户完成系统的安装和配置。提供详细的使用手册,帮助用户快速掌握系统的使用方法。
(二)计算机和网络环境
1.计算机环境
处理器:Intel Core i5及以上或同等性能的处理器;
内存:4GB及以上;
硬盘:至少10GB可用空间;
操作系统:Windows 7/8/10/11(32位或64位)、Linux(Ubuntu 18.04及以上、CentOS 7及以上)、macOS 10.14及以上。
2.网络环境
能够连接互联网,以便进行软件更新和数据同步。
局域网环境下,确保监测端与被监测站点之间网络通畅,无防火墙或网络策略限制监测请求。
(三)系统要求
1.Python版本
本系统基于Python 3.10.6开发,建议使用该版本以确保系统功能正常运行。其他Python 3.10.x版本可能兼容,但未经过全面测试,使用时可能出现未知问题。
2.Flask框架
采用Flask 3.1.2作为Web框架,该框架轻量灵活,便于开发和部署。系统依赖Flask的路由、模板渲染、请求处理等核心功能,以及Flask-SQLAlchemy扩展用于数据库操作。
3.SQLite数据库
使用SQLite作为系统的数据库,无需额外安装数据库服务,数据存储在本地文件中,便于部署和迁移。SQLite支持事务处理和ACID特性,能够满足系统对数据存储的基本需求。
4.使用的Python库
(1)numpy:用于数值计算,支持数组操作和数学函数,在机器学习算法和数据处理中广泛使用。
(2)pandas:提供数据结构和数据分析工具,用于处理和分析流量数据、日志数据等。
(3)scikit-learn:包含多种机器学习算法,系统中使用IsolationForest进行异常检测。
(4)requests:用于发送HTTP请求,实现对目标网站的主动监测。
(5)user-agents:解析用户代理字符串,提取浏览器和设备信息。
(6)watchdog:用于监控文件系统变化,实现对日志文件的实时监测。
(7)werkzeug:提供密码哈希和验证功能,保障用户密码安全。
(8)datetime:处理日期和时间,用于记录数据的时间戳和定时任务调度。
(9)threading:实现多线程功能,用于同时监测多个站点和处理并发任务。
(四)功能需求
(1)站点管理功能:支持添加、编辑、删除和查看站点信息。可以设置站点的名称、URL、描述、监测状态、检测类型等参数,以及日志文件路径和服务器类型等信息。
(2)流量监测功能:包括主动监测和被动捕获两种方式。主动监测通过定时请求目标网站获取流量数据;被动捕获通过解析网站的访问日志获取流量数据。监测内容包括流量值、响应时间、错误率等。
(3)异常检测功能:基于预设的阈值和机器学习算法,对监测到的流量数据进行分析,识别异常情况。异常类型包括流量异常、响应时间异常和错误率异常等,并记录异常发生的时间、详细信息和处理状态。
(4)流量预测功能:采用多种机器学习方法对未来60分钟的流量进行预测,为用户提供流量趋势参考。预测结果以图表形式展示,并标注异常风险范围。
(5)数据管理功能:对流量数据、异常记录等进行管理,支持查询、筛选、删除和导出为Excel文件等操作。
(6)用户管理功能:支持管理员添加、编辑、删除用户,设置用户角色(管理员和普通用户),管理用户的登录信息和操作权限。
(7)可视化展示功能:通过图表直观展示流量数据、响应时间、错误率等指标的变化趋势,以及异常记录和预测结果,帮助用户快速了解网站的运行状态。
三、软件设计开发说明
(一)总体架构说明
本系统采用分层架构设计,主要分为表现层、业务逻辑层和数据访问层,各层之间职责明确,通过接口进行交互,便于系统的维护和扩展。
1.表现层
主要由HTML模板和前端JavaScript代码组成,负责用户界面的展示和用户交互。通过Flask的模板渲染功能,将后端数据动态展示在前端页面上,实现响应式布局,适配不同的设备屏幕。
2.业务逻辑层
包含系统的核心业务逻辑处理,如站点管理、流量监测、异常检测、流量预测等。该层接收表现层传递的请求,进行相应的业务处理,调用数据访问层完成数据的操作,并将处理结果返回给表现层。
3.数据访问层
负责与数据库进行交互,实现数据的增删改查操作。通过Flask-SQLAlchemy ORM框架,将数据库表映射为Python类,简化数据库操作,提高代码的可读性和可维护性。
此外,系统还包含一些辅助模块,如日志解析模块、定时任务模块、机器学习模块等,这些模块为系统的核心功能提供支持。
(二)系统各层的功能与作用
1.表现层
功能:展示系统的用户界面,包括登录页面、dashboard页面、站点管理页面、流量数据页面、异常记录页面等。接收用户的操作请求,如点击按钮、填写表单等,并将请求传递给
2.业务逻辑层
作用:为用户提供直观、易用的操作界面,使用户能够方便地使用系统的各项功能,查看相关数据和信息。
3.业务逻辑层
(1)站点管理模块:处理站点的添加、编辑、删除、查询等操作,维护站点的基本信息和监测配置。
(2)流量监测模块:实现主动监测和被动捕获两种方式的流量数据采集,对采集到的数据进行预处理和分析。
(3)异常检测模块:根据预设的阈值和机器学习算法,对流量数据进行异常判断,记录异常信息并发出预警。
(4)流量预测模块:运用机器学习方法对未来流量进行预测,生成预测结果并进行展示。
(5)用户管理模块:管理用户的注册、登录、权限分配等操作,保障系统的安全性。
作用:实现系统的核心业务功能,协调各模块之间的工作,确保系统按照预期的逻辑运行。
4.数据访问层
(1)核心职责
基于Flask-SQLAlchemy ORM框架,实现数据库表与Python类的映射,封装数据的增删改查(CRUD)操作,向上层业务逻辑层提供统一的数据访问接口,屏蔽数据库底层实现细节(如SQL语句拼接、事务管理等),确保数据操作的安全性和一致性。
(2)设计原则:
每个数据模型对应一张数据库表,采用“主键自增”策略保证记录唯一性;
通过外键关联实现表间依赖,确保数据引用完整性(如流量数据必须关联存在的站点);
字段类型严格匹配业务需求(如时间用DateTime、数值用Float、布尔状态用Boolean),避免数据类型错误;
内置基础字段(如created_at、updated_at)记录数据生命周期,便于追溯和审计。
(3)数据模型概览
系统共设计6个核心数据模型,对应6张SQLite数据表,分别支撑站点管理、流量监测、异常检测、流量预测、用户管理和异常路径分析功能。各模型通过外键关联形成完整的数据链路,确保业务数据的关联性和可追溯性。
(4)各数据表结构详情(表格形式)
以下表格基于models.py中定义的模型类,详细说明每张表的字段名称、数据类型、主键/外键属性及业务含义:
数据表名称 | 字段名称 | 数据类型 | 主键/外键 | 备注(业务含义) |
User | id | Integer | 主键 | 用户唯一标识,自增 |
username | String(50) | 唯一 | 登录用户名,不可重复 | |
| String(100) | 唯一 | 用户邮箱,用于身份验证和通知(暂未实现通知功能) | |
password_hash | String(256) | - | 密码哈希值(采用Werkzeug加密,不存储明文) | |
is_admin | Boolean | - | 是否为管理员:True=管理员(拥有所有权限),False=普通用户(仅查看/处理部分数据) | |
created_at | DateTime | - | 用户创建时间(默认当前UTC+8时间) | |
updated_at | DateTime | - | 用户信息最后更新时间(修改邮箱/密码时自动更新) |
数据表名称 | 字段名称 | 数据类型 | 主键/外键 | 备注(业务含义) |
Site | id | Integer | 主键 | 站点唯一标识,自增 |
name | String(100) | 唯一 | 站点名称(如“留学中国”),不可重复 | |
url | String(256) | - | 站点访问URL(如“http://www.liuxuecn.cn”) | |
description | Text | - | 站点简要描述(可选,如“留学信息发布平台”) | |
is_monitored | Boolean | - | 是否启用主动监测:True=启用,False=停用 | |
detection_types | String(100) | - | 检测类型(逗号分隔字符串,如“traffic,response_time”,对应流量/响应时间/错误率检测) | |
traffic_threshold_min | Float | - | 流量最小值阈值(请求/分钟,低于此值判定为异常) | |
traffic_threshold_max | Float | - | 流量最大值阈值(请求/分钟,高于此值判定为异常) | |
response_time_threshold | Float | - | 响应时间阈值(秒,超过此值判定为异常) | |
error_rate_threshold | Float | - | 错误率阈值(0-1,超过此值判定为异常) | |
server_type | String(20) | - | 服务器类型(如“apache”“nginx”“iis”,用于日志解析) | |
log_path | String(256) | - | 日志文件路径(如“C:\Apache24\logs\access.log”,被动捕获日志时使用) | |
log_monitoring_enabled | Boolean | - | 是否启用日志被动捕获:True=启用,False=停用 | |
created_at | DateTime | - | 站点创建时间 | |
updated_at | DateTime | - | 站点信息最后更新时间 |
数据表名称 | 字段名称 | 数据类型 | 主键/外键 | 备注(业务含义) |
TrafficData | id | Integer | 主键 | 流量数据唯一标识,自增 |
site_id | Integer | 外键(关联Site.id) | 关联的站点ID,确保流量数据归属唯一站点 | |
timestamp | DateTime | - | 数据采集时间(按分钟聚合,如“2024-05-20 14:30:00”) | |
traffic | Float | - | 流量值(请求/分钟,主动监测+被动捕获累加) | |
response_time | Float | - | 平均响应时间(秒,主动监测时计算,被动捕获时默认0) | |
error_rate | Float | - | 错误率(0-1,按HTTP状态码计算:4xx/5xx为错误) | |
is_anomaly | Boolean | - | 是否为异常数据:True=异常,False=正常 | |
detection_method | String(20) | - | 检测方法:“rule-based”=主动监测,“log-based”=被动捕获 | |
ip_address | String(50) | - | 客户端IP地址(主动监测时为服务器IP,被动捕获时为访问者IP) | |
request_method | String(10) | - | HTTP请求方法(如“GET”“POST”) | |
request_path | String(256) | - | 请求路径(如“/admin/login”) | |
user_agent | String(256) | - | 用户代理(浏览器/设备信息,如“Chrome 120.0; Windows 10”) | |
status_code | Integer | - | HTTP响应状态码(如200=成功,404=页面不存在) |
数据表名称 | 字段名称 | 数据类型 | 主键/外键 | 备注(业务含义) |
Anomaly | id | Integer | 主键 | 异常记录唯一标识,自增 |
site_id | Integer | 外键(关联Site.id) | 关联的站点ID,定位异常所属站点 | |
timestamp | DateTime | - | 异常发生时间 | |
traffic | Float | - | 异常发生时的流量值 | |
response_time | Float | - | 异常发生时的响应时间 | |
error_rate | Float | - | 异常发生时的错误率 | |
anomaly_type | String(20) | - | 异常类型:“traffic”=流量异常,“response_time”=响应时间异常,“error_rate”=错误率异常,“log”=日志异常 | |
description | Text | - | 异常描述(如“流量超出阈值:当前180请求/分钟,阈值10-150”) | |
is_handled | Boolean | - | 是否处理:True=已处理,False=未处理 | |
handled_at | DateTime | - | 处理时间(未处理时为NULL) | |
handled_by | Integer | 外键(关联User.id) | 处理人ID(未处理时为NULL,关联处理用户) |
数据表名称 | 字段名称 | 数据类型 | 主键/外键 | 备注(业务含义) |
Prediction | id | Integer | 主键 | 预测记录唯一标识,自增 |
site_id | Integer | 外键(关联Site.id) | 关联的站点ID,定位预测所属站点 | |
predicted_timestamp | DateTime | - | 预测时间点(如“2024-05-20 15:00:00”,未来60分钟内的分钟级时间) | |
predicted_traffic | Float | - | 预测流量值(请求/分钟) | |
is_anomaly_risk | Boolean | - | 是否存在异常风险:True=有风险,False=无风险 | |
prediction_time | DateTime | - | 预测生成时间 | |
prediction_method | String(20) | - | 预测方法(如“ARIMA”“RandomForest”) | |
mae | Float | - | 平均绝对误差(评估预测准确性,值越小越准确) | |
rmse | Float | - | 均方根误差(评估预测准确性,值越小越准确) |
数据表名称 | 字段名称 | 数据类型 | 主键/外键 | 备注(业务含义) |
AnomalyPath | id | Integer | 主键 | 异常路径唯一标识,自增 |
site_id | Integer | 外键(关联Site.id) | 关联的站点ID,定位异常路径所属站点 | |
timestamp | DateTime | - | 异常访问时间 | |
ip_address | String(50) | - | 访问者IP地址 | |
request_method | String(10) | - | HTTP请求方法 | |
request_path | String(256) | - | 异常访问路径(如“/.env”“/admin”,通常为敏感路径) | |
status_code | Integer | - | HTTP响应状态码 | |
risk_level | String(10) | - | 风险等级:“高”(服务器错误/敏感路径)、“中”(客户端错误)、“低”(其他异常) |
(5)数据表关系说明
各数据表通过外键形成“1对多”的核心关联关系,以下采用Mermaid ER图直观展示表间依赖,并辅以文字解释关联逻辑:
表间关联逻辑详解:
1)User与Anomaly的关联(1→多)
关联字段:Anomaly.handled_by → User.id
逻辑:一个用户(尤其是管理员)可处理多条异常记录,一条异常记录仅由一个用户处理。未处理的异常记录中,handled_by为NULL,处理后自动填充当前登录用户的ID。
作用:追溯异常的处理人,便于责任划分和审计。
2)Site与TrafficData的关联(1→多)
关联字段:TrafficData.site_id → Site.id
逻辑:一个站点在运行过程中会产生多条流量数据(按分钟聚合,如每小时60条),一条流量数据仅归属一个站点。
作用:确保流量数据与站点一一对应,支持按站点筛选、统计流量趋势。
3)Site与Anomaly的关联(1→多)
关联字段:Anomaly.site_id → Site.id
逻辑:一个站点可能出现多次异常(如一天内多次流量超标),一条异常记录仅对应一个站点。
作用:定位异常所属站点,支持按站点查看异常历史、批量处理异常。
4)Site与Prediction的关联(1→多)
关联字段:Prediction.site_id → Site.id
逻辑:系统为每个站点单独生成未来60分钟的流量预测(每30分钟更新一次),一条预测记录仅对应一个站点。
作用:确保预测数据与站点匹配,支持在站点详情页展示专属的预测图表。
5)Site与AnomalyPath的关联(1→多)
关联字段:AnomalyPath.site_id → Site.id
逻辑:一个站点可能被多次异常访问(如多次探测敏感路径),一条异常路径记录仅对应一个站点。
作用:分析特定站点的异常访问特征(如高频访问IP、敏感路径),辅助安全防护。
5.辅助模块
(1)日志解析模块:解析不同类型服务器(Apache、Nginx、IIS)的访问日志,提取有用的流量数据。
(2)定时任务模块:通过多线程和定时调度机制,实现对目标网站的定时监测和数据采集。
(3)机器学习模块:包含异常检测和流量预测所使用的机器学习算法,如IsolationForest等,对数据进行分析和预测。
作用:为核心业务模块提供支持,扩展系统的功能,提高系统的性能和准确性。
(三)系统主要程序流程
1.日志监控原理
系统通过watchdog库监控指定的日志文件目录,当日志文件发生变化(如新增内容)时,触发文件修改事件。
日志解析器根据站点配置的服务器类型(Apache、Nginx、IIS),使用对应的解析规则对新增的日志内容进行解析。
解析过程中提取日志中的时间戳、IP地址、请求方法、请求路径、状态码等信息,转换为系统可识别的流量数据格式。
将解析后的流量数据存储到数据库中,同时进行异常检测。如果发现异常,记录异常信息并更新异常记录。具体而言,日志解析模块提取日志数据后,调用TrafficData模型的create()或update()方法,将数据写入数据库;若检测到异常,同步调用Anomaly和AnomalyPath模型的create()方法,关联site_id保存异常信息。
2.从网站的访问日志中获取(被动捕获)原理
用户在添加或编辑站点时,设置网站的日志文件路径和服务器类型。
系统启动后,根据站点配置的日志路径和服务器类型,初始化日志文件监控器。
监控器实时监测日志文件的变化,当有新的日志内容写入时,调用相应的日志解析器进行解析。
解析得到的流量数据包括时间戳、IP地址、请求方法、请求路径、状态码、流量值等信息,这些数据被存储到TrafficData表中。
系统定期对被动捕获的流量数据进行分析,与预设的阈值进行比较,判断是否存在异常。如果存在异常,创建异常记录并标记为未处理。
3.定时请求目标网站(主动监测)原理
用户在添加或编辑站点时,可选择启用主动监测功能,并设置监测的时间间隔。
系统启动后,对于启用主动监测的站点,创建一个独立的监测线程。
监测线程按照设定的时间间隔,使用requests库向目标网站发送HTTP请求,模拟用户访问。
记录请求的响应时间、状态码等信息,计算单位时间内的流量值和错误率。
将主动监测得到的流量数据存储到TrafficData表中,并进行异常检测。如果检测到异常,生成异常记录。
监测线程可以根据站点的监测状态(启用/禁用)进行启动或停止,确保只对需要监测的站点进行主动请求。
4.未来流量预测(60分钟)各种机器学习方法及原理
(1)数据准备:系统从数据库中获取历史流量数据,包括时间戳和对应的流量值。对数据进行预处理,如缺失值填充、异常值处理、数据归一化等,确保数据的质量和一致性。
(2)特征工程:提取时间特征,如小时、分钟、是否为节假日等,作为机器学习模型的输入特征。将历史流量数据按照时间序列划分为训练集和测试集。
(3)模型选择与训练:
1)线性回归:假设流量数据与时间特征之间存在线性关系,通过最小二乘法拟合线性模型,预测未来流量。适用于流量趋势较为平稳的情况。
2)ARIMA模型:一种时间序列预测方法,考虑数据的自相关性和移动平均特性,适用于具有季节性和趋势性的流量数据预测。
3)随机森林:基于多棵决策树的集成学习方法,能够处理非线性关系和复杂的特征交互,具有较高的预测精度和泛化能力。
4)IsolationForest:虽然主要用于异常检测,但也可用于流量预测,通过隔离异常点来提高正常流量数据的预测准确性。
(4)模型评估:使用平均绝对误差(MAE)、均方根误差(RMSE)等指标对模型的预测效果进行评估,选择性能最优的模型作为最终的预测模型。
(5)预测执行:使用训练好的模型对未来60分钟的流量进行预测,得到每个时间点的预测流量值。将预测结果存储到Prediction表中,并在前端页面以图表形式展示,同时标记出异常风险范围。
预测模块先通过TrafficData模型查询目标站点最近48小时的历史数据(按site_id和timestamp排序),训练模型后生成预测结果,调用Prediction模型的bulk_create()方法批量写入未来60分钟的预测数据(先删除旧预测,避免数据冗余)。
(四)程序树形结构说明
整个系统的程序树形结构说明如下:
ml-anomaly-traffic-detector/
├── app.py # 系统主程序,包含Flask应用初始化、路由定义、核心业务逻辑等
├── models.py # 数据模型定义,包括Site、TrafficData、Anomaly等数据库表的映射类
├── start_matd.bat # Windows系统下的启动脚本
├── system_logs.txt # 系统运行日志文件
├── matd-venv/ # Python虚拟环境目录
├── static/ # 静态资源目录
│ ├── css/ # CSS样式文件目录
│ │ ├── bootstrap.min.css # Bootstrap框架的CSS文件
│ │ ├── bootstrap-icons.css # Bootstrap图标CSS文件
│ │ └── fonts/ # 字体文件目录
│ └── js/ # JavaScript脚本文件目录
├── templates/ # HTML模板目录
│ ├── base.html # 基础模板,定义页面的整体布局
│ ├── dashboard.html # 系统总览页面模板
│ ├── login.html # 登录页面模板
│ ├── anomalies_list.html # 异常记录管理页面模板
│ ├── traffic_data_list.html # 流量数据记录管理页面模板
│ ├── site_list.html # 站点管理页面模板
│ ├── site_detail.html # 站点详情页面模板
│ ├── add_site.html # 添加站点页面模板
│ ├── users.html # 用户管理页面模板
│ ├── user_list.html # 用户列表页面模板
│ ├── edit_user.html # 编辑用户页面模板
│ └── anomaly_paths_list.html # 异常路径记录页面模板
└── anomaly_detection.db # SQLite数据库文件
第二部分 用户使用手册
一、系统安装说明
(一)概述
本系统基于Python 3.10.6开发,采用Flask 3.1.2框架和SQLite数据库,支持Windows、Linux(Ubuntu/CentOS)、macOS三大主流操作系统。安装过程已进行简化设计,核心分为“环境准备→依赖安装→系统启动”三步,同时提供Windows批处理脚本(.bat)实现一键启动,降低非技术用户的操作门槛。核心优势:无需部署独立数据库服务(SQLite为文件型数据库)、虚拟环境隔离依赖(避免与其他Python项目冲突)、跨平台命令适配(不同系统均提供专属操作指南)。
1.前期准备
在开始安装前,需完成以下基础准备工作,确保后续步骤无阻碍:
(1)确认Python版本打开系统终端(Windows:CMD/PowerShell;Linux/macOS:Terminal),输入以下命令检查Python版本:
python --version # 或 python3 --version(Linux/macOS)
若输出“Python 3.10.6”,直接进入下一步;若版本不符,需从Python官网下载并安装3.10.6版本(安装时需勾选“Add Python 3.10 to PATH”,确保环境变量配置)。
(2)下载项目文件将系统项目包(含app.py、models.py、templates/、static/等)解压至本地目录,建议路径无中文和特殊字符,示例路径:
Windows:C:\ml-anomaly-traffic-detector
Linux/macOS:~/ml-anomaly-traffic-detector
2.创建Python虚拟环境(隔离依赖)
虚拟环境可避免系统Python环境的依赖冲突,建议在项目根目录内创建专属虚拟环境,步骤分操作系统适配:
(1)Windows系统(CMD/PowerShell)
①打开终端,进入项目根目录(以路径C:\ml-anomaly-traffic-detector为例):
# CMD命令
cd C:\ml-anomaly-traffic-detector
# PowerShell命令(若提示权限不足,右键以“管理员身份运行”)
Set-Location -Path "C:\ml-anomaly-traffic-detector"
②创建虚拟环境(命名为matd-venv,与项目树形结构一致):
python -m venv matd-venv
执行后,项目根目录会生成matd-venv文件夹,内含独立的Python解释器和依赖目录。
③激活虚拟环境:
CMD环境:
matd-venv\Scripts\activate.bat
PowerShell环境:
.\matd-venv\Scripts\Activate.ps1
激活成功后,终端前缀会显示(matd-venv),表示当前操作在虚拟环境内进行。
(2)Linux/macOS系统(Terminal)
①进入项目根目录(以路径~/ml-anomaly-traffic-detector为例):
cd ~/ml-anomaly-traffic-detector
②创建虚拟环境:
python3 -m venv matd-venv
③激活虚拟环境:
source matd-venv/bin/activate
激活成功后,终端前缀会显示(matd-venv)。
3.安装依赖库(基于requirements.txt)
系统依赖的Python库需通过pip安装,为确保版本兼容,需先在项目根目录创建requirements.txt文件,完整列出依赖及版本(与代码适配,避免版本冲突)。
(1)创建requirements.txt文件
在项目根目录新建文本文件,命名为requirements.txt,粘贴以下内容(含所有必要依赖及版本):
# Web框架
Flask==3.1.2
Flask-SQLAlchemy==3.1.1
Werkzeug==2.3.7
# 数据处理与机器学习
numpy==1.26.4
pandas==2.1.4
scikit-learn==1.3.2
# 日志监控与网络请求
watchdog==3.0.0
requests==2.31.0
user-agents==2.2.0
# Excel导出与图表
openpyxl==3.1.2
pandas==2.1.4
chart.js==4.4.8 # 前端图表库(通过CDN加载,此处仅标注版本)
# 其他工具
python-dotenv==1.0.0 # 环境变量管理(可选,用于生产环境)
(2)执行安装命令
在激活虚拟环境的终端中,输入以下命令安装依赖:
# 基础安装命令
pip install -r requirements.txt
# (可选)国内用户建议使用清华源,加速安装(避免网络超时)
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
(3)安装验证
安装完成后,输入以下命令检查关键库版本,确认无遗漏:
pip list | findstr "Flask pandas scikit-learn requests watchdog" # Windows
pip list | grep -E "Flask|pandas|scikit-learn|requests|watchdog" # Linux/macOS
若输出各库名称及对应版本(与requirements.txt一致),则依赖安装成功;若提示“找不到模块”,需重新执行安装命令,或单独安装缺失库(如pip install Flask==3.1.2)。
4. 运行系统(手动启动方式)
依赖安装完成后,通过以下步骤启动系统,适用于所有操作系统:
(1)激活虚拟环境(若已关闭终端,需重新激活)
Windows(CMD):C:\ml-anomaly-traffic-detector\matd-venv\Scripts\activate.bat
Linux/macOS:source ~/ml-anomaly-traffic-detector/matd-venv/bin/activate
(2)进入项目根目录
# Windowscd C:\ml-anomaly-traffic-detector
# Linux/macOScd ~/ml-anomaly-traffic-detector
(3)启动系统
执行主程序app.py:
python app.py # Windows
python3 app.py # Linux/macOS
(4)启动验证
控制台输出:若显示“√ 数据库表创建完成”“√ 站点1监测线程已启动”“日志监控已启动”“启动定时预测任务...”等信息,说明系统启动成功。
访问系统:打开浏览器,输入地址http://localhost:5004(系统默认端口为5004,在app.py最后一行app.run(host='0.0.0.0', port=5004)可修改),会跳转至登录页面。
默认登录:初始默认管理员账号为admin,密码为admin123(首次登录建议立即修改密码,路径:登录后→右上角用户名下拉→“修改密码”)。
5.一键启动(Windows批处理脚本/.bat文件)
为简化Windows用户的启动流程,可创建批处理脚本(.bat),实现“双击启动”,无需每次手动输入命令。
(1)创建批处理脚本
①在项目根目录(C:\ml-anomaly-traffic-detector)新建文本文件,命名为start_matd.bat(注意后缀为.bat,而非.txt)。
②用记事本打开start_matd.bat,粘贴以下内容(需根据实际项目路径修改,示例路径为C:\ml-anomaly-traffic-detector):
@echo off
echo ==============================================
echo 异常流量检测系统 - 一键启动脚本(Windows)
echo 系统端口:5004,访问地址:http://localhost:5004
echo 默认账号:admin,默认密码:admin123
echo ==============================================
echo.
:: 1. 激活虚拟环境(需替换为实际虚拟环境路径)
echo [1/3] 激活Python虚拟环境...
call C:\ml-anomaly-traffic-detector\matd-venv\Scripts\activate.bat
if %errorlevel% neq 0 (
echo 虚拟环境激活失败!请检查路径是否正确。
pause
exit /b 1
)
echo 虚拟环境激活成功(当前环境:%VIRTUAL_ENV%)
:: 2. 进入项目根目录(需替换为实际项目路径)
echo.
echo [2/3] 进入项目目录...
cd /d C:\ml-anomaly-traffic-detector
if %errorlevel% neq 0 (
echo 进入项目目录失败!请检查路径是否正确。
pause
exit /b 1
)
echo 当前目录:%cd%
:: 3. 启动系统
echo.
echo [3/3] 启动异常流量检测系统...
python app.py
if %errorlevel% neq 0 (
echo 系统启动失败!请检查Python环境或依赖库。
pause
exit /b 1
)
:: 防止启动后终端自动关闭(可选,如需关闭系统,按Ctrl+C→输入Y确认)
pause
(2)使用脚本启动系统
① 保存start_matd.bat后,双击该文件(无需以管理员身份运行,除非路径在C盘根目录等需权限的位置)。
②脚本会自动执行“激活虚拟环境→进入项目目录→启动系统”,控制台输出与手动启动一致,启动后直接访问http://localhost:5004即可。
③关闭系统:在批处理窗口按Ctrl+C,输入Y确认终止进程,窗口会自动关闭(或保留pause命令,手动关闭窗口)。
(补充)Linux/macOS一键启动(Shell脚本)
Linux/macOS用户可创建Shell脚本(start_matd.sh)实现类似功能,步骤如下:
①在项目根目录创建start_matd.sh,内容:
#!/bin/bashe
cho "=============================================="
echo " 异常流量检测系统 - 一键启动脚本(Linux/macOS)"
echo " 系统端口:5004,访问地址:http://localhost:5004"
echo " 默认账号:admin,默认密码:admin123"
echo "=============================================="
echo ""
# 1. 激活虚拟环境echo "[1/3] 激活Python虚拟环境..."
source ~/ml-anomaly-traffic-detector/matd-venv/bin/activate
if [ $? -ne 0 ]; then
echo "虚拟环境激活失败!请检查路径是否正确。"
exit 1
fi
echo "虚拟环境激活成功(当前环境:$VIRTUAL_ENV)"
# 2. 进入项目目录
echo ""
echo "[2/3] 进入项目目录..."
cd ~/ml-anomaly-traffic-detector
if [ $? -ne 0 ]; then
echo "进入项目目录失败!请检查路径是否正确。"
exit 1
fi
echo "当前目录:$(pwd)"
# 3. 启动系统
echo ""
echo "[3/3] 启动异常流量检测系统..."
python3 app.py
if [ $? -ne 0 ]; then
echo "系统启动失败!请检查Python环境或依赖库。"
exit 1
fi
② 赋予脚本执行权限:chmod +x start_matd.sh
③ 启动:./start_matd.sh
6. 常见安装问题排查
(1)虚拟环境激活失败
问题 1:Windows提示“matd-venv\Scripts\activate.bat不是内部或外部命令”
解决:检查路径是否正确,需进入项目根目录后执行激活命令,或使用绝对路径(如call C:\ml-anomaly-traffic-detector\matd-venv\Scripts\activate.bat)。
问题 2:Linux提示“source:未找到命令”
解决:使用Bash终端(而非Sh),执行bash切换终端后再激活。
(2)依赖安装失败
问题:pip install超时或报错“Could not find a version that satisfies the requirement”
解决:1. 使用国内源(如清华源:-i https://pypi.tuna.tsinghua.edu.cn/simple);2. 升级 pip:python -m pip install --upgrade pip;3. 手动下载whl文件安装(如numpy从Unofficial Windows Binaries下载,再pip install文件名.whl)。
(3)系统启动后端口被占用
问题:控制台提示“OSError: [WinError 10048] 通常每个套接字地址 (协议/网络地址/端口)只允许使用一次”
解决:1. 关闭占用5004端口的程序(Windows:netstat -ano | findstr :5004找到 PID,任务管理器结束对应进程);2. 修改app.py中app.run(port=5004)的端口为其他未占用值(如 5005)。
(4)登录后页面样式错乱(无 CSS / 图标)
问题:页面无样式,控制台提示“404 Not Found”(静态资源加载失败)
解决:检查static/目录是否存在(含css/、js/文件夹),确保base.html中静态资源路径正确(如{{ url_for('static', filename='css/bootstrap.min.css') }}),无需修改路径,默认与项目树形结构匹配。
(二)适用范围
本系统适用于需要对网站流量进行监测和异常检测的企业管理员、网站运维人员、安全人员等。无论是小型个人网站还是大型企业网站,都可以通过本系统实现对网站流量的实时监控和管理。
(三)系统运行环境说明
1.硬件环境
处理器:Intel Core i5及以上或同等性能的处理器;
内存:4GB及以上;
硬盘:至少10GB可用空间。
2.软件环境
操作系统:Windows 7/8/10/11(32位或64位)、Linux(Ubuntu 18.04及以上、CentOS 7及以上)、macOS 10.14及以上;
Python:3.10.6版本;
浏览器:Google Chrome 80及以上、Mozilla Firefox 75及以上、Microsoft Edge 80及以上、Safari 13及以上。
3.网络环境
能够连接互联网,以便下载和安装所需的Python库;
监测端与被监测站点之间网络通畅,无防火墙或网络策略限制。
二、系统操作说明
(一)总览
1.登录系统
打开浏览器,在地址栏中输入系统的访问地址(如http://localhost:5000),进入系统登录页面。
在登录页面中,输入用户名和密码,点击“登录”按钮。默认管理员账号: admin / admin123。如果用户名和密码正确,将进入系统的dashboard页面;否则,将提示错误信息,需要重新输入。
2.dashboard页面
dashboard页面是系统的总览页面,展示了系统的关键信息,包括总站点数、正在监测的站点数、未监测的站点数和未处理异常数等统计数据,以卡片形式呈现。
页面下方展示了最近未处理的异常记录,用户可以快速了解系统的异常情况。
从dashboard页面,用户可以通过点击相应的链接跳转到其他功能页面,如站点管理、异常记录管理等。
(二)站点管理
1.站点列表
登录系统后,点击导航栏中的“站点管理”选项,进入站点列表页面。
站点列表页面以表格形式展示所有已添加的站点信息,包括站点名称、URL、监测状态、检测类型、创建时间和操作选项。
在表格中,“监测状态”列显示站点是否正在被监测,“正在监测”以绿色徽章表示,“未监测”以灰色徽章表示。
“操作”列提供了查看详情、编辑和删除站点的选项,用户可以根据需要进行相应操作。
2.添加站点
在站点列表页面,点击右上角的“添加新站点”按钮,进入添加站点页面。
在添加站点页面,需要填写以下信息:
(1)站点名称:输入站点的名称,要求唯一。
(2)URL:输入站点的访问地址,如http://www.example.com。
(3)描述:可选,输入对站点的简要描述。
(4)服务器类型:选择站点所使用的服务器类型,如Apache、Nginx、IIS。
(5)日志文件路径:输入站点访问日志的完整路径,如C:\Apache24\logs\access.log。
(6)启用监测:勾选该选项,添加站点后将立即开始监测。
(7)检测类型:可多选,包括流量异常、响应时间异常、错误率异常。
(8)阈值设置:设置流量范围(最小值和最大值)、响应时间上限、错误率上限。
填写完毕后,点击“提交”按钮。如果信息填写正确,站点将被成功添加,并跳转到站点列表页面;否则,将提示错误信息,需要重新填写。
3.编辑站点
在站点列表页面,找到需要编辑的站点,点击“操作”列中的“编辑”按钮,进入编辑站点页面。
编辑站点页面的表单内容与添加站点页面类似,用户可以修改站点的各项信息,包括名称、URL、描述、服务器类型、日志文件路径、监测状态、检测类型和阈值设置等。
修改完毕后,点击“提交”按钮,保存修改内容。系统将更新站点信息,并跳转到站点列表页面。
4.删除站点
在站点列表页面,找到需要删除的站点,点击“操作”列中的“删除”按钮。
系统将弹出确认删除的提示框,询问用户是否确定删除该站点。点击“确定”按钮,站点将被删除,同时与该站点相关的流量数据、异常记录等也将被删除;点击“取消”按钮,取消删除操作。
5.查看站点详情
在站点列表页面,找到需要查看详情的站点,点击“操作”列中的“详情”按钮,进入站点详情页面。
站点详情页面展示了站点的详细信息,包括基本信息、检测类型、阈值设置等。
页面中还包含流量监测图表、响应时间监测图表、错误率监测图表,分别展示了不同指标的变化趋势。
此外,页面还展示了该站点的异常记录和异常访问路径分析,用户可以查看详细的异常信息和处理状态。
6.定时请求目标网站(主动监测)的启动与关闭
在添加或编辑站点时,通过勾选或取消勾选“启用监测”选项,可以设置主动监测的启动与关闭。
在站点详情页面,也可以找到主动监测的状态开关,点击开关可以切换主动监测的状态。当开关处于开启状态时,系统将按照设定的时间间隔对目标网站进行定时请求;当开关处于关闭状态时,主动监测停止。
7.从网站的访问日志中获取(被动捕获)的启动与关闭
在添加或编辑站点时,设置了日志文件路径和服务器类型后,被动捕获功能默认启用。
在站点详情页面,可以找到日志监控的开关,点击开关可以开启或关闭被动捕获功能。当开关开启时,系统将实时监控日志文件的变化,解析日志数据;当开关关闭时,被动捕获停止。
8.未来流量预测(60分钟)
在站点详情页面,找到流量预测相关的区域,系统会自动展示未来60分钟的流量预测图表。
预测图表中,蓝色线条表示预测的流量值,红色区域表示异常风险范围。
用户可以查看预测方法、平均绝对误差(MAE)和均方根误差(RMSE)等信息,了解预测的准确性。每切换一种方法,都进行实时计算。
系统每30分钟更新一次预测结果,确保预测数据的时效性。
(三)流量数据管理
1.查看流量数据列表
点击导航栏中的“流量数据”选项,进入流量数据记录管理页面。
页面以表格形式展示流量数据记录,包括站点名称、流量值、响应时间、错误率、异常状态、检测方法、记录时间等信息。
用户可以通过筛选条件对流量数据进行筛选,如按站点、时间范围、异常状态等进行筛选。在筛选表单中选择相应的条件,点击“查询”按钮,表格将显示符合条件的流量数据。
2.删除流量数据
(1)单条删除:在流量数据表格中,找到需要删除的记录,点击“操作”列中的“删除”按钮,系统弹出确认提示框,点击“确定”删除该记录。
(2)批量删除:勾选多条需要删除的记录前的复选框,点击页面上方的“批量删除”按钮,系统弹出确认提示框,点击“确定”删除所选记录。
3.导出流量数据
在流量数据记录管理页面,设置好筛选条件后,点击“导出筛选结果”按钮。
系统将按照当前的筛选条件,将符合条件的流量数据导出为Excel文件,保存到本地计算机。用户可以使用Excel等软件打开该文件,查看和分析流量数据。
4.查看流量数据
在流量数据记录管理页面,点击“详情”按钮。
(四)异常记录
1.查看异常记录列表
点击导航栏中的“异常记录”选项,进入异常记录管理页面。
页面以表格形式展示异常记录,包括站点名称、异常发生时间、异常类型、流量值、响应时间、错误率、处理状态等信息。
用户可以通过筛选条件对异常记录进行筛选,如按站点、异常类型、处理状态、时间范围等进行筛选。设置筛选条件后,点击“查询”按钮,表格将显示符合条件的异常记录。
2.处理异常记录
单条处理:在异常记录表格中,找到未处理的异常记录,点击“操作”列中的“标记为已处理”按钮,进入异常处理页面。在页面中填写处理意见,点击“确定”按钮,将该异常记录标记为已处理。
批量处理:勾选多条未处理的异常记录前的复选框,点击页面上方的“批量标记为已处理”按钮,系统弹出确认提示框,点击“确定”将所选异常记录标记为已处理。
已处理之后,会显示处理人和处理时间。
3.删除异常记录
单条删除:在异常记录表格中,找到需要删除的记录,点击“操作”列中的“删除”按钮,系统弹出确认提示框,点击“确定”删除该记录。
批量删除:勾选多条需要删除的记录前的复选框,点击页面上方的“批量删除”按钮,系统弹出确认提示框,点击“确定”删除所选记录。
4.导出异常记录
在异常记录管理页面,设置好筛选条件后,点击“导出筛选结果”按钮。
系统将按照当前的筛选条件,将符合条件的异常记录导出为Excel文件,保存到本地计算机。
5.异常路径管理
点击异常记录管理页面中的“异常路径记录”按钮,进入异常路径记录页面。
页面以表格形式展示异常路径记录,包括访问时间、IP地址、请求方法、访问路径、状态码等信息。
用户可以通过筛选条件对异常路径记录进行筛选,如按站点、时间范围等进行筛选。
支持对异常路径记录进行删除和导出操作,操作方法与异常记录的删除和导出类似。
(五)用户管理
1.查看用户列表
只有管理员用户可以访问用户管理功能。管理员登录系统后,点击导航栏中的“用户管理”选项,进入用户列表页面。
页面以表格形式展示所有用户信息,包括用户名、邮箱、角色、创建时间、最后登录时间等。
角色分为管理员和普通用户,管理员以蓝色徽章表示,普通用户以灰色徽章表示。
2.添加用户
在用户列表页面,点击右上角的“添加新用户”按钮,进入添加用户页面。
在添加用户页面,需要填写以下信息:
(1)用户名:输入新用户的用户名,要求唯一。
(2)邮箱:输入用户的邮箱地址。
(3)密码:设置用户的登录密码。
(4)角色:选择用户的角色,管理员或普通用户。
填写完毕后,点击“提交”按钮。如果信息填写正确,用户将被成功添加,并跳转到用户列表页面。
3.编辑用户
在用户列表页面,找到需要编辑的用户,点击“操作”列中的“编辑”按钮,进入编辑用户页面。
在编辑用户页面,可以修改用户的邮箱、角色等信息。用户名不可修改,密码可以选择修改或保持不变。
修改完毕后,点击“提交”按钮,保存修改内容。
4.删除用户
在用户列表页面,找到需要删除的用户,点击“操作”列中的“删除”按钮。
系统将弹出确认删除的提示框,点击“确定”按钮删除该用户;点击“取消”按钮,取消删除操作。需要注意的是,管理员用户不能删除自己。
5.用户登录与退出
普通用户和管理员用户都可以通过登录页面输入用户名和密码登录系统。
登录系统后,点击导航栏右上角的用户名,在下拉菜单中选择“退出登录”选项,即可退出系统,返回登录页面。
6.修改密码
可以通过用户名的下拉窗,即可看到。
(六)各功能之间的关联关系
(1)站点管理与流量监测:站点管理中添加的站点是流量监测的对象,站点的配置信息(如URL、日志路径、检测类型、阈值等)决定了流量监测的方式和参数。流量监测获取的数据与具体的站点相关联,存储在数据库中对应站点的流量数据记录中。
(2)流量监测与异常检测:流量监测获取的流量数据是异常检测的输入。异常检测模块根据站点设置的阈值和机器学习算法,对流量数据进行分析,判断是否存在异常。如果检测到异常,将生成异常记录,关联到对应的站点和流量数据。
(3)异常检测与异常记录管理:异常检测模块生成的异常记录存储在异常记录列表中,用户可以在异常记录管理页面查看、处理和删除这些记录。异常记录与对应的站点和流量数据相关联,便于用户追溯异常的来源和原因。
(4)站点管理与流量预测:流量预测是针对具体站点的,根据该站点的历史流量数据进行预测。站点的配置信息(如检测类型)可能会影响流量预测的模型选择和参数设置。预测结果与站点相关联,在站点详情页面展示。
(5)用户管理与其他功能:用户管理控制着不同用户对系统功能的访问权限。管理员用户拥有所有功能的操作权限,包括添加、编辑、删除站点,管理用户,处理异常记录等;普通用户可能只有查看部分信息和处理异常记录的权限,具体权限根据系统设置而定。
(6)流量数据管理与其他功能:流量数据是系统的核心数据之一,流量监测、异常检测、流量预测等功能都依赖于流量数据。流量数据管理功能允许用户对流量数据进行查询、删除和导出,方便用户进行数据分析和备份。
通过以上各功能之间的关联,系统形成了一个完整的异常流量检测和管理体系,各功能相互配合,共同实现对网站流量的全面监控和异常处理。