一、任务需求
1.监控内容包括CPU使用率,内存使用率,根分区的磁盘占有率
2.百分比只需精确到个位,如7%,12%,23%等
3.定时监测,3分钟一次记录到log.txt日志文件
4.出现以下任意情况时告警:磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
二、实现步骤
1.监测CPU、内存、根分区磁盘占有率
这里监测cpu使用mpstat命令,mpstat命令会显示各个可用cpu的信息;因此需要对信息进行一些处理:
CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
这里使用tail显示末尾最后一行,awk在对文本进行处理,-F会在末尾加上一个空格
而在shell脚本中,我们将使用CPU对处理好的数据进行调用。(此处代码为网学,非自写)
2.3分钟记录一次到log.txt
实现这一功能,使用的是 “>>” 重定向,“>>”会把文本拼接到文件的末尾。
log=$(date)$(echo ' disk:')${disk}$(echo ' CPU:')${CPU}$(echo ' mem:')${mem}
echo $log >> log.txt
date是日期,echo回显拼接数据,最后重定向写道日志里。
3.出现紧急情况告警
这里使用的是,mail命令,除去这一方法,大家还可以使用在自己的linux上搭建邮箱服务器的方式发送邮件,我这里使用的是外置smtp服务进行的邮件发送。
mail -s 'warning disk' 自己的邮箱@qq.com < ./log.txt
在使用mail前,首先对文件 /etc/mail.rc 文件进行配置:
sudo vi /etc/mail.rc
# For Linux and BSD, this should be set.
set bsdcompat
set from=发送邮箱@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=使用者@qq.com
set smtp-auth-password=密码或授权码
set smtp-auth=login
sudo使用root方式使用后续命令,一般使用后会获得持续一段时间的root权限。
授权码的获取:
以上步骤完成后,可能遇到无法发出邮件的可能,这是可以尝试关闭Linux防火墙。
systemctl stop firewalld.service
关闭后还无法收到,可以到邮箱的设置中设置一下白名单。
#/bin/bash
#Verson:0.1
disk=$(df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}')
CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
log=$(date)$(echo ' disk:')${disk}$(echo ' CPU:')${CPU}$(echo ' mem:')${mem}
echo $log >> log.txt
if [ $disk -ge 90 ] ;then
mail -s 'warning disk' 2404967389@qq.com < ./log.txt
elif [ $CPU -ge 80 ] ; then
mail -s 'warning CPU' 2404967389@qq.com < ./log.txt
elif [ $mem -ge 90 ] ; then
mail -s 'warning mem' 2404967389@qq.com < ./log.txt
fi
sleep 30
./本shell脚本名字.sh