龙空技术网

分享一个实用脚本—mysql数据库MHA集群钉钉告警脚本

波波说运维 943

前言:

此刻姐妹们对“mysql webhook”都比较重视,大家都想要了解一些“mysql webhook”的相关文章。那么小编同时在网摘上网罗了一些对于“mysql webhook””的相关资讯,希望各位老铁们能喜欢,朋友们快快来了解一下吧!

概述

今天主要分享一个MHA钉钉告警脚本,这逻辑比较难整,仅供参考。

钉钉告警脚本

#!/bin/bash#######################################copyright by hwb#check MHA Status#crontab time 00:10######################################3#调用函数库[ -f /etc/init.d/functions ] && source /etc/init.d/functionsexport PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binsource /etc/profile#root用户执行脚本[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1CONF="/etc/mha_master/app1.conf"MHA_IP="xxxx.88"IP1=`cat $CONF |grep hostname= | awk -F "=" '{print $2}'|sed -n '1p'`  #主节点IP2=`cat $CONF |grep hostname= | awk -F "=" '{print $2}'|sed -n '$p'`  #最后一个节点MHAUSR=`cat $CONF |grep "^user" |awk -F "=" '{print $2}'`MHAPW=`cat $CONF |grep "^password" |awk -F "=" '{print $2}'`LOG="/tmp/mha_log"mha_date=`date +"%Y%m%d-%H:%M:%S"`webhook=';mysql_status=`mysql -u$MHAUSR -p$MHAPW -h$IP2 -P 53306 -e "show slave status\G;"`[ -d $LOG ] || mkdir -p $LOGfunction SendMsgToDingding() {  curl $webhook -H 'Content-Type: application/json' -d "  {    'msgtype': 'text',    'text': {      'content': ' [通知]MHA manager \n MHA控制节点:$MHA_IP \n MHA主从监控节点:$IP2 \n MHA原主库IP:$IP1 \n MHA配置文件:$CONF\n $result \n 时间:$mha_date\n '    },    'at': {      'atMobiles': [	    "1882xx",		"18822xxx"	  ],	  "isAtAll": false    }  }"}function mha_status(){  echo ""  echo -e "\033[33m***********************************************自动检测MHA状态**************************************************\033[0m"cat  > $LOG/$IP2-sql-MS.txt <<eof${mysql_status}eof  master_ip=`cat $LOG/$IP2-sql-MS.txt |grep Master_Host |awk '{print $2}'`  SLIO=`cat $LOG/$IP2-sql-MS.txt |grep Slave_IO_Running |awk '{print $2}'`  SLSQ=`cat $LOG/$IP2-sql-MS.txt |grep Slave_SQL_Running: |awk '{print $2}'`  # 手动停止从库测试  if [ ! $master_ip ];then    result="事件:主从监控节点$IP2 出现异常,请检查$IP2"    echo -e "\033[31m [$mha_date] $result \033[0m"    SendMsgToDingding  else    action "*****主从监控节点$IP2正常!*****"   /bin/true    #判断MHA进程是否正常运行    ps aux |grep masterha_manager |grep -v grep    if [ $? -ne 0 ];then      #masterha_manager进程不存在的情况      masterha_check_status -conf=$CONF	  #手动kill manager进程测试或者只手动停止主库测试      if  [  $master_ip ==  $IP1  ] &&  [ $SLIO == "Yes"  ] && [ $SLSQ ==  "Yes" ];then        result="事件:仅为manager进程丢失,主从正常! \n 现在主库IP为$master_ip\n 从库状态:\n Slave_IO_Running:$SLIO \n Slave_SQL_Running:$SLSQ"		echo -e "\033[31m [$mha_date] $result \033[0m"		SendMsgToDingding      #手动kill manager进程,再停止主库测试      elif  [  $master_ip ==  $IP1  ] &&  [ $SLIO != "Yes"  ] || [ $SLSQ != "Yes" ];then        result="事件:manager进程丢失,主从异常! \n 现在主库IP为$master_ip\n 从库状态:\n Slave_IO_Running:$SLIO\n Slave_SQL_Running:$SLSQ"		echo -e "\033[31m [$mha_date] $result \033[0m"        SendMsgToDingding      #手动kill manager进程,手动切换主库后测试      elif  [  $master_ip != $IP1 ];then        result="事件:manager进程丢失,主从发生切换!\n 现在主库IP为$master_ip\n 从库状态:\n Slave_IO_Running:$SLIO\n Slave_SQL_Running:$SLSQ"		echo -e "\033[31m [$mha_date] $result \033[0m"        SendMsgToDingding      else        result="事件:manager进程丢失,请及时处理!\n 现在主库IP为$master_ip\n 从库状态:\n Slave_IO_Running:$SLIO\n Slave_SQL_Running:$SLSQ"		echo -e "\033[31m [$mha_date] $result \033[0m"        SendMsgToDingding      fi	else      masterha_check_status -conf=$CONF      action "*****MHA进程正常运行!*****"   /bin/true	      fi  fi    echo ""  echo -e "\033[33m***********************************************完成MHA状态检测**************************************************\033[0m"  echo ""  sleep 1}mha_status

脚本测试

因为场景比较多,所以写一下测试结果。

1、正常状态

2、手动kill manager进程测试

3、手动kill manager进程再停止主库测试

4、不手动kill manager进程,直接手动停止主库测试

因为停止主库,manager进程会自动停止,这里不加入判断主从切换逻辑。

5、调整钉钉链接后:

收到钉钉消息如下:

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下!

标签: #mysql webhook