如何编写一个功能完善的VPS监控脚本?
| 监控指标 |
监控工具 |
监控频率 |
告警方式 |
| CPU使用率 |
top, mpstat |
每分钟 |
邮件、钉钉 |
| 内存使用 |
free, vmstat |
每分钟 |
短信、微信 |
| 磁盘空间 |
df, du |
每小时 |
邮件、电话 |
| 网络流量 |
iftop, nethogs |
实时 |
邮件、短信 |
| 服务状态 |
systemctl, ps |
每5分钟 |
邮件、钉钉 |
| 系统负载 |
uptime, w |
每分钟 |
邮件、微信 |
VPS监控脚本如何实现?从零开始搭建服务器监控系统
在服务器管理中,VPS监控是确保服务稳定运行的重要环节。一个完善的监控脚本能够及时发现系统异常,避免服务中断带来的损失。
监控脚本主要步骤
| 步骤 |
操作内容 |
使用工具 |
| 1 |
环境准备与依赖安装 |
apt/yum包管理器 |
| 2 |
监控指标采集脚本编写 |
Bash、Python |
| 3 |
数据存储配置 |
文件、数据库 |
| 4 |
告警机制设置 |
mail、curl |
| 5 |
定时任务配置 |
crontab |
详细操作流程
步骤1:环境准备与依赖安装
操作说明:安装监控脚本所需的系统工具和依赖包
使用工具提示:使用系统包管理器安装必要工具
# Ubuntu/Debian系统
sudo apt update
sudo apt install sysstat bc mailutils curl -y
CentOS/RHEL系统
sudo yum update
sudo yum install sysstat bc mailx curl -y
步骤2:监控指标采集脚本编写
操作说明:创建监控脚本,采集CPU、内存、磁盘等关键指标
使用工具提示:使用Bash脚本结合系统命令
#!/bin/bash
vpsmonitor.sh
获取系统时间
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
CPU使用率监控
CPUUSAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/., \([0-9.]\)% id./\1/" | awk '{print 100 - $1}')
内存使用监控
MEMTOTAL=$(free -m | awk 'NR==2{print $2}')
MEMUSED=$(free -m | awk 'NR==2{print $3}')
MEMPERCENT=$((MEMUSED100/MEMTOTAL))
磁盘空间监控
DISKUSAGE=$(df / | awk 'NR==2{print $5}' | sed 's/%//')
系统负载监控
LOADAVG=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1)
输出监控结果
echo "时间: $TIMESTAMP"
echo "CPU使用率: ${CPUUSAGE}%"
echo "内存使用率: ${MEMPERCENT}%"
echo "磁盘使用率: ${DISKUSAGE}%"
echo "系统负载: $LOADAVG"
步骤3:数据存储配置
操作说明:配置监控数据的存储方式,可选择文件或数据库存储
使用工具提示:使用重定向或数据库客户端工具
# 将监控数据追加到日志文件
./vpsmonitor.sh >> /var/log/vpsmonitor.log
或者使用Python脚本存储到数据库
#!/usr/bin/env python3
import sqlite3
import subprocess
from datetime import datetime
采集数据并存入SQLite数据库
conn = sqlite3.connect('/opt/monitor/vpsdata.db')
cursor = conn.cursor()
步骤4:告警机制设置
操作说明:设置阈值告警,当监控指标超过设定值时发送告警
使用工具提示:使用mail命令或API调用发送告警
# 告警函数
sendalert() {
local subject=$1
local message=$2
echo "$message" | mail -s "$subject" admin@example.com
}
检查阈值并触发告警
if [ $CPUUSAGE -gt 80 ]; then
sendalert "CPU告警" "CPU使用率过高: ${CPUUSAGE}%"
fi
if [ $DISKUSAGE -gt 90 ]; then
sendalert "磁盘告警" "磁盘空间不足: ${DISKUSAGE}%"
fi
步骤5:定时任务配置
操作说明:配置crontab定时执行监控脚本
使用工具提示:使用crontab -e编辑定时任务
# 每分钟执行一次监控
/1 * /opt/scripts/vpsmonitor.sh >> /var/log/monitor.log
每5分钟检查一次服务状态
/5 * /opt/scripts/servicecheck.sh
每天凌晨清理旧日志
0 2 * find /var/log/monitor.log -mtime +7 -delete
常见问题与解决方案
| 问题 |
原因 |
解决方案 |
| 监控脚本无法执行 |
脚本没有执行权限 |
使用chmod +x vps_monitor.sh添加执行权限 |
| 告警邮件发送失败 |
邮件服务器配置错误 |
检查postfix配置或使用第三方邮件API |
| 磁盘监控数据不准确 |
监控路径设置错误 |
确认df命令监控的挂载点是否正确 |
| 内存计算错误 |
内存单位不统一 |
统一使用MB或GB单位进行计算 |
| 定时任务不执行 |
crontab配置错误 |
检查crontab语法,确认命令路径为绝对路径 |
为了增强监控脚本的功能,可以考虑添加网络连通性检测、服务进程监控、安全日志分析等模块。定期检查监控系统的运行状态,确保监控本身不会成为系统的负担。
通过以上步骤,你可以建立一个基本的VPS监控系统。根据实际需求,还可以集成更专业的监控工具如Prometheus、Zabbix等,构建更完善的监控体系。
发表评论