#! /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
系统运行参数监控与邮件报警
于 2023-02-22 04:17:33 首次发布