# vsftp_bandwidth_analyzer **Repository Path**: microbug/vsftp_bandwidth_analyzer ## Basic Information - **Project Name**: vsftp_bandwidth_analyzer - **Description**: 分析vsFTP日志文件,统计用户平均上传/下载带宽,支持文件大小筛选和可视化 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-28 - **Last Updated**: 2026-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # vsFTP带宽分析工具 一个功能强大的vsFTP日志分析工具,用于统计用户上传/下载带宽,支持文件大小筛选和科学可视化。 ## 功能特性 ### 核心功能 - ✅ **多格式支持**:兼容标准vsFTP、xferlog等多种日志格式 - ✅ **智能解析**:自动识别上传/下载操作和用户名 - ✅ **带宽计算**:计算平均带宽,支持动态单位(B/s/KB/s/MB/s/GB/s) - ✅ **文件筛选**:按文件大小范围筛选(支持B/K/M/G/T单位) - ✅ **异常检测**:识别传输异常(不完整记录),在文本和图表中标记 ### 可视化功能 - ✅ **专业图表**:生成科学流量曲线图(PNG/PDF/SVG) - ✅ **多用户支持**:每个用户独立统计和显示 - ✅ **智能显示**:根据数据量自动调整x轴日期显示格式 - ✅ **科学可视化**:高斯平滑、误差带、专业配色方案 ### 技术特性 - ✅ **编码支持**:支持UTF-8、UTF-16-LE、GBK等多种编码 - ✅ **Python兼容**:支持Python 3.6+版本 - ✅ **测试工具**:内置测试日志生成功能 ## 安装要求 ### 系统要求 - Python 3.6 或更高版本 - 支持的操作系统:Windows、Linux、macOS ### 依赖安装 ```bash pip install -r requirements.txt ``` 或手动安装: ```bash pip install numpy>=1.20.0 matplotlib>=3.5.0 scipy>=1.7.0 ``` ## 快速开始 ### 基本用法 ```bash # 分析vsftp日志文件 python vsftp_bandwidth_analyzer.py /var/log/vsftpd.log # 指定文件大小范围(只分析1MB到100MB的文件) python vsftp_bandwidth_analyzer.py /var/log/vsftpd.log -m 1M -M 100M # 保存结果到文件 python vsftp_bandwidth_analyzer.py /var/log/vsftpd.log -o result.txt # 生成流量曲线图 python vsftp_bandwidth_analyzer.py /var/log/vsftpd.log --chart traffic.png # 组合使用所有功能 python vsftp_bandwidth_analyzer.py /var/log/vsftpd.log -m 1M -M 100M -o result.txt --chart traffic.png ``` ### 生成测试数据 ```bash # 生成测试用的vsftp日志文件 python vsftp_bandwidth_analyzer.py test.log --generate-test # 分析测试数据 python vsftp_bandwidth_analyzer.py test.log --chart test_chart.png ``` ## 命令行参数 | 参数 | 缩写 | 说明 | 默认值 | |------|------|------|--------| | `log_file` | - | 日志文件路径(必需) | - | | `--min_size` | `-m` | 最小文件大小(支持B/K/M/G/T单位) | `0` | | `--max_size` | `-M` | 最大文件大小(支持B/K/M/G/T单位) | `inf`(无限制) | | `--output` | `-o` | 结果输出文件路径 | 控制台输出 | | `--chart` | - | 生成流量曲线图文件 | 不生成图表 | | `--interval` | - | 图表时间聚合间隔(秒) | `60` | | `--generate-test` | - | 生成测试日志文件 | `False` | ### 文件大小单位示例 - `1K` = 1024 字节 - `1M` = 1,048,576 字节 - `1G` = 1,073,741,824 字节 - `1T` = 1,099,511,627,776 字节 ## 输出示例 ### 文本输出格式 ``` ========================================================== vsftp带宽分析结果 ========================================================== 用户名 上传带宽 下载带宽 上传文件数 下载文件数 上传异常 下载异常 ----------------------------------------------------------------------- admin 1.25 MB/s 2.45 MB/s 15 23 0 1* user1 512.34 KB/s 1.12 MB/s 8 12 0 0 test 0 B/s 245.67 KB/s 0 5 0 0 ========================================================== 说明: * 表示该类传输中有异常(不完整)的记录 ``` ### 图表输出特性 - **上传图表**:显示每个用户的上传带宽趋势 - **下载图表**:显示每个用户的下载带宽趋势 - **异常标记**:红色X标记表示不完整的传输记录 - **平滑曲线**:高斯平滑显示整体趋势 - **误差带**:显示数据波动范围 - **智能时间轴**:根据时间跨度自动调整日期显示格式 ## vsFTP日志格式支持 ### 支持的日志格式 1. **标准vsFTP格式** ``` 2024-05-01 12:34:56 [pid 1234] [user123] OK DOWNLOAD: Client "192.168.1.100", "file.txt" 1024 bytes, 1.00Kbyte/sec ``` 2. **xferlog格式** ``` Sun Jan 4 09:03:17 2026 4 192.168.56.189 934516 /path/file.png b _ i r user ftp 0 * c ``` 3. **其他常见格式** - 包含时间戳和传输速率的各种变体 ### 自动检测功能 - 自动识别文件编码(UTF-8、UTF-16、GBK等) - 智能匹配日志格式模式 - 处理BOM字节顺序标记 ## 高级功能 ### 异常检测 工具能够识别传输异常(标记为"i"的不完整记录): - 在文本输出中用`*`标记异常记录数 - 在图表中用红色X标记异常数据点 - 统计面板显示异常汇总信息 ### 智能时间轴 根据数据时间跨度自动调整x轴显示: - **<1小时**:显示分钟(HH:MM) - **<1天**:显示小时(MM-DD HH:MM) - **<1周**:显示日期(MM-DD HH:MM),30°倾斜 - **<1个月**:显示日期(MM-DD),45°倾斜 - **≥1个月**:显示月日(YYYY-MM-DD),45°倾斜 ### 科学可视化 - **高斯平滑**:使用scipy进行数据平滑处理 - **误差带**:显示标准差范围 - **专业配色**:使用科学配色方案 - **自适应布局**:根据数据量动态调整图表布局 ## 项目结构 ``` vsftp_bandwidth_analyzer/ ├── vsftp_bandwidth_analyzer.py # 主程序文件 ├── requirements.txt # 依赖包列表 ├── README.md # 项目文档 └── .gitignore # Git忽略文件 ``` ## 代码质量 ### 架构设计 - **模块化设计**:功能分离清晰,易于维护 - **错误处理**:完善的异常捕获和用户提示 - **兼容性**:支持Python 3.6+,多种编码格式 ### 代码规范 - **文档完善**:每个函数都有详细的docstring - **类型提示**:使用类型注释提高代码可读性 - **命名规范**:遵循Python命名约定 ## 故障排除 ### 常见问题 **Q: 无法读取日志文件** A: 检查文件路径和权限,确保文件存在且可读 **Q: 解析不到任何记录** A: 确认日志格式是否符合支持的格式,使用`--generate-test`测试功能 **Q: 图表生成失败** A: 确保已安装matplotlib和scipy,检查文件写入权限 **Q: 编码错误** A: 工具会自动检测编码,如遇问题可手动指定文件编码 ### 调试模式 工具会自动显示未匹配的行,帮助诊断日志格式问题: ``` 第25行未匹配任何模式: 2024-05-01 12:34:56 [info] Connection... ``` ## 版本历史 - **2024-12**: 初始版本,支持标准vsFTP日志格式 - **2024-12**: 添加xferlog格式支持,修复用户名提取 - **2024-12**: 添加文件大小单位支持(B/K/M/G/T) - **2024-12**: 添加UTF-16-LE BOM编码支持 - **2024-12**: 实现多用户支持和动态单位选择 - **2024-12**: 实现科学可视化(高斯平滑、误差带、专业布局) - **2024-12**: 优化图表布局,修复标题重叠和图例显示 - **2024-12**: 改为每条记录对应一个数据点,移除时间聚合 - **2024-12**: 修复文件大小过滤参数不生效的问题 - **2026-01**: 添加传输异常识别功能 - **2026-01**: 优化x轴日期显示,根据时间跨度和数据量自动调整 ## 贡献指南 欢迎提交Issue和Pull Request来改进这个工具。 ### 开发环境设置 ```bash git clone cd vsftp_bandwidth_analyzer python -m venv .venv source .venv/bin/activate # Linux/macOS # 或 .venv\Scripts\activate # Windows pip install -r requirements.txt ``` ## 许可证 本项目采用MIT许可证。详见LICENSE文件。 ## 技术支持 如有问题或建议,请通过以下方式联系: - 提交GitHub Issue - 查看项目文档 --- **注意**: 使用本工具前请确保您有权访问和分析相关的FTP日志文件。