一个功能强大的Python项目,用于分析Xray和Nginx访问日志,提供命令行报告和Web仪表板。
- 智能日志解析: 自动解析Xray和Nginx日志格式
- 流量统计: 连接数、客户端IP、目标域名统计
- 安全分析: 异常IP检测、可疑目标识别
- 时间分析: 每小时流量分布、活跃时段识别
- Web仪表板: 实时数据可视化,自动刷新
- 路由分析: 直连/代理策略使用统计
# 进入项目目录
cd /root/log-analyzer
# 运行安装脚本
chmod +x setup.sh
./setup.sh# 基础分析
./analyze.sh
# 生成报告文件
./analyze.sh --output report.txt
# 指定自定义日志文件
./analyze.sh --xray-log /path/to/xray.log --nginx-log /path/to/nginx.log# 启动Web仪表板
./start_dashboard.sh
# 访问 http://your-server:8050- 总连接数
- 客户端IP数量
- 目标域名数量
- 时间跨度
- 热门目标域名 (Top 10)
- 路由策略分布
- 协议使用统计
- 客户端IP分布
- 每小时流量分布
- 最活跃时段识别
- 流量趋势图
- 异常IP检测
- 可疑目标识别
- 多客户端告警
- 实时刷新: 每30秒自动更新数据
- 交互式图表: 使用Plotly实现
- 响应式设计: 支持移动设备访问
- 多维度展示: 图表化展示各项统计
log-analyzer/ # 项目根目录
├── log_analyzer.py # 🔧 核心分析引擎 (295行)
├── dashboard.py # 🌐 Web仪表板应用 (245行)
├── analyze.sh # 📜 命令行分析脚本
├── start_dashboard.sh # 🚀 仪表板启动脚本
├── setup.sh # ⚙️ 自动安装脚本
├── requirements.txt # 📦 Python依赖包列表
├── README.md # 📖 项目说明文档
├── USER_GUIDE.md # 📚 详细使用指南
├── daily-report.txt # 📄 每日报告样本
├── report.txt # 📄 分析报告样本
├── *.log # 📝 各种日志文件
├── venv/ # 🐍 Python虚拟环境
│ ├── lib/python3.12/site-packages/
│ │ ├── dash-2.14.2/ # Web框架
│ │ │ ├── dash/ # 核心Dash模块
│ │ │ ├── dash_core_components/ # UI组件
│ │ │ ├── dash_html_components/ # HTML组件
│ │ │ └── dash_table/ # 表格组件
│ │ ├── dash_bootstrap_components-1.5.0/ # Bootstrap组件
│ │ ├── plotly-5.17.0/ # 可视化库
│ │ ├── pandas-2.1.4/ # 数据分析库
│ │ ├── requests-2.31.0/ # HTTP请求库
│ │ └── ...
└── __pycache__/ # Python字节码缓存- Python 3.12 - 核心开发语言
- Pandas 2.1.4 - 数据处理和分析
- Requests 2.31.0 - HTTP请求(IP地理位置查询)
- Dash 2.14.2 - Web应用框架(基于Flask + React)
- Dash Bootstrap Components 1.5.0 - UI组件库
- Plotly 5.17.0 - 交互式数据可视化
- pytz 2023.3 - 时区处理
- python-dateutil 2.8.2 - 日期时间解析
- Matplotlib 3.8.2 - 静态图表生成(备用)
- Seaborn 0.13.0 - 统计图表(备用)
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 日志数据源 │───▶│ 数据解析器 │───▶│ 数据分析器 │
│ │ │ │ │ │
│ • Xray日志 │ │ • 格式解析 │ │ • 统计分析 │
│ • Nginx日志 │ │ • IP地理位置查询 │ │ • 趋势分析 │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Web界面展示 │◀───│ 可视化引擎 │◀───│ 数据存储 │
│ │ │ │ │ │
│ • 实时仪表板 │ │ • Plotly图表 │ │ • Pandas DataFrame│
│ • 交互式操作 │ │ • Bootstrap样式 │ │ • 内存缓存 │
└─────────────────┘ └──────────────────┘ └─────────────────┘
class LogAnalyzer:
"""核心日志分析引擎"""
主要功能:
- parse_xray_log() # 解析Xray日志格式
- parse_nginx_log() # 解析Nginx日志格式
- get_ip_geolocation() # IP地理位置查询
- load_xray_logs() # 批量加载Xray日志
- analyze_traffic() # 流量统计分析class LogDashboard:
"""Web仪表板应用"""
主要组件:
- setup_layout() # 布局设计 (Bootstrap)
- setup_callbacks() # 回调函数 (Dash)
- update_dashboard() # 数据更新逻辑
- 实时刷新机制 (30秒间隔)- ip-api.com - IP地理位置查询服务
- 提供国家、城市、ISP信息
- 本地缓存减少API调用
- Xray:
/var/log/xray/access.log - Nginx:
/var/log/nginx/access.log
- 分批加载: 限制处理10,000条最新记录
- IP缓存: 避免重复地理位置查询
- 异步处理: 后台数据更新不阻塞UI
- 数据缓冲: 32k缓冲区,5分钟刷新
- 图表懒加载: 按需渲染可视化组件
- 状态管理: 分离回调减少耦合
- 虚拟环境: 隔离依赖,避免版本冲突
- 缓存机制: IP地理位置信息本地缓存
- 批量处理: 大文件分批读取,控制内存使用
2026/01/17 18:28:21.582771 from 116.168.13.148:0 accepted tcp:signaler-pa.clients6.google.com:443 [direct]
116.168.13.148 - - [17/Jan/2026:18:28:08 +0800] "GET /ONy90 HTTP/1.1" 101 6680 "-" "Go-http-client/1.1" "-"
可以通过修改以下参数来自定义分析:
# log_analyzer.py 中的可配置项
TIMEZONE = 'Asia/Shanghai' # 时区设置
TOP_DOMAINS_COUNT = 10 # 显示的顶级域名数量
HOUR_INTERVAL = 5 # 流量趋势图的时间间隔(分钟)- 确保有足够的磁盘空间存储日志
- Web仪表板默认监听所有网络接口
- 建议定期清理旧日志文件
- 生产环境建议添加认证机制
- 服务器日志优化:建议配置日志轮转和缓冲机制
欢迎提交Issue和Pull Request来改进这个工具!
MIT License