服务监控告警——钉钉群机器人
本文演示一个利用钉钉群监控、告警服务器运行服务所处的状态。
1、新建钉钉群机器人
2、编写 Shell 脚本
#!/bin/bash
#端口
Port_Nginx="80"
Port_MySQL="3306"
#...此处省略多个端口,按照自己需求配置即可
Port_flink="xxx"
#网卡配置(可选)
# ifconfig="eth0"
#@管理员手机号
user="xxx"
# user2="xx"
#主机信息
Date=`date +%Y-%m-%d`
Date_time=`date "+%Y-%m-%d--%H:%M:%S"`
Host_name=`hostname`
IP_addr=`ifconfig $ifconfig | grep "inet" |awk 'NR==1{ print $2}'`
#监控项
Nginx_status=`netstat -lntup |grep -w "$Port_Nginx" |wc -l`':Nginx'
MySQL_status=`netstat -lntup |grep -w "$Port_MySQL" |wc -l`':MySQL'
#...此处省略多项,按照自己需求配置即可
flink_status=`netstat -lntup |grep -w "$Port_flink" |wc -l`':flink'
#钉钉webhook
Dingding_Url="把你新建的钉钉群机器人的webhook粘贴过来"
function SendDownMessageToDingding(){
#发送钉钉消息
curl -s "${Dingding_Url}" -H 'Content-Type: application/json' -d "
{
'msgtype': 'text',
'text': {'content': 'xxx服务监控\n$1服务down,请尽快处理!\n巡查时间:${Date_time}\nIP地址:${IP_addr}\n'},
'at': {'atMobiles': ['${user}'], 'isAtAll': true}
}"
}
function SendUpMessageToDingding(){
#发送钉钉消息
curl -s "${Dingding_Url}" -H 'Content-Type: application/json' -d "
{
'msgtype': 'text',
'text': {'content': 'xxx服务监控\n$1服务已恢复正常运行!\n巡查时间:${Date_time}\nIP地址:${IP_addr}\n'},
'at': {'atMobiles': ['${user}'], 'isAtAll': true}
}"
}
# log path
log_path="xxx"
# 遍历
#for i in #{$Nginx_status,$MySQL_status,$jobserver_status,$webserver_status,$Cache_status,$openapi_status,$userapi_status,$workbench_status,$keycloak_status,$vro#llout_status,$connector_status,$merge_status,$shadow_status,$sink_status,$flink_status}
#do
# name=`echo $i | awk -F ':' '{print $2}'`
# echo 1 > ${log_path}/${name}.log
#done
for i in {$Nginx_status,$MySQL_status,$jobserver_status,$webserver_status,$Cache_status,$openapi_status,$userapi_status,$workbench_status,$keycloak_status,$vrollout_status,$connector_status,$shadow_status,$flink_status}
do
statcode=`echo $i | awk -F ':' '{print $1}'`
name=`echo $i | awk -F ':' '{print $2}'`
old_statcode=`head -n 1 ${log_path}/${name}.log`
if [ $statcode -lt 1 ]
then
if [ $old_statcode -lt 1 ]
then echo "[ERROR] $name is still stopped! Status_code=$statcode"
else
echo "[ERROR] $name is stopped! Status_code=$statcode"
SendDownMessageToDingding $name
fi
else
if [ $old_statcode -ge 1 ]
then echo "[INFO] $name is still running normally! Status_code=$statcode"
else
echo "[INFO] $name returned to normal function! Status_code=$statcode"
SendUpMessageToDingding $name
fi
fi
echo $statcode > ${log_path}/${name}.log
done
3、定时任务
示例:
crontab -e
# 每五分钟执行一次
*/5 * * * * sh xx.sh
# 每半小时执行一次
*/30 * * * * sh xx.sh
# 每天的15时25分执行一次
25 15 * * * sh xx.sh
命令说明:
crontab -u //设定特定用户的定时服务
crontab -l //列出当前用户定时服务内容
crontab -r //删除当前用户的定时服务
crontab -e //编辑当前用户的定时服务
在设定编辑之前都建议列出服务查看一下:crontab -l