系统运行参数监控与邮件报警

#! /bin/env bash
. /etc/profile
. ~/.bash_profile

##################################################################
#                       Linux_Monitor                            #
#                                                                #
# description:./startup.sh                                       #
# auther: https://blog.youkuaiyun.com/perfect_zdq                      #
# date: 2021-8-23                                                #
##################################################################


cat << EOF
##################################################################
########      Welcome to use Linux_Monitor system      ###########
##################################################################
EOF

#时间
DATE=`date '+%Y-%m-%d %H:%M:%S'`
TIME=`date +%k:%M:%S`#时分秒
today=`date +%Y%m%d`

line='==============='
#每天生成一个日志文件
log_file="$0_$today.log"


########################系统参数获取###########################


#获取IP地址
IP_ADDR=`ifconfig ens33|grep "broadcast"|awk '{print $2}'|cut -d: -f 2`
#IP_ADDR=`ifconfig | grep inet| head -n 1|awk '{print $2}'`
#判断是否获取到值,做相应处理
if test -z $IP_ADDR; then
   #echo "The result is empty."
   IP_ADDR=`ifconfig | grep inet| head -n 1|awk '{print $2}'`
else
   echo 
fi


#CPU使用率(shell不可直接进行小数运算,所以不能用expr)
cpu_syl=`echo 100 $(top -b -n 1 | grep Cpu | head -n 1 | awk '{print $8}')| awk '{printf("%0.3f\n",$1-$2)}'`
#内存使用率
mem_syl=`echo "$(top -b -n 1 | grep Mem | head -n 1 | awk '{print $8}') $(top -b -n 1 | grep Mem | head -n 1 | awk '{print $4}') 100 " | awk '{printf("%0.3f\n",$1/$2*$3)}'`
#mem_info=`free -m |grep "Mem"|awk '{print "Total",$1,$2"M"}'`
#硬盘使用率
disk_syl=`echo "$(echo $(echo -n $(df | sed -n '2,$p' | awk '{print $3}')| tr ' ' '+') | bc ) $(echo $(echo -n $(df | sed -n '2,$p' | awk '{print $2}') | tr ' ' '+' ) | bc ) 100 " | awk '{printf("%0.3f\n",$1/$2*$3)}'`
#io使用率
#用法:如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈
io_syl=`iostat -x 1 1 | sed -n '7p'| awk '{print $NF}'`
#服务进程状态
#pid_stat=`ps aux | grep redis| awk '{print $2}'`
#获取Mysql运行状态
mysql_status=`/bin/systemctl status mysqld.service | grep 'Active' | awk '{print $2}'|tr -d ' '`

#load_info=`uptime |awk '{print "Current Load: "$(NF-2)}'|sed 's/\,//g'` 
#disk_info=`fdisk -l|grep "Disk"|grep -v "identifier"|awk '{print $2,$3,$4}'|sed 's/,//g'`
#cpu_info2=`cat /proc/cpuinfo |grep "physical id"|sort |uniq -c|wc -l`serv_info=`hostname |tail -1` 
#cpu_info1=`cat /proc/cpuinfo |grep 'model name'|tail -1 |awk -F: '{print $2}'|sed 's/^ //g'|awk '{print $1,$3,$4,$NF}'` 

FREE=`vmstat 1 2 | sed -n '/[0-9]/p' | sed -n '2p' | gawk '{print $4}'`
IDLE=`vmstat 1 2 | sed -n '/[0-9]/p' | sed -n '2p' | gawk '{print $15}'`
#查看uptime获取在线用户数
USERS=`uptime | sed 's/user.*$//' | gawk '{print $NF}'`
LOAD=`uptime | gawk '{print $NF}'`



##############数据库操作####################
#数据库配置信息
#用户
readonly user="root"
#密码
readonly password="******"
#地址
readonly host="192.168.0.1"
#表名
readonly table="school.t_jkxx_linux_fwq"
#建立数据库连接
readonly mysql_i_1="mysql -u"$user" -p"$password" -h"$host" -e"

#数据插入insert
#表字段
readonly i_columns_name="rksj,sjsj,ip_address,cpu_syl,io_syl,mem_syl,disk_syl,mysql_status"
readonly i_columns_value="sysdate(),'$DATE','$IP_ADDR','$cpu_syl','$io_syl','$mem_syl','$disk_syl','$mysql_status'"


echo -e "\033[32m${line}正在插入数据,请等待。。。${line}\033[0m"
echo -e "\033[32m服务器IP:${IP_ADDR}、CPU使用率${cpu_syl}、内存使用率${mem_syl}、>硬盘使用率${disk_syl}、io使用率${io_syl}\033[0m"

$mysql_i_1 "insert into $table ($i_columns_name) values($i_columns_value)" > /dev/null 2>&1 &
if [ $? -eq 0 ]
	then
		echo Data added successfully 
	else
		echo Problem adding data
fi
sleep 2
#退出mysql登陆
$mysql_i_1 "exit" > /dev/null 2>&1 &



###########邮件发送操作#################
#编辑邮件发送配置文件
#vim /etc/mail.rc

#对方收到邮件时显示的发件人
set from=15111222333@163.com
#指定第三方发邮件的smtp服务器地址
set smtp=smtp.163.com
#第三方发邮件的用户名
set smtp-auth-user=15111222333@163.com
#用户名对应的密码,有些邮箱填的是授权码
set smtp-auth-password=FQFZZZZLIYVYZZZZ
#SMTP的认证方式,默认是login,也可以改成CRAM-MD5或PLAIN方式
set smtp-auth=login
                              
LIST= df -h |grep "^/dev/" > list.txt
while read line 
do
        D_Name=`echo $line|awk '{print $1,$NF"分区"}'`  # 打印以/dev/开头的文件系统和挂载点
        D_Total=`echo $line|awk '{print $2}'`   # 打印以/dev/开头的磁盘容量
        D_Avail=`echo $line|awk '{print $4}'`   # 打印以/dev/开头的磁盘可用内存
        #echo $(df -h |grep "^/dev/")|awk '{print $5}'|sed 's/%//g'
        D_Percent=`echo $line|awk '{print $5}'|sed 's/%//g'`  # 打印以/dev/开头的已用情况(%)

        if [ "$D_Percent" -ge 10 ];then
cat >email.txt <<EOF
*********** DISK Monitor Email ***********
 --------------------------------------------------------------------------------------------
|通知时间:$DATE																				
|通知类型:故障																				
|服务名称:Disk Linux_Monitor																
|主机地址:$IP_ADDR																			
|提醒状态:警告																				
|额外信息:CRITICAT - DISK Monitor:$D_Name Used more than ${D_Percent}%  # 磁盘监控器的使用率 	
 --------------------------------------------------------------------------------------------
EOF
	if [ "$D_Percent" -ge 10 ];then
        # 超过磁盘的使用率,提示用户检查
        echo "The $D_Name has been used for more than ${D_Percent}%,Please check."
        # 发送邮件报警
        #mail –s “邮件主题” –c”抄送地址” –b “密送地址” -- -f 发送人邮件地址 –F 发件人姓名 < 要发送的邮件内容
        mail -s "$D_Name warning" 15111222333@qq.com < email.txt
    fi

done <list.txt                                            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Realeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值