在运维工作中,及时发现服务器异常至关重要。本文将带你从零开始,编写一个简单但实用的 Ubuntu监控告警脚本,实现对CPU、内存和磁盘使用率的实时监控,并在超过阈值时通过邮件发送告警通知。即使你是Linux新手,也能轻松上手!

一、准备工作
在开始编写脚本前,请确保你的Ubuntu系统已安装以下工具:
mailutils:用于发送邮件告警
ssmtp或
postfix:邮件传输代理(本文以
mailutils+ 系统默认sendmail为例) 基本的Bash环境(Ubuntu默认已安装)
执行以下命令安装必要软件:
我们将创建一个名为 sudo apt updatesudo apt install -y mailutils二、编写Ubuntu监控告警脚本
system_monitor.sh
的脚本,它会定期检查系统资源使用情况。
1. 将上述代码保存为 #!/bin/bash# 配置项CPU_THRESHOLD=80 # CPU使用率阈值(%)MEM_THRESHOLD=85 # 内存使用率阈值(%)DISK_THRESHOLD=90 # 磁盘使用率阈值(%)EMAIL="your_email@example.com" # 告警接收邮箱HOSTNAME=$(hostname)# 获取当前CPU使用率(排除空闲时间)CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}')# 获取内存使用率MEM_USAGE=$(free | awk 'NR==2{printf "%.0f", $3*100/$2}')# 获取根分区磁盘使用率DISK_USAGE=$(df / | awk 'NR==2{print $5}' | sed 's/%//')# 日志函数log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"}# 发送告警邮件函数send_alert() { SUBJECT="[ALERT] $HOSTNAME System Resource Warning" MESSAGE="$1\n\nCPU Usage: ${CPU_USAGE}%\nMemory Usage: ${MEM_USAGE}%\nDisk Usage: ${DISK_USAGE}%\nTime: $(date)" echo -e "$MESSAGE" | mail -s "$SUBJECT" "$EMAIL" log_message "Alert email sent: $1"}# 检查CPUif (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then send_alert "High CPU usage detected on $HOSTNAME!"fi# 检查内存if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then send_alert "High memory usage detected on $HOSTNAME!"fi# 检查磁盘if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then send_alert "High disk usage detected on $HOSTNAME!"filog_message "Monitoring completed. CPU: ${CPU_USAGE}%, MEM: ${MEM_USAGE}%, DISK: ${DISK_USAGE}%"三、配置与测试
/home/your_user/system_monitor.sh
(替换 your_user 为你的用户名)。
2. 赋予脚本执行权限:
3. 修改脚本中的 chmod +x /home/your_user/system_monitor.shEMAIL
变量为你自己的邮箱地址。
4. 手动运行脚本测试:
如果一切正常,你将在终端看到日志输出。若资源使用率超过阈值,你会收到一封告警邮件。 为了让脚本自动运行,我们可以使用 /home/your_user/system_monitor.sh四、设置定时任务(Cron)
cron
定时任务。例如,每5分钟检查一次:
在打开的编辑器中添加以下行: 这会每5分钟执行一次脚本,并将日志追加到 - 邮件收不到? 请确保系统能发送邮件。可先用 crontab -e*/5 * * * * /home/your_user/system_monitor.sh >> /var/log/system_monitor.log 2>&1/var/log/system_monitor.log
文件中,方便后续排查问题。五、常见问题与优化建议
echo "test" | mail -s "test" your_email@example.com
测试。
- 如何监控多个服务器? 可将此脚本部署到每台服务器,或使用集中式监控工具如Zabbix、Prometheus等。
- 避免频繁告警? 可在脚本中加入“冷却时间”逻辑,例如记录上次告警时间,10分钟内不再重复发送。
结语
通过这个简单的 Ubuntu监控告警脚本,你可以快速实现对关键系统资源的监控。它不仅适用于个人服务器,也适合小型企业环境。掌握这类 Linux服务器监控 技能,是迈向专业运维的重要一步。如果你希望构建更强大的监控体系,可以在此基础上扩展网络、服务状态等检查项,打造属于你的 自动化告警脚本 生态。
现在就动手试试吧!让 系统监控脚本 成为你服务器的“守护神”。
