监控系统|实验
需求一:监控系统中的cpu、内存、硬盘、使用率超过80%进行邮件告警 (以qq邮箱为例)
一、安装配置mailx
yum install -y mailx
二、监控目标
- cpu使用率
- 内存使用率
- 硬盘使用率
告警条件:当任意资源使用率超过阈值时发送邮件
2.1日志目标
echo "$(date '+%Y-%m-%d %H:%M:%S'): $desc" >> /var/log/monitor.log
告警判断条件
CPU使用率80%
内存使用率80%
硬盘使用率80%
三、脚本编写
#设置阈值
dateMax=80
#获取系统资源使用率
CPULimit=$(top -bn1 | grep "Cpu" | awk '{print 100- $8}')
RAMLimit=$(free -m | awk '/Mem:/ {printf("%.2f"), $3/$2*100}')
#CPU 内存 硬盘监控
if [ $(echo "$CPULimit > $dateMax" | bc) -eq 1 ] || \
[ $(echo "$RAMLimit > $dateMax" | bc) -eq 1 ] || \
[ $DISKLimit -gt $dateMax ]
then}
title="资源告急"
desc="资源告急,CPU使用率高达${CPULimit}%,内存使用率高达${RAMLimit}%,磁盘使用率>高达${DISKLimit}%"
# 记录告警信息到日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): $desc" >> /var/log/monitor.log
#发送邮件
echo "$desc" | mailx -s "$title" "2654371993@qq.com"
#检查邮件发送结果
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S'): 告警邮件发送成功" >> /var/log/monitor.log
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): 告警邮件发送失败" >> /var/log/monitor.log
fi
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): 系统资源正常" >> /var/log/monitor.log
fi
需求二、监控系统中的IO await大于50进行邮件告警(使用qq邮箱)
脚本详情
#!/bin/bash
# 配置参数
IOMax=50
EMAIL="391038461@qq.com"
LOG_FILE="/var/log/monitor1.log"
# 使用 iostat -x 获取sda设备的IO使用率(%util)
IOLimit=$(iostat -x 1 2 | awk '/sda/ {print $NF}' | tail -1 | cut -d'.' -f1)
# 记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO使用率 $IOLimit%" >> "$LOG_FILE"
# 判断是否超过阈值
if [[ $IOLimit > $IOMax ]]
then
title="IO告急"
desc="IO告急,当前IO使用率高达${IOLimit}%,超过阈值${IOMax}%"
# 记录告警日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): $desc" >> "$LOG_FILE"
# 发送邮件
echo -e "Subject: $title\n\n$desc" | msmtp "$EMAIL"
# 检查发送结果
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO告警邮件发送成功" >> "$LOG_FILE"
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): IO告警邮件发送失败" >> "$LOG_FILE"
fi
fi
需求三、监控系统中的网络流量下载上传超过10M(可变)进行邮件告警(使用qq邮箱)
#!/bin/bash
NIC="ens33"
LIMIT=10 # 单位 M/s
NATLimit=10 # 限制值(用于判断)
EMAIL_TO="1261316341@qq.com"
# 取两次字节数差值,算速率
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/s
rx_rate=$(( (rx2 - rx1) / 1024 / 1024 ))
tx_rate=$(( (tx2 - tx1) / 1024 / 1024 ))
#引入上行速度和下行速度
echo "上传速率: ${tx_rate} MB/s"
echo "下载速率: ${rx_rate} MB/s"
#阈值判断
#网络监控
if [[ $rx_rate -gt $NATLimit ]] || [[ $tx_rate -gt $NATLimit ]];then
title="网络监控"
desc="网络带宽告急,下行速率高达${rx_rate},上行速率高达${tx_rate}MB/s,已超过 ${LIMIT}MB/s 的限制"
echo "警告: $desc"
#发送邮件
(
echo "Subject: $title"
echo "From: system_monitor@$(hostname)"
echo "To: 1261316341@qq.com"
echo ""
echo "$desc"
echo ""
echo "监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名: $(hostname)"
echo "网络接口: $NIC"
echo "阈值限制: ${LIMIT}MB/s"
) | mailx -a default "2654371993@qq.com" 2>/dev/null
# 检查邮件是否发送成功
if [ $? -eq 0 ]; then
echo "邮件已发送 $EMAIL_TO"
else
echo "邮件发送失败,请检查 mailx 配置"
fi
fi
三、