#!/bin/bash
# 监控ElasticSearch服务器运行状态,若服务器停止运行则发送微信消息通知
# 脚本及配置文件config.json运行位置 根据实际目录修改
cd /root/Desktop
# 系统信息
Date=`date +%Y-%m-%d`
Date_time=`date "+%Y-%m-%d %H:%M:%S"`
Host_name=`hostname`
IP_addr=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
# 微信token获取接口参数
Grant_type="client_credential"
# 微信平台申请的APPID
Appid="*******************************"
# 微信平台申请的APP密码
Secret="****************************************"
# 微信平台发送消息token获取的地址,需要在微信平台上设置ip白名单才能获取
GURL="https://api.weixin.qq.com/cgi-bin/token?grant_type=$Grant_type&appid=$Appid&secret=$Secret"
# 获取微信token
# 获取微信访问token
# 返回的token结果json数据为
# {
# "access_token": "40_MYUorLPStF_XH9-XPetkaLWrWiwJoDtxiQqmO-HASzwnWTJ4dfnpxHaAcgk2GFac13y06p4psVJTb_msQlXk8ADLV2tQbf5ISSFihH4v9neoxp6XPBs_QgUivmSxGUhMzzcwweMzUXjwg38fGCAhABARNL",
# "expires_in": 7200
# }
function get_token(){
RESULT=$(/usr/bin/curl -s -G $GURL)
Token=$(echo ${RESULT} | jq -r '.access_token')
ExpiresIn=$(echo ${RESULT} | jq -r '.expires_in')
}
# 保存token到config.json文件中 时间戳记录token的最初获取时间,之后用于计算token是否失效
function save_token(){
echo "{\"access_token\":\"$Token\",\"expires_in\": $ExpiresIn,\"timestamp\":\"$Date_time\"}" > config.json
}
# 读取配置文件config.json获取access_token,token的获取时间及token过期时间长度
Token=$(jq -r '.access_token' config.json)
Timestamp=$(jq -r '.timestamp' config.json)
ExpiresIn=$(jq -r '.expires_in' config.json)
echo "Token: $Token"
echo "Timestamp: $Timestamp"
echo "ExpiresIn: $ExpiresIn"
# 判断token是否过期
# 计算token已经产生的时间长度
Time=$(($(date +%s) - $(date +%s -d "$Timestamp")));
echo "During time: $Time"
if [ $Time -gt $ExpiresIn ]
then
echo "微信Token已经过期"
# 获取新的微信访问token
get_token
# 保存微信访问token到config.json文件中
save_token
else
echo "微信Token仍然有效"
fi
# 微信访问接口url
PURL="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$Token"
# 微信消息参数
# 消息接收用户
ToUser="*********************************"
# 消息模板id 模板需要在微信平台事先定制,通过id值访问
Template_id="*************************************"
#监控Mysql服务
Port=`netstat -nlt|grep 3306|wc -l`
if [ $Port -ne 1 ]
then
# /etc/init.d/mysqld start
echo "$Date_time $IP_addr $Host_name MySQL is stopped"
else
echo "$Date_time $IP_addr $Host_name MySQL is running"
fi
#监控Elasticsearch服务
Port=`netstat -nlt|grep 9200|wc -l`
if [ $Port -ne 1 ]
then
# Elasticsearch服务器已经停止运行,发送微信消息通知
echo "$Date_time $IP_addr $Host_name Elasticsearch is stopped"
Para="{
\"touser\":\"$ToUser\",
\"template_id\":\"$Template_id\",
\"data\":{
\"title\": {
\"value\":\"elasticsearch服务器\",
\"color\":\"#173177\"
},
\"ip\":{
\"value\":\"$IP_addr\",
\"color\":\"#173177\"
},
\"time\": {
\"value\":\"$Date_time\",
\"color\":\"#173177\"
},
\"message\":{
\"value\":\"服务器停止运行\",
\"color\":\"#173177\"
}
}
}"
echo $Para
# 发送微信消息
curl --location --request POST ${PURL} --header 'Content-Type: application/json' --data-raw "$Para"
else
echo "$Date_time $IP_addr $Host_name Elasticsearch is running"
fi