**摘要:**本文介绍了一个用于监控网卡上传流量的自动化脚本,特别适用于需要持续高上传流量的PCDN服务。当检测到上传流量低于预设阈值时,脚本将自动结束相关进程以恢复流量。



正文:

在网络服务领域,尤其是对于依赖持续高上传流量的点对点内容分发网络(PCDN)服务,监控上传流量至关重要。今天,我将与大家分享一个实用的监控脚本,该脚本能够实时监控网卡的上传流量,并在流量低于设定值时自动结束特定进程,以确保服务的连续性和稳定性。

脚本背景:

此脚本的开发初衷源于我在将玩客云设备刷写为Debian系统后,运行甜糖PCDN服务时遇到的问题。我发现甜糖PCDN的YQ项目偶尔会遇到上传流量异常降低的情况,且长时间无法自行恢复。在这种情况下,结束并重启相关进程(如ipes)能够有效地恢复上传速度。

脚本功能:

本脚本是一个自动化的监控工具,旨在实时跟踪并记录特定网卡的上传流量。以下是脚本的关键功能点:

1. 实时流量监控:脚本使用netinfo命令来监测指定网卡(例如eth0)的上传流量,并以每秒的速率记录。

2. 日志记录:所有监控数据都会被记录在设定的日志目录下,按日期命名的日志文件中,便于后续分析和审计。

3. 流量阈值检查:脚本设定了一个流量阈值(默认为50KB/s),一旦监测到的上传流量低于此阈值,脚本将执行预定动作。

4. 进程管理:当检测到流量低于阈值时,脚本会自动终止ipes进程,以尝试恢复网络流量至正常水平。

5. 定时清理:脚本会自动清理超过7天的旧日志文件,以避免日志目录空间被无限占用。

脚本适用性:

理论上,带有ipes进程的PCDN服务都可以采用此脚本。例如,我发现猕猴桃PCDN同样采用了ipes。

脚本优势:

1. 自动化:减少人工监控的需要,实现24/7的无人值守监控。

2. 灵活性:用户可以根据实际需求调整流量阈值和日志保留策略。

3. 易用性:脚本易于部署和配置,适合技术背景各异的用户。

4. 健壮性:通过自动重启关键进程,增强了系统的稳定性和自愈能力。

5. 可定制性:脚本提供了基础框架,可根据不同的监控需求进行定制和扩展。

脚本实现:

以下是实现上述功能的脚本代码:

```bash
#!/bin/bash
# 监控网卡流量,并输出到日志文件中
# 定义环境变量,根据自己系统更改
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin
export LANG=en
# 日志目录
LOG_DIR="/usr/jklog"
# 日志文件名称
FILE_NAME="$(date +%F).log"
# 监控的网卡名称
NET_NAME="eth0"
THRESHOLD=50         # KB/s
# 确保日志目录存在
[ -d "$LOG_DIR" ] || mkdir -p "$LOG_DIR"
# 进入日志目录
cd "$LOG_DIR"
# 清理超过7天的日志文件
find . -name "*.log" -mtime +5 -exec rm {} \;
# 在日志文件中记录当前时间
date +"%H:%M" >> "$FILE_NAME"
# 监控网卡名称DEV 1 5,输出5秒内平均上传速度
netinfo=$(sar -n DEV 1 5 | grep -i average | grep "$NET_NAME" | awk '{print $6}')
echo "$NET_NAME 5秒内平均上传流量:$(echo $netinfo | cut -d':' -f2)KB/s" >> "$FILE_NAME"
# 检查流量是否低于阈值
if (( $(echo "$netinfo < $THRESHOLD" | bc -l) )); then
    echo "由于上传流量低于50KB/S,终止了 ipes 进程" >> "$FILE_NAME"
    killall ipes
else
    echo "上传流量正常" >> "$FILE_NAME"
fi
echo '#########################' >> "$FILE_NAME"
```

------
[wv]      
上述脚本代码已保存至  /usr/  目录下的   nctoro_com.sh   文件中。请确保在执行脚本之前,赋予执行权限。chmod +x nctoro_com.sh

直接运行(用于测试)

 cd /usr

 bash nctoro_com.sh

等待一会,就可查看/usr/jklog/里的日志文件。
Cron任务设置:

为了使脚本能够定期执行,您可以按照以下步骤设置cron任务:

1. 将上述脚本保存为一个文件,例如nctoro_com.sh,并赋予执行权限:


chmod +x nctoro_com.sh
2. 编辑crontab文件来添加一个定时任务:


crontab -e添加以下行,假设每5分钟检查一次:

    */5 * * * * /usr/nctoro_com.sh请将/usr/nctoro_com.sh替换为您的脚本实际路径和脚本名。

3. 保存crontab文件:

4. 写入内容后,输入Ctrl + O,然后按Enter确认文件名。

5. 输入Ctrl + X退出并保存更改。

6. 重启cron服务:


service cron restart
[/wv]
结束语:
监控上传流量并及时响应流量异常是确保PCDN服务质量的关键。虽然本文提供的脚本是一个有效的解决方案,但肯定还有其他更好的方案,欢迎家人们留言讨论。