性能监控shell脚本编写
目录
别名设置
1、监控系统中的cpu使用率超过80%进行邮件告警
2、监控系统中的内存使用率超过80%进行邮件告警
3、监控系统中的硬盘使用率超过80%进行邮件告警
4、监控系统中的IO await大于50进行邮件告警
5、监控系统中的网络流量下载上传超过10M(可变)进行邮件告警
别名设置
#!/bin/bash# 日志文件路径
LOG_FILE="/opt/export/resource_monitor.log"
# 错误日志文件路径
ERROR_LOG_FILE="/opt/export/resource_monitor_error.log"
# 当前时间戳(统一日志时间格式:年-月-日 时:分:秒)
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
#邮箱
mail="1239114231@qq.com"
#当前服务器
hostname=Why
1、监控系统中的cpu使用率超过80%进行邮件告警
#cpu监控
check_cpu()
{
cpu_yuzhi=80 #cpu阈值#获取cpu使用率cpu_use=$(top -bn1 |grep Cpu|awk '{print $2}'|cut -d. -f1)echo "[$CURRENT_TIME] cpu检查结果: cpu当前使用率为$cpu_use%" >>"$LOG_FILE"#检查cpu使用率if (( $cpu_use >= $cpu_yuzhi )) ; then# 已使用cpu所占百分比超过阈值aaa=$"警告:cpu使用率超过$cpu_yuzhi%,当前cpu使用率为$cpu_use%"echo "$aaa" >&2echo "$CURRENT_TIME - $aaa" >>"$LOG_FILE"echo "$aaa" | mail -s "cpu使用警告 - 服务器 $hostname" $mailecho "警告邮件已发送至 $mail" fiecho "check_cpu调用成功,当前使用率为$cpu_use%"
}
2、监控系统中的内存使用率超过80%进行邮件告警
#内存监控
check_Mem()
{
Mem_yuzhi=80 #内存阈值#获取内存使用率Mem_use=$(free|awk '/Mem/{print int(100*$3/$2)}')echo "[$CURRENT_TIME] 内存检查结果:内存当前使用率为$Mem_use%" >>"$LOG_FILE"#检查内存使用率if (( $Mem_use >= $Mem_yuzhi )) ; then# 已使用内存所占百分比超过阈值bbb=$"警告:内存使用率超过$Mem_yuzhi%,当前内存使用率为$Mem_use%"echo "$bbb" >&2echo "$CURRENT_TIME - $bbb" >>"$LOG_FILE"echo "$bbb" | mail -s "内存使用警告 - 服务器 $hostname" $mailecho "警告邮件已发送至 $mail" fiecho "check_Mem调用成功,当前使用率为$Mem_use%"
}
3、监控系统中的硬盘使用率超过80%进行邮件告警
#磁盘监控
check_disk()
{
yuzhi=80 #磁盘阈值#获取磁盘使用率use=$(df / | awk 'NR==2{print int(100*($3/$2))}')echo "[$CURRENT_TIME] 磁盘检查结果: / 文件系统当前使用率为$use%" >>"$LOG_FILE"#检查磁盘使用率if (( $use >= $yuzhi )) ; then# 已使用磁盘空间所占百分比超过阈值xxx=$"警告:文件系统磁盘使用率超过$yuzhi%,当前磁盘使用率为$use%"echo "$xxx" >&2echo "$CURRENT_TIME - $xxx" >>"$LOG_FILE"echo "$xxx" | mail -s "磁盘空间警告 - 服务器 $hostname" $mailecho "警告邮件已发送至 $mail" fiecho "check_disk调用成功,当前使用率为$use%"
}
4、监控系统中的IO await大于50进行邮件告警
#io await 监控
check_io()
{
io_yuzhi=50 #io阈值#获取io 使用率io_use=$(iostat|awk 'NR==4{print $4}'|cut -d. -f1 )echo "[$CURRENT_TIME] io检查结果: 当前io await为$io_use%" >>"$LOG_FILE"#检查io 使用率if (( $io_use >= $io_yuzhi )) ; then# io await所占百分比超过阈值yyy=$"警告:io await使用率超过$io_yuzhi%,当前io await使用率为$io_use%"echo "$yyy" >&2echo "$CURRENT_TIME - $yyy" >>"$LOG_FILE"echo "$yyy" | mail -s "iowait警告 - 服务器 $hostname" $mailecho "警告邮件已发送至 $mail" fiecho "check_io调用成功,当前使用率为$io_use%"
}
5、监控系统中的网络流量下载上传超过10M(可变)进行邮件告警
#网络流量下载上传监控
check_net()
{
net_yuzhi=10240 #上传下载阈值#获取网络流量上传下载速率net_use_down=$(sar -n DEV 1 3|grep ens33|awk 'NR==4{print $5}'|cut -d. -f1)net_use_up=$(sar -n DEV 1 3|grep ens33|awk 'NR==4{print $6}'|cut -d. -f1)echo "[$CURRENT_TIME] 检查结果: 当前下载速率为:$net_use_down kb/s 上传速率为:$net_use_up kb/s" >>"$LOG_FILE"#检查网络流量上传下载速率if (( $net_use_down >= $net_yuzhi )) ; then# 已使用网络流量上传或下载速率超过阈值zzz=$"警告:网络流量下载率超过$net_yuzhi kb/s,当前下载速率为$net_use_down kb/s"echo "$zzz" >&2echo "$CURRENT_TIME - $zzz" >>"$LOG_FILE"echo "$zzz" | mail -s "网络流量下载警告 - 服务器 $hostname" $mailecho "警告邮件已发送至 $mail" elif (( $net_use_up >= $net_yuzhi )) ; thenZZZ=$"警告:网络流量上传率超过$net_yuzhi kb/s,当前上传速率为$net_use_up kb/s"echo "$ZZZ" >&2echo "$CURRENT_TIME - $ZZZ" >>"$LOG_FILE"echo "$ZZZ" | mail -s "网络流量上传警告 - 服务器 $hostname" $mailecho "警告邮件已发送至 $mail" fiecho "check_net调用成功,当前上传率为$net_use_up kb/s 下载速率为$net_use_down kb/s"
}
check_cpu
check_Mem
check_disk
check_io
check_net
cat $LOG_FILE|tail -10