这是一个智能的网络流量监控和自动限速系统,专为有流量限制的服务器设计。
- 实时流量监控: 每分钟统计一次过去24小时内的总流量(上传+下载)
- 智能限速: 当流量达到阈值时自动降低qBittorrent速度,避免触发ISP限速
- 最大化利用: 在不被限速的前提下,尽可能使用完每天2TB的高速流量配额
- Telegram实时推送: 通过Telegram机器人实时更新流量统计(单条消息持续更新)
- 渐进式限速: 不是简单的开关,而是根据流量使用率动态调整速度
流量使用率 < 80% → 使用最大带宽 (如1000 Mbps)
流量使用率 80%-100% → 渐进式降低速度
流量使用率 ≥ 100% → 使用最小带宽 (如50 Mbps)
- 操作系统: Ubuntu 18.04+ (或其他基于Debian的Linux发行版)
- Python: Python 3.6+
- 第三方依赖: 仅需
requests库 - 其他要求:
- qBittorrent 需要开启Web UI
- 需要一个Telegram Bot Token
- 在Telegram中搜索
@BotFather - 发送
/newbot命令创建新机器人 - 按照提示设置机器人名称和用户名
- 保存返回的Bot Token(格式如:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
方法一:使用公开频道
- 如果频道用户名是
@my_channel,则Channel ID为@my_channel
方法二:使用私有频道
- 将机器人添加为频道管理员
- 在频道发送一条消息
- 访问:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates - 在返回的JSON中找到
chat→id(格式如:-1001234567890)
- 打开qBittorrent,进入
工具→选项→Web UI - 勾选
启用Web用户界面 - 设置端口(默认8080)
- 设置用户名和密码
- 如果需要远程访问,取消勾选
仅监听本地连接
运行以下命令查看网络接口:
ip link
# 或
ifconfig常见的接口名称:eth0, ens3, enp0s3 等
# 下载脚本文件
cd ~
mkdir traffic_monitor
cd traffic_monitor
# 将所有文件上传到这个目录
# 包括: traffic_monitor.py, config.json, install.sh, traffic-monitor.service
# 赋予安装脚本执行权限
chmod +x install.sh
# 运行安装脚本
sudo bash install.sh编辑配置文件:
sudo nano /opt/traffic_monitor/config.json配置说明:
{
"telegram": {
"bot_token": "YOUR_BOT_TOKEN_HERE", // Telegram Bot Token
"channel_id": "YOUR_CHANNEL_ID_HERE" // 频道ID或用户名
},
"qbittorrent": {
"host": "http://localhost", // qBittorrent地址
"port": 8080, // Web UI端口
"username": "admin", // Web UI用户名
"password": "adminpass" // Web UI密码
},
"traffic": {
"limit_24h_tb": 2.0, // 24小时流量限制(TB)
"warning_threshold": 0.8, // 警告阈值(80%)
"check_interval_seconds": 60, // 检查间隔(秒)
"network_interfaces": ["eth0", "ens3"] // 要监控的网络接口
},
"bandwidth": {
"max_bandwidth_mbps": 1000, // 最大带宽(Mbps)
"throttled_bandwidth_mbps": 200, // ISP限速后的带宽(Mbps)
"min_bandwidth_mbps": 50 // 最小保留带宽(Mbps)
}
}重要参数说明:
limit_24h_tb: 根据你的服务器限制设置(如2TB)warning_threshold: 建议设置为0.8(80%),留有缓冲空间network_interfaces: 使用ip link命令查看你的接口名称max_bandwidth_mbps: 你的服务器最大带宽min_bandwidth_mbps: 即使超过限制也保留的最小带宽
# 启动服务
sudo systemctl start traffic-monitor
# 查看服务状态
sudo systemctl status traffic-monitor
# 查看实时日志
sudo tail -f /var/log/traffic_monitor.log
# 设置开机自启
sudo systemctl enable traffic-monitor# 启动服务
sudo systemctl start traffic-monitor
# 停止服务
sudo systemctl stop traffic-monitor
# 重启服务
sudo systemctl restart traffic-monitor
# 查看状态
sudo systemctl status traffic-monitor
# 查看日志
sudo journalctl -u traffic-monitor -f
# 或
sudo tail -f /var/log/traffic_monitor.log系统会在Telegram频道发送如下格式的消息,并持续更新:
🌐 服务器流量监控
🟢 状态: 正常
📊 过去24小时流量统计
📥 下载: 0.856 TB (856.34 GB)
📤 上传: 0.645 TB (645.12 GB)
📦 总计: 1.501 TB / 2.0 TB
📈 使用率: 75.05%
⚡ 当前限速: 1000 Mbps (125000 KB/s)
🕐 更新时间: 2025-12-01 18:49:32
状态说明:
- 🟢 正常:流量使用率 < 80%
- 🟡 接近限制:流量使用率 80%-100%
- 🔴 已达限制:流量使用率 ≥ 100%
-
初始阶段(使用率 < 80%)
- qBittorrent全速运行
- 最大化利用带宽下载/上传
-
警告阶段(使用率 80%-100%)
- 开始渐进式限速
- 根据剩余流量动态调整速度
- 保证在24小时周期结束前不会超限
-
限制阶段(使用率 ≥ 100%)
- 降低到最小带宽
- 维持基本的上传/下载
- 等待24小时窗口滚动释放流量
# 查看最近100行日志
sudo tail -n 100 /var/log/traffic_monitor.log
# 实时监控日志
sudo tail -f /var/log/traffic_monitor.log
# 查看错误日志
sudo tail -f /var/log/traffic_monitor_error.logcd /opt/traffic_monitor
sudo python3 traffic_monitor.py按 Ctrl+C 停止
问题1:Telegram消息未发送
- 检查Bot Token是否正确
- 检查Channel ID是否正确
- 确保机器人已添加到频道并设为管理员
- 检查网络连接
问题2:qBittorrent连接失败
- 检查qBittorrent是否运行
- 检查Web UI是否启用
- 检查用户名密码是否正确
- 检查端口是否正确
问题3:流量统计不准确
- 检查网络接口名称是否正确
- 使用
ip link或ifconfig确认接口名 - 确保接口处于活动状态
问题4:服务无法启动
# 查看详细错误信息
sudo systemctl status traffic-monitor
sudo journalctl -xe -u traffic-monitor默认每60秒检查一次。如果需要更频繁的检查:
"check_interval_seconds": 30 // 改为30秒注意: 间隔越短,Telegram API调用越频繁,建议不低于30秒
编辑 traffic_monitor.py 中的 calculate_optimal_speed 方法来自定义限速算法。
如果服务器有多个网络接口:
"network_interfaces": ["eth0", "eth1", "wlan0"]系统会统计所有指定接口的流量总和。
- 合理设置警告阈值: 80%是推荐值,可根据实际情况调整
- 预留缓冲空间: 不要将limit设置为恰好2TB,建议1.9TB
- 监控日志大小: 定期清理
/var/log/traffic_monitor.log - 定期重启服务: 每月重启一次以清理内存
-
保护配置文件: config.json包含敏感信息
sudo chmod 600 /opt/traffic_monitor/config.json
-
限制qBittorrent访问: 不要将Web UI暴露到公网
-
Telegram Token保护: 不要将Token上传到公开仓库
# 停止并禁用服务
sudo systemctl stop traffic-monitor
sudo systemctl disable traffic-monitor
# 删除服务文件
sudo rm /etc/systemd/system/traffic-monitor.service
sudo systemctl daemon-reload
# 删除程序文件
sudo rm -rf /opt/traffic_monitor
# 删除日志文件
sudo rm /var/log/traffic_monitor.log
sudo rm /var/log/traffic_monitor_error.log如有问题,请检查:
- 系统日志:
/var/log/traffic_monitor.log - 错误日志:
/var/log/traffic_monitor_error.log - 服务状态:
systemctl status traffic-monitor
MIT License
- 初始版本
- 支持24小时流量监控
- 自动限速功能
- Telegram实时推送
- systemd服务支持