python脚本监控MySQL主从状态
python脚本监控MySQL主从状态
一、脚本
# 更改成对应的主机IP、用户名、密码即可
# coding:utf-8
import pymysql
import sys
class Check_mysql_repl():
def __init__(self):
self.host= "192.168.1.112"
self.user="root"
self.password="123"
self.database= "test"
self.conn = pymysql.connect(host=self.host, user=self.user, password=self.password, database=self.database)
self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
self.sql="show slave status"
self.cursor.execute(self.sql)
self.data= self.cursor.fetchall()
self.io = self.data[0]['Slave_IO_Running']
self.sql = self.data[0]['Slave_SQL_Running']
self.time = self.data[0]['Seconds_Behind_Master']
self.conn.close()
def get_io_status(self):
if self.io == 'Yes':
return 1
else:
return 0
def get_sql_status(self):
if self.sql == 'Yes':
return 1
else:
return 0
if __name__ == '__main__':
mysql_db = Check_mysql_repl()
if len(sys.argv) != 2:
try:
print("Usages:%s [io|sql|time]") % sys.argv[0]
except:
pass
if sys.argv[1] =='io':
print(mysql_db.get_io_status())
elif sys.argv[1] == 'sql':
print(mysql_db.get_sql_status())
elif sys.argv[1] == 'time':
print(mysql_db.time)
else:
print("it have no such argvs!")
二、执行脚本
[root@salve1 ~]$ python3 check_mysql.py io
1
[root@salve1 ~]$ python3 check_mysql.py sql
1
[root@salve1 ~]$ python3 check_mysql.py time
0
[root@salve1 ~]$ python3 check_mysql.py xx
it have no such argvs!
[root@salve1 ~]$ python3 check_mysql.py fdsaf fdsafdsf
Usages:%s [io|sql|time]
Traceback (most recent call last):
File "check_mysql.py", line 35, in <module>
print("Usages:%s [io|sql|time]") %sys.argv[0]
TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'
三、Zabbix配置配合Python脚本来实现功能
3.1、Zabbix客户端的自定义key配置:
我们先把文件check_mysql.py 传到/etc/zabbix/scripts
下,然后添加执行权限
chmod +x /etc/zabbix/scripts/check_mysql.py
vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
我们首先把自定义key的开关打开。Zabbix 会读取/etc/zabbix/zabbix_agentd.d/
下面的内容。
vim /etc/zabbix/zabbix_agentd.d/mysql.conf
###
UserParameter=mysql.repl_io,python3 /etc/zabbix/scripts/check_mysql.py io
UserParameter=mysql.repl_sql,python3 /etc/zabbix/scripts/check_mysql.py sql
UserParameter=mysql.repl_time,python3 /etc/zabbix/scripts/check_mysql.py time
我们再修改了配置之后,需要重启Zabbix的客户端才能生效:
systemctl restart zabbix-agent
我们能来执行一下看看效果。
$ zabbix_get -s127.0.0.1 -k mysql.repl_io
1
$ zabbix_get -s127.0.0.1 -k mysql.repl_sql
1
$ zabbix_get -s127.0.0.1 -k mysql.repl_time
0
添加Zabbix的模板以及监控项和触发器
我们已经可以获取了对应的key值,现在要做的只要加监控项以及触发器就可以实现告警的完整流程了。当然你可以直接加到主机上,但是还是推荐先创建模板,在模板里添加需要的监控项和触发器。然后再应用到主机上。那样模板可以复用。
(1)创建模板
配置--->模板,创建名为Check_Mysql
的模板,如下图所示:
(2) 创建模板Check_Mysql
的监控项
我们通过在模板上创建三个监控项,分别为 mysql.repl_io
,mysql.repl_sql
,mysql.repl_time
。
我们以添加 mysql.repl_io
为例,如下图所示,其他两个监控项的添加类似。
其他另外两个添加之后的图示如下:
监控项,我们都添加完了,剩下的就是添加触发器了。我们以添加 mysql.repl_io
为例,监控想如果不等于1的话就表示 Slave_IO_Running
线程不正常,需要告警出来。
mysql.repl_sql 的添加类似。我们来添加一下 主从延迟时间 mysql.repl_time
,如下图所示:
到此我们看看三个的截图:
到此我们就已经成功的添加了监控mysql主从状态的模板,我们链接到刚才我们的脚本所在机器的客户端上即可实现统一的告警处理了。
我们选择 主机--->模板--->链接到模板(Check_Mysql) 即可。
这就是监控Mysql主从复制的整个流程,代码都已经实现。