本文详细介绍如何在Linux系统中配置资源监控与邮件告警功能,通过Shell脚本结合crontab定时任务实现CPU、内存、磁盘等关键指标的自动化监控,并在资源超阈值时触发邮件通知,帮助运维人员快速响应系统异常。
一、核心组件与原理
实现Linux系统资源告警邮件通知需要以下核心组件:
- 监控工具:使用
free
、df
、top
等原生命令采集数据 - 邮件服务:配置Postfix或Sendmail作为MTA
- 阈值判断:通过Shell脚本进行资源使用率计算
- 定时触发:利用crontab设置监控频率
二、邮件服务配置
以Postfix为例的基本配置:
安装Postfix
sudo apt-get install postfix mailutils
配置main.cf
myhostname = yourserver.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
三、监控脚本实现
创建/usr/local/bin/resource_monitor.sh
脚本:
!/bin/bash
阈值设置
CPU_THRESHOLD=90
MEM_THRESHOLD=85
DISK_THRESHOLD=80
收件人设置
RECIPIENT="admin@yourdomain.com"
获取系统数据
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/., ([0-9.])% id./1/" | awk '{print 100 - $1}')
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 100.0}')
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
告警判断
ALERT_MSG=""
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
ALERT_MSG+="CPU使用率过高: ${CPU_USAGE}%n"
fi
if (( $(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc -l) )); then
ALERT_MSG+="内存使用率过高: ${MEM_USAGE}%n"
fi
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
ALERT_MSG+="磁盘使用率过高: ${DISK_USAGE}%n"
fi
发送告警邮件
if [ -n "$ALERT_MSG" ]; then
echo -e "服务器资源告警:nn$ALERT_MSGn监控时间: $(date)" | mail -s "[紧急] 服务器资源告警 $(hostname)" "$RECIPIENT"
fi
四、定时任务配置
设置每5分钟执行一次监控:
编辑crontab
crontab -e
添加以下内容
/5 /usr/local/bin/resource_monitor.sh
五、高级优化建议
- 使用
sar
命令收集历史数据建立基线 - 集成Prometheus+Grafana实现可视化监控
- 添加进程级监控,识别具体消耗资源的进程
- 设置多级告警(Warning/Critical)
- 实现告警抑制机制避免邮件轰炸
通过以上配置,当系统资源达到预设阈值时,管理员将立即收到包含详细信息的告警邮件,便于快速定位和解决问题。建议定期审查和调整阈值参数以适应业务变化。
评论