Skip to content

About

这是一个智能的网络流量监控和自动限速系统,专为有流量限制的服务器设计。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

网络流量监控和qBittorrent自动限速系统

📋 功能简介

这是一个智能的网络流量监控和自动限速系统,专为有流量限制的服务器设计。

核心功能

  1. 实时流量监控: 每分钟统计一次过去24小时内的总流量(上传+下载)
  2. 智能限速: 当流量达到阈值时自动降低qBittorrent速度,避免触发ISP限速
  3. 最大化利用: 在不被限速的前提下,尽可能使用完每天2TB的高速流量配额
  4. Telegram实时推送: 通过Telegram机器人实时更新流量统计(单条消息持续更新)
  5. 渐进式限速: 不是简单的开关,而是根据流量使用率动态调整速度

工作原理

流量使用率 < 80%    → 使用最大带宽 (如1000 Mbps)
流量使用率 80%-100% → 渐进式降低速度
流量使用率 ≥ 100%   → 使用最小带宽 (如50 Mbps)

🔧 系统要求

  • 操作系统: Ubuntu 18.04+ (或其他基于Debian的Linux发行版)
  • Python: Python 3.6+
  • 第三方依赖: 仅需 requests 库
  • 其他要求:
    • qBittorrent 需要开启Web UI
    • 需要一个Telegram Bot Token

📦 安装步骤

1. 准备工作

1.1 获取Telegram Bot Token

  1. 在Telegram中搜索 @BotFather
  2. 发送 /newbot 命令创建新机器人
  3. 按照提示设置机器人名称和用户名
  4. 保存返回的Bot Token(格式如:123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

1.2 获取Telegram Channel ID

方法一:使用公开频道

  • 如果频道用户名是 @my_channel,则Channel ID为 @my_channel

方法二:使用私有频道

  1. 将机器人添加为频道管理员
  2. 在频道发送一条消息
  3. 访问:https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
  4. 在返回的JSON中找到 chat → id(格式如:-1001234567890)

1.3 配置qBittorrent Web UI

  1. 打开qBittorrent,进入 工具 → 选项 → Web UI
  2. 勾选 启用Web用户界面
  3. 设置端口(默认8080)
  4. 设置用户名和密码
  5. 如果需要远程访问,取消勾选 仅监听本地连接

1.4 查看网络接口名称

运行以下命令查看网络接口:

ip link
# 或
ifconfig

常见的接口名称:eth0, ens3, enp0s3 等

2. 下载和安装

# 下载脚本文件
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

3. 配置系统

编辑配置文件:

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: 即使超过限制也保留的最小带宽

4. 启动服务

# 启动服务
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消息格式

系统会在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%

🎯 工作流程

  1. 初始阶段(使用率 < 80%)

    • qBittorrent全速运行
    • 最大化利用带宽下载/上传
  2. 警告阶段(使用率 80%-100%)

    • 开始渐进式限速
    • 根据剩余流量动态调整速度
    • 保证在24小时周期结束前不会超限
  3. 限制阶段(使用率 ≥ 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.log

手动运行(用于测试)

cd /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"]

系统会统计所有指定接口的流量总和。

📈 性能优化建议

  1. 合理设置警告阈值: 80%是推荐值,可根据实际情况调整
  2. 预留缓冲空间: 不要将limit设置为恰好2TB,建议1.9TB
  3. 监控日志大小: 定期清理 /var/log/traffic_monitor.log
  4. 定期重启服务: 每月重启一次以清理内存

🔒 安全注意事项

  1. 保护配置文件: config.json包含敏感信息

    sudo chmod 600 /opt/traffic_monitor/config.json
  2. 限制qBittorrent访问: 不要将Web UI暴露到公网

  3. 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

🤝 技术支持

如有问题,请检查:

  1. 系统日志:/var/log/traffic_monitor.log
  2. 错误日志:/var/log/traffic_monitor_error.log
  3. 服务状态:systemctl status traffic-monitor

📄 许可证

MIT License

🎉 更新日志

v1.0.0 (2025-12-01)

  • 初始版本
  • 支持24小时流量监控
  • 自动限速功能
  • Telegram实时推送
  • systemd服务支持

About

这是一个智能的网络流量监控和自动限速系统,专为有流量限制的服务器设计。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages