开放系统监控shell脚本

开发系统监控脚本

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监控脚本

  1. 先编辑变量文件
    使用用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

时间: 2024-10-11 01:27:42

开放系统监控shell脚本的相关文章

MySQL主从复制监控shell脚本

########本脚本应用在生产环境中,是运用mysql主从的基础上######## vi mysqlm-s.sh   #!/bin/bash  ip=`ifconfig eth0|sed -n 2p|awk  '{ print $2 }'|awk -F : '{ print $2 }'`  port=`netstat -anl|grep 3306 |sed -n '1p' |awk '{print $4}'|awk -F: '{ print $2}'`  array=($(mysql -uUS

Lvs别样的自动部署监控shell脚本

Lvs别样的自动部署监控shell脚本   l 脚本功能: l 实验环境图: l 具体脚本: l 结果验证: l 参考资料: 先申明,本文现在已经在我公司的测试环境和生产测试环境使用.正式环境请用keepalived+lvs. 安装ipvsadm不多说了,先说说脚本的功能,脚本分为redirect server 端和realserver 端,脚本分别为 lvs_redirector.sh 和realserver.sh脚本.另外加一个监控脚本lvs_monitor.sh(此脚本来源网友,做了一点修

常用的主机监控Shell脚本

最近时不时有朋友问我关于服务器监控方面的问题,问常用的服务器监控除了用开源软件,比如:cacti,nagios监控外是否可以自己写shell脚本呢?根据自己的需求写出的shell脚本更能满足需求,更能细化主机监控的全面性. 下面是我常用的几个主机监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助. 1.查看主机网卡流量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/bin/bash #!/bin/bash #network #Mi

Linux常用的系统监控shell脚本

http://www.linuxqd.com下面是我常用的几个Linux系统监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助.1.查看主机网卡流量 #!/bin/bash #network #Mike.Xu while : ; do time=’date +%m”-”%d” “%k”:”%M’ day=’date +%m”-”%d’ rx_before=’ifconfig eth0|sed -n “8″p|awk ‘{print $2}’|cut -c7-’ tx_before

linux服务器系统负载监控-shell脚本

一.监控服务器系统负载情况: 1.用uptime命令查看当前负载情况(1分钟,5分钟,15分钟平均负载情况) # uptime   15:43:59 up 186 days, 20:04,  1 user,  load average:  0.01,    0.02,   0.00 系统负荷的经验法则:(详情参考:http://blog.csdn.net/skyline_loafer/article/details/26940539)(1) 主要观察"15分钟系统负荷",将它作为电脑正

Oracle数据库启动与停止监控shell脚本

实现如下目标 1.监控Oracle数据库的监听和实例的状态,如果监听或者实例挂了,则启动,并邮件告知,脚本尝试启动对应的服务 2.如果服务启动成功,则邮件通知刚才挂了,现在已经启动成功:如果启动失败,则邮件提示,刚才挂了,现在依然不能启动: 脚本并不复杂,比较初级,但是实现了需求,在测试环境下测试通过,不过还缺少一些挂死的状态监测,有待继续增强: [oracle@sdk31 ~]$ cat /home/oracle/scripts/check_db_lis.sh #!/bin/bash #set

网络流量监控shell脚本

网络收发包计数记录在 /proc/net/dev 文件中, 要取得流量, 只需要读取里面的内容两次, 然后相减, 再除以时间间隔即可. #!/bin/bash #Usage1,record in file: netmonitor <MinKB> <Interval> <FileName>#Usage2,print on terminal: netmonitor <MinKB> <Interval>#Record the value great t

linux系统监控shell脚本

代码如下,实现了Linux系统的一些常见的监控变量,分享给大家@.·[email protected] #=============================# #Filename=system_monitor.sh #Author:foxsir #Date:2016-02-15 #=============================# #!/bin/sh clear if [[ $# -eq 0 ]] then #Define Variable Reset_terminal Res

【sehll学习】linux运维一个简单shell脚本监控系统内存

学习shell脚本入门后,慢慢要尝试编写一些脚本练练手,在这先简单的学习写个系统内存的监控. 1.首先先要确定一下截取一下需要关注的内存使用值,可使用free 命令来操作 free -m 显示 一般在监控内存是我们都是截取 第三行(-/+ buffers/cache)的值.确定后可以使用管道线和grep命令来获取这个的值. free -m | grep - | awk  '{print $4}' 获取到他的值为  858 当中 grep -  就是匹配一下要选取的内容,不太熟悉的可以学习一下gr