使用python对mysql主从进行监控,并调用钉钉发送报警信息

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()

 

posted on 2018-09-04 18:56  空空道长  阅读(1316)  评论(0编辑  收藏  举报

导航