Echo's blog
Echo's blog
· 1 min read · 运维脚本

服务器性能监控脚本

创建性能监控脚本 monitor_server.sh#

PRTCL // BASH
#!/bin/bash
# 配置:监控阈值(可按需修改)
CPU_THRESHOLD=80
MEM_THRESHOLD=85
DISK_THRESHOLD=85
EMAIL="admin@example.com"
# 获取当前服务器性能指标
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
MEM_USAGE=$(free | grep "Mem" | awk '{printf("%.2f", $3/$2 * 100.0)}')
DISK_USAGE=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//g')
# 检查是否超过阈值并发送告警
ALERT_MSG=""
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
ALERT_MSG+="[ALERT] CPU Usage: ${CPU_USAGE}% (Threshold: ${CPU_THRESHOLD}%)
"
fi
if (( $(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc -l) )); then
ALERT_MSG+="[ALERT] Memory Usage: ${MEM_USAGE}% (Threshold: ${MEM_THRESHOLD}%)
"
fi
if [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then
ALERT_MSG+="[ALERT] Disk Usage: ${DISK_USAGE}% (Threshold: ${DISK_THRESHOLD}%)
"
fi
# 如果有告警信息,则发送邮件
if [ -n "$ALERT_MSG" ]; then
echo -e "$ALERT_MSG" | mail -s "服务器性能告警 - $(hostname)" "$EMAIL"
fi
# 可选:记录当前性能指标到日志文件
LOG_DIR="$HOME/monitoring"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/performance_$(date +%Y%m%d).log"
echo "$(date '+%Y-%m-%d %H:%M:%S') - CPU: ${CPU_USAGE}%, MEM: ${MEM_USAGE}%, DISK: ${DISK_USAGE}%" >> "$LOG_FILE"

作用
该脚本在执行时会:

  • 实时获取 CPU、内存、磁盘使用率;
  • 与预设阈值进行比较;
  • 当超过阈值时发送告警邮件;
  • 同时记录性能数据到日志文件,便于后续分析。

设置定时任务(crontab)#

PRTCL // BASH
Terminal window
# 添加到用户 crontab(替换 YOUR_USERNAME 为实际用户名)
*/5 * * * * /home/YOUR_USERNAME/scripts/monitor_server.sh >> /home/YOUR_USERNAME/monitoring/cron.log 2>&1

作用

  • */5 * * * * 表示每 5 分钟执行一次;
  • 调用上述监控脚本;
  • 将脚本的标准输出和错误追加写入 cron.log,便于排查问题;
  • 注意:crontab 不识别 ~,必须使用绝对路径。

安装依赖与配置(执行一次即可)#

PRTCL // SH
Terminal window
# 安装邮件发送工具(Ubuntu/Debian)
sudo apt-get install mailutils
# 赋予脚本执行权限
chmod +x ~/scripts/monitor_server.sh

Related Posts

Comments

Copied
Copied to clipboard