#!/bin/bash#获取主机信息function sys_info(){ #主机名 HOST=`hostname` #以后零碎工夫 DATE=`date "+%Y/%m/%d-%H:%M:%S"` #零碎IP #零碎本地IP IP_ON=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"` #零碎外网IP IP_IN=`curl whatismyip.akamai.com` #内存信息 #物理内存 #内存总量 MEM_TOTAL=`free -m | grep Mem | awk '{print $2}'` #已应用内存 MEM_USED=`free -m | grep Mem | awk '{print $3}'` #残余内存 MEN_FREE=`free -m | grep Mem | awk '{print $4}'` MEN_BUFF_CACHE=`free -m | grep Mem | awk '{print $6}'` MEN_REALFREE=$[$MEN_FREE+$MEN_BUFF_CACHE] #Swap内存 #Swap总量 Swap_TOTAL=`free -m | grep Swap | awk '{print $2}'` #已应用内存 Swap_USED=`free -m | grep Swap | awk '{print $3}'` #残余内存 Swap_FREE=`free -m | grep Swap | awk '{print $4}'` #磁盘信息 #硬盘挂载设施(/dev/vda1) DISK_MOUNTING=`df -Ph |grep /dev/vda1|awk '{print $1}'` #硬盘总容量 DISK_TOTAL=`df -Ph |grep /dev/vda1|awk '{print $2}'` #硬盘已应用 DISK_USED=`df -Ph |grep /dev/vda1|awk '{print $3}'` #硬盘残余空间 DISK_FREE=`df -Ph |grep /dev/vda1|awk '{print $4}'` #硬盘使用率 DISK_PERCENTAGE=`df -Ph |grep /dev/vda1|awk '{print $5}'` #硬盘挂载目录 DISK_HOME=`df -Ph |grep /dev/vda1|awk '{print $6}'` #CPU信息 #脚本性能形容:根据/proc/stat文件获取并计算CPU使用率 #CPU工夫计算公式:CPU_TIME=user+system+nice+idle+iowait+irq+softirq #CPU使用率计算公式:cpu_usage=(idle2-idle1)/(cpu2-cpu1)*100 #默认工夫距离 TIME_INTERVAL=5 time=$(date "+%Y-%m-%d %H:%M:%S") LAST_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}') LAST_SYS_IDLE=$(echo $LAST_CPU_INFO | awk '{print $4}') LAST_TOTAL_CPU_T=$(echo $LAST_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}') sleep ${TIME_INTERVAL} NEXT_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}') NEXT_SYS_IDLE=$(echo $NEXT_CPU_INFO | awk '{print $4}') NEXT_TOTAL_CPU_T=$(echo $NEXT_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}') #零碎闲暇工夫 SYSTEM_IDLE=`echo ${NEXT_SYS_IDLE} ${LAST_SYS_IDLE} | awk '{print $1-$2}'` #CPU总工夫 TOTAL_TIME=`echo ${NEXT_TOTAL_CPU_T} ${LAST_TOTAL_CPU_T} | awk '{print $1-$2}'` #CPU使用率 CPU_USAGE=`echo ${SYSTEM_IDLE} ${TOTAL_TIME} | awk '{printf "%.2f", 100-$1/$2*100}'`}#邮件告警function sys_mail(){ #发送告警 #定义变量 sys_msg="----------------零碎巡逻----------------" sys_hostname="\n\t主机名\t=\t${HOST}" #sys_info="\n 零碎信息 \t=\t${SYS}" sys_time="\n\t零碎工夫 \t=\t${DATE}" sys_ip="\n\t本地IP:\t${IP_ON}\t\n\t外网IP:${IP_IN}" sys_msg2="\n----------------CPU信息----------------" sys_cpu="\n\tCPU使用率\t=\t${CPU_USAGE}%" sys_mem="\n----------------内存信息----------------\n物理内存总量:${MEM_TOTAL}MB\n\t 已用:${MEM_USED}MB\n\t 残余:${MEN_REALFREE}MB\n\tSwap内存总量:${Swap_TOTAL}MB\n\t 已用:${Swap_USED}MB\n\t 残余:${Swap_FREE}MB" sys_disk="\n----------------硬盘信息----------------\n硬盘挂载:${DISK_MOUNTING}\n\t总容量:${DISK_TOTAL}\n\t已用:${DISK_USED}\n\t残余:${DISK_FREE}\n\t利用率:${DISK_PERCENTAGE}\n\t挂载目录:${DISK_HOME}" sys_hang="\n-------------------end--------------------" #拼接变量 echo -e "$sys_msg $sys_hostname $sys_time $sys_ip $sys_msg2 $sys_cpu $sys_mem $sys_disk $sys_hang" | mail -s "零碎巡检" xxxxxxx@qq.com}#微信告警function sys_wechat(){ # 微信接口 CropID='xxxxxxx' Secret='xxxxxxx' GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret" Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}') PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken" To_User="xxxxxxx" To_Party="1" Agent_ID="1000002" /usr/bin/curl --data-ascii '{ "touser": "'${To_User}'", "toparty": "'${To_Party}'", "msgtype": "text", "agentid": "'${Agent_ID}'", "text": { "content": "'---------------日常巡检---------------''获取工夫:${DATE}''主机名称:${HOST}''近程地址:${IP_IN}''内网地址:${IP_ON}''---------------内存状况---------------''物理内存容量:${MEM_TOTAL}MB''已用:${MEM_USED}MB''残余:${MEN_REALFREE}MB''Swap内存容量:${Swap_TOTAL}MB''已用:${Swap_USED}MB''残余:${Swap_FREE}MB''---------------硬盘信息---------------''硬盘挂载:${DISK_MOUNTING}''总容量:${DISK_TOTAL}''已用:${DISK_USED}''残余:${DISK_FREE}''利用率:${DISK_PERCENTAGE}''挂载目录:${DISK_HOME}''---------------CPU信息---------------''CPU利用率:${CPU_USAGE} %''-----------------END------------------'"},"safe":"0"}' $PURL}sys_infosys_mailsys_wechat