#!/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_info
sys_mail
sys_wechat