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