1.编写python的监控脚本
A.通过获取mysql库中的状态值来判断这个mysql主从状态是否正常

B.进行两个状态值的判断
  
C.进行调取钉钉机器人,发送消息
    
2.设置定时任务进行脚本运行
crontab -e 添加定时任务
*/5 * * * * source ~/.bashrc && /usr/bin/python /lvdata/send_msg.py
给脚本执行权限 chmod +x /lvdata/send_msg.py
这里出现一个问题,就是手工能执行脚本,但定时任务时不能执行python脚本,参考解决方法:
1.将脚本中的中文进行删除或更改为英文
2.在对日志监控查看时,脚本确以执行,但没有达到预期的效果
tail -f /var/log/cron
Sep 4 18:25:01 VM_DATA_ANALYSIS_DB_38 CROND[20870]: (root) CMD (/usr/bin/python /lvdata/send_msg.py)
然后将定时任务进行修改 */5 * * * * source ~/.bashrc && /usr/bin/python /lvdata/send_msg.py,再次查看,能够正常运行
整个脚本
#!/usr/bin/python
  import os
  import json
  import urllib2
  def get_fljr189_status():
		  #获取SQL_Running 的状态值
          SQL=os.popen("mysql -uroot -p密码-S /tmp/mysql.sock \"-e show  slave '自定义名称' status\G\"|grep \"Slave_SQL_Running\"")
		  #获取IO_Running 的状态值
          IO=os.popen("mysql -uroot -p密码 -S /tmp/mysql.sock \"-e show  slave '自定义名称' status\G\"|grep \"Slave_IO_Running\"")
		  #获取IP地址
          IP=os.popen("mysql -uroot -p密码 -S /tmp/mysql.sock \"-e show  slave '自定义名称' status\G\"|grep \"Master_Host\"")
		  #对SQL_Running 和 IO_Running状态值进行判断
          sql_status=cmp(SQL.read().split(":")[1].strip(),"Yes")
          io_status=cmp(IO.read().split(":")[1].strip(),"Yes")
          ip=IP.read().split(":")[1]
		  #如果这两个值都为Yes,则不报警
          if(sql_status==0 and io_status==0):           
                pass
          else:
		  #如果有不为Yes的值,则开发通过python 调用钉钉发送信息到群中
	        send_msg(ip)
 
#调用钉钉发送信息到群中
def send_msg(ip):
	  #钉钉的webhook 值,如有不知道可自行百度
	  url="https://oapi.dingtalk.com/robot/send?access_token="
	  headers={
                "Content-Type":"application/json",
                "Charset":"UTF-8"
          }
	  data={
              "msgtype":"text",
              "text":{
              "content":str(ip)+"master-slave Error"
          },
              "at":{
       	            "isAtAll":True
              }
}	
	  data=json.dumps(data)
	  request=urllib2.Request(url,data=data,headers=headers)
          response=urllib2.urlopen(request)
          print(response.read())
get_fljr189_status()