Linux 系统资源告警邮件自动通知实现指南

2025.5.30 杂七杂八 754

Linux 系统资源告警邮件自动通知实现指南

本文详细介绍如何在Linux系统中配置资源监控与邮件告警功能,通过Shell脚本结合crontab定时任务实现CPU、内存、磁盘等关键指标的自动化监控,并在资源超阈值时触发邮件通知,帮助运维人员快速响应系统异常。

一、核心组件与原理

实现Linux系统资源告警邮件通知需要以下核心组件:

  • 监控工具:使用freedftop等原生命令采集数据
  • 邮件服务:配置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)
  • 实现告警抑制机制避免邮件轰炸

通过以上配置,当系统资源达到预设阈值时,管理员将立即收到包含详细信息的告警邮件,便于快速定位和解决问题。建议定期审查和调整阈值参数以适应业务变化。

评论