使用python对mysql主从进行监控

发布时间:2019-03-06 17:26:22编辑:auto阅读(1915)

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

     

关键字