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