开发系统监控脚本
1、需求描述?
编写名为sysmon.sh的Shell监控脚本
监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
百分比只需精确到个位,如7%、12%、23%等
出现以下任一情况时告警:磁盘占用率超过90%、CPU使用率超过80%、
内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
结合crond服务,每半小时执行一次监控脚本?
2、思路与命令测试
?分析:监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
df?命令
awk??命令
mpstat??命令(需安装sysstat软件包)
free?命令
crontab?命令
3、脚本编程与调试
?使用用df命令提取出根分区的磁盘占用率,赋值给变量DUG
?使用mpstat命令提取CPU使用率,赋值给变量CUG
?使用free命令提取出内存使用率,赋值给变量MUG
?使用if语句判断上述监控项目是否超标,将需要告警的信息保存到/tmp/alert.txt文件;若该存在则作为告警邮件发送
?调试优化并设置crontab计划
使用用df命令提取出根分区的磁盘占用率
df -hT |grep "/$" |awk ‘{print $6}‘ |awk -F% ‘{print $1}‘
使用mpstat命令提取CPU使用率,先安装需安装sysstat软件包
[[email protected] opt]# yum -y install sysstat
[[email protected] opt]# id=$(mpstat |grep all |awk ‘{print $12}‘ |awk -F"." ‘{print $1}‘)
[[email protected] opt]# echo "$id"
99
[[email protected] opt]# u=expr 100 - $id
[[email protected] opt]#
[[email protected] opt]# echo "$u"
1
使用free命令提取出内存使用率,
[[email protected] ~]# total=$( free -m |grep Mem |awk ‘{print $2}‘ )
[[email protected] ~]# echo $total ###捞取总内存
976
[[email protected] ~]# used=$( free -m |grep Mem |awk ‘{print $3}‘ )
[[email protected] ~]# echo $used ###捞取使用的内存。
589
[[email protected] ~]# mug=expr $used \* 100 / $total
### 这里我们要用到运算,使用的除以总的,但是直接除是小数,我们需要的是百分比,在则expr只能算整数运算,所以的先乘以100,得到的数值也是整数部分
[[email protected] ~]# echo $mug
60
编辑脚本信息编写名为sysmon.sh的Shell监控脚本
- 先编辑变量文件
使用用df命令提取出根分区的磁盘占用率,赋值给变量DUG
?使用mpstat命令提取CPU使用率,赋值给变量CUG
?使用free命令提取出内存使用率,赋值给变量MUG
编辑警告信息配置文件
出现以下任一情况时告警:磁盘占用率超过90%、CPU使用率超过80%、
内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
生成告警文件,配置如下
[ $DUG -ge 90 ] && echo "根分区内存使用率超标达到:$DUG %" >> /tmp/warrin.txt
###当根分区内存使用率大于 90 %,输出报警信息,并定向保存到/tmp/warrin.txt警告文件中
[ $CUG -ge 80 ] && echo "cpu使用率超标达到: $CUG %" >> /tmp/warrin.txt
###当cpu使用率大于 80 %,输出报警信息,并定向保存到/tmp/warrin.txt警告文件中
[ $MUG -ge 90 ] && echo "内存使用率超标达到: $MUG %" >> /tmp/warrin.txt
###当内存使用率大于 90 %,输出报警信息,并定向保存到/tmp/warrin.txt警告文件中
当有告警文件产生时,就发送邮件,
[ -f /tmp/warrin.txt ] && cat /tmp/warrin.txt | mail -s "警告"$amail && rm -rf /tmp/warrin.txt
###当/tmp/warrin.txt有文件生成时,就发送邮件,并删除/tmp/warrin.txt
整篇配置如下
###设置邮箱服务,添加第三方服务器发送邮件。
在邮箱配置文件 vim /etc/mail.rc 添加如下文件。
set bsdcompat
set [email protected] ###对方收到邮件时显示的发件人
set smtp="smtps://smtp.qq.com:465" ###指定第三方发送邮件的smtp服务器地址
set [email protected] ### 第三方发邮件的用户名
set smtp-auth-password=vyluygwcaxnabajc ###邮箱密码使用SMTP授权码
set smtp-auth=login ###SMTP的认证方式。默认是LOGIN,也可改为CRAM-MD5或PLAIN方式
set nss-config-dir=/etc/pki/nssdb ###存放认证证书的地址
set ssl-verify=ignore ###ssl协议发送
[[email protected] opt]# systemctl restart postfix.service? #重启服务
测试,修改参数,生成告警文件,并检验邮箱是否发送。
运行程序
./sysmon.sh
可以看到邮件
改回参数,编辑计划任务文件
crontab –e 添加计划任务,在里面添加该配置文件
[[email protected] opt]# systemctl start crond.service ###开启计划任务
[[email protected] opt]# crontab -e ###编辑计划任务
/30 /opt/sysmon.sh ### /表示每隔30分钟,后面运行程序不用加点,直接运行
先做一分钟测试
查看计划任务状态
每隔一分钟会收到一封邮件
表示计划任务也设置成功了。
在将其改回30,就可以了
再发送邮件时,出现的一些问题及解决办法:
Resolving host /smtp.qq.com . . .Could not resolve host: /smtp.qq.com"/root/dead.letter" 11/330
. . . message not sent.
是域名解析不成功,解决办法:
在vim /etc/resolv.conf #在本文件中增加一条记录,必须写在第一个,因为这个文件时顺序执行,会解析第一个nameserver,第一个解析不了再去解析下一个
nameserver 114.114.114.114
如果遇到,503错误,smtp-server: 535 Error
那代表你的邮箱还没开启smpt服务。 QQ邮箱登录后,设置–>帐号–>pop3/smtp,开启,然后QQ邮箱还会给出授权码,就是上面配置时候填的smtp-auth-passwd。
· · 连接超时 ,防火墙和核心防护没关。
[[email protected] ~]# systemctl stop firewalld.service
[[email protected] ~]# setenforce 0
原文地址:http://blog.51cto.com/14062619/2348846