如何使用Shell脚本监控VPS服务器性能?
| 监控指标 |
监控工具 |
监控频率 |
告警方式 |
| CPU使用率 |
top, mpstat |
每分钟 |
邮件通知 |
| 内存使用 |
free, vmstat |
每5分钟 |
Telegram机器人 |
| 磁盘空间 |
df, du |
每小时 |
短信提醒 |
| 网络连接 |
netstat, ss |
实时监控 |
微信推送 |
| 服务状态 |
systemctl, ps |
每30秒 |
声音告警 |
如何用Shell脚本监控VPS性能?
在VPS服务器管理中,性能监控是确保服务稳定运行的重要环节。通过Shell脚本实现自动化监控,能够及时发现潜在问题并采取相应措施。
主要监控步骤清单
| 步骤 |
监控内容 |
实现方式 |
| 1 |
CPU使用率监控 |
top命令+阈值判断 |
| 2 |
内存使用情况 |
free命令+百分比计算 |
| 3 |
磁盘空间检查 |
df命令+容量预警 |
| 4 |
网络连接状态 |
netstat命令+连接数统计 |
| 5 |
服务进程监控 |
systemctl命令+服务状态检查 |
详细操作流程
步骤1:CPU使用率监控
操作说明:
通过top命令获取CPU使用率,当超过设定阈值时触发告警。
使用工具提示:
- top命令:实时显示系统资源使用情况
- bc计算器:进行浮点数运算
- awk:文本处理和数据提取
#!/bin/bash
CPU监控脚本
CPUTHRESHOLD=80
getcpuusage() {
cpuusage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
echo $cpuusage
}
checkcpu() {
currentusage=$(getcpuusage)
if (( $(echo "$currentusage > $CPUTHRESHOLD" | bc -l) )); then
echo "警报: CPU使用率 ${currentusage}% 超过阈值 ${CPUTHRESHOLD}%"
sendalert "CPU使用率过高" "${currentusage}%"
fi
}
步骤2:内存使用监控
操作说明:
监控系统内存使用情况,包括物理内存和交换空间。
使用工具提示:
- free命令:显示内存使用统计
- grep:文本搜索
- awk:数据提取和计算
# 内存监控函数
MEMORYTHRESHOLD=85
getmemoryusage() {
memoryusage=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100}')
echo $memoryusage
}
checkmemory() {
currentmem=$(getmemoryusage)
if (( $(echo "$currentmem > $MEMORYTHRESHOLD" | bc -l) )); then
echo "警报: 内存使用率 ${currentmem}% 超过阈值 ${MEMORYTHRESHOLD}%"
sendalert "内存使用率过高" "${currentmem}%"
fi
}
步骤3:磁盘空间检查
操作说明:
检查各分区磁盘使用率,预防磁盘写满导致的系统问题。
使用工具提示:
- df命令:显示磁盘空间使用情况
- tr:字符替换处理
- while循环:遍历多个分区
# 磁盘监控脚本
DISKTHRESHOLD=90
checkdiskspace() {
df -h | grep -v Filesystem | while read output; do
usage=$(echo $output | awk '{print $5}' | tr -d '%')
partition=$(echo $output | awk '{print $1}')
if [ $usage -ge $DISKTHRESHOLD ]; then
echo "警报: 分区 $partition 使用率 ${usage}% 超过阈值"
sendalert "磁盘空间不足" "分区 $partition 使用率 ${usage}%"
fi
done
}
步骤4:完整的监控脚本集成
操作说明:
将各个监控模块整合成完整的监控系统,加入日志记录和定时执行功能。
使用工具提示:
- crontab:定时任务调度
- logger:系统日志记录
- date:时间戳生成
#!/bin/bash
完整的VPS监控脚本
配置参数
CPUTHRESHOLD=80
MEMORYTHRESHOLD=85
DISKTHRESHOLD=90
LOGFILE="/var/log/vpsmonitor.log"
日志记录函数
logmessage() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOGFILE
logger "VPS监控: $1"
}
告警发送函数
sendalert() {
subject=$1
message=$2
# 这里可以集成邮件、Telegram、微信等告警方式
echo "发送告警: $subject - $message"
logmessage "告警: $subject - $message"
}
主监控循环
mainmonitor() {
logmessage "开始VPS监控检查"
# 执行各项检查
checkcpu
checkmemory
checkdiskspace
checkservices
logmessage "VPS监控检查完成"
}
调用主函数
mainmonitor
常见问题及解决方案
| 问题 |
原因 |
解决方案 |
| 脚本执行权限不足 |
文件没有执行权限或用户权限不够 |
使用chmod +x monitorscript.sh添加执行权限 |
| 监控数据不准确 |
命令输出格式差异或计算错误 |
验证命令在不同系统的输出格式,调整awk处理逻辑 |
| 告警信息无法发送 |
网络连接问题或配置错误 |
检查网络连接,测试告警通道,添加重试机制 |
| 磁盘监控误报 |
特殊文件系统或临时分区干扰 |
在df命令中添加排除选项,如df -h -x tmpfs -x devtmpfs |
| 脚本占用资源过高 |
监控频率太快或命令本身资源消耗大 |
调整监控间隔,使用更轻量级的替代命令 |
通过以上Shell脚本监控方案,您可以构建一个完整的VPS性能监控体系,及时掌握服务器运行状态,确保服务的稳定性和可靠性。建议将脚本设置为定时任务,根据实际需求调整监控频率和告警阈值。
发表评论