Linux 系统资源监控与告警脚本
脚本功能概述
这两个 Shell 脚本实现了 Linux 系统资源的实时监控,包括 CPU 使用率、内存使用率、磁盘使用率、I/O 负载以及网络带宽使用情况。当任何资源使用率超过预设阈值时,脚本会自动发送邮件告警。
脚本一:网络带宽监控 (getNat.sh)
#!/bin/bash# 网络带宽监控脚本
# 功能:计算指定网络接口的上行和下行速率# 配置参数
NIC="ens33" # 网卡名称,根据实际系统修改(如 eth0, ens33, enp3s0)
LIMIT=10 # 带宽告警阈值,单位 MB/s# 获取两次字节数差值来计算速率
rx1=$(cat /sys/class/net/$NIC/statistics/rx_bytes)
tx1=$(cat /sys/class/net/$NIC/statistics/tx_bytes)
sleep 1
rx2=$(cat /sys/class/net/$NIC/statistics/rx_bytes)
tx2=$(cat /sys/class/net/$NIC/statistics/tx_bytes)# 计算速率 (字节 → MB)
rx_rate=$(( (rx2 - rx1) / 1024 / 1024 ))
tx_rate=$(( (tx2 - tx1) / 1024 / 1024 ))# 输出结果(供其他脚本调用)
export rx_rate tx_rate
使用说明
- 修改
NIC
变量为您的网络接口名称 - 调整
LIMIT
变量设置带宽告警阈值 - 此脚本会被主监控脚本调用,计算网络带宽使用情况
脚本二:系统资源监控主脚本 (CPUMonitor.sh)
#!/bin/bash# 系统资源监控与告警脚本
# 功能:监控CPU、内存、磁盘、I/O和网络带宽使用情况# 引入网络监控脚本
source ./getNat.sh# 监控阈值配置
dataMax=80 # CPU、内存、磁盘使用率阈值(%)
IOMax=50 # I/O 使用率阈值(%)
NATLimit=10 # 网络带宽阈值(MB/s)# 获取各项资源使用率
CPULimit=$(top -bn1 | grep "Cpu"| awk '{print 100- $8}')
RAMLimit=$(free -m | awk '/Mem:/ {printf("%.2f"), $3/$2*100}')
DISKLimit=$(df -h / | awk 'NR==2 {gsub("%","",$5); print $5}')
IOLimit=$(iostat -cy 1 1 | awk '/^ /{print $4}')# 网络带宽监控告警
if [[ $rx_rate -gt $NATLimit ]] || [[ $tx_rate -gt $NATLimit ]]; thentitle="网络带宽告警"desc="网络带宽使用超限,下行速率: ${rx_rate}MB/s,上行速率: ${tx_rate}MB/s"# 发送邮件告警(echo "Subject: $title"echoecho -e "$desc") | msmtp "your-email@example.com" # 替换为您的邮箱
fi# I/O 监控告警
if [[ $IOLimit -gt $IOMax ]]; thentitle="磁盘I/O告警"desc="磁盘I/O使用率超限,当前使用率: ${IOLimit}%"# 发送邮件告警(echo "Subject: $title"echoecho -e "$desc") | msmtp "your-email@example.com" # 替换为您的邮箱
fi# CPU、内存、磁盘监控告警
if [[ $CPULimit -gt $dataMax ]] || [[ $RAMLimit -gt $dataMax ]] || [[ $DISKLimit -gt $dataMax ]]; thentitle="系统资源告警"desc="系统资源使用超限:CPU使用率: ${CPULimit}%,内存使用率: ${RAMLimit}%,磁盘使用率: ${DISKLimit}%"# 发送邮件告警(echo "Subject: $title"echoecho -e "$desc") | msmtp "your-email@example.com" # 替换为您的邮箱
fi
安装与配置步骤
1. 安装必要工具
# 安装邮件发送工具 msmtp
sudo apt-get install msmtp msmtp-mta # Ubuntu/Debian
sudo yum install msmtp # CentOS/RHEL# 安装系统监控工具
sudo apt-get install sysstat # 包含 iostat 命令
2. 配置邮件发送
创建 msmtp 配置文件 ~/.msmtprc
:
account default
host smtp.example.com # 邮件服务器地址
port 587
from your-email@example.com
auth on
user your-email@example.com
password your-email-password
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
3. 设置脚本权限
chmod +x getNat.sh CPUMonitor.sh
4. 配置定时任务
添加 crontab 任务定期执行监控:
# 编辑当前用户的crontab
crontab -e# 添加以下行(每5分钟执行一次监控)
*/5 * * * * /path/to/CPUMonitor.sh
自定义配置指南
-
调整监控阈值:根据您的系统配置调整脚本中的阈值变量
dataMax
:CPU、内存、磁盘使用率阈值IOMax
:I/O 使用率阈值NATLimit
:网络带宽阈值
-
修改网络接口:在 getNat.sh 中修改
NIC
变量为您的实际网络接口名称 -
更改告警邮箱:将所有
your-email@example.com
替换为您的实际邮箱地址 -
调整监控频率:修改 crontab 中的时间设置来调整监控频率
注意事项
- 确保邮件配置正确,可以测试邮件发送功能
- 根据实际系统负载调整告警阈值,避免频繁误报
- 监控脚本需要适当的执行权限
- 对于生产环境,建议添加日志记录功能
- 可以考虑添加重复告警抑制机制,避免短时间内重复告警