返回列表 发帖

Zabbix调用Python3脚本监控Linux下的MySQL

笺注:这是在 LNMP一键安装包(lnmpa_CentOS6.9) 的基础上进行的。


被监控主机的数据库管理员root@localhost使用密码验证登录MySQL:
mysql -u"root" -p"888"
图片1.png
2022-9-12 16:29



查看当前登录的数据库用户:
mysql> Select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

mysql>


被监控主机查看自己的数据库版本:
mysql> Select version();
+------------+
| version()  |
+------------+
| 5.7.11-log |
+------------+
1 row in set (0.00 sec)


显示所有的库:
mysql> Show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.43 sec)

mysql>

注释:以上四个库是MySQL5.7默认就有的。



再授权数据库用户zhuohua@localhost(密码886),只能本地登录,对库mysql有完全控制的权限:
mysql> grant all on mysql.* to zhuohua@localhost identified by '886';
Query OK, 0 rows affected, 1 warning (0.10 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

mysql>


查看本地数据库用户zhuohua@localhost的权限:
mysql> Show grants for zhuohua@localhost;
+------------------------------------------------------------+
| Grants for zhuohua@localhost                               |
+------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhuohua'@'localhost'                |
| GRANT ALL PRIVILEGES ON `mysql`.* TO 'zhuohua'@'localhost' |
+------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql>



查看所有数据库用户及其主机信息:
select user,host from mysql.user;
图片2.png
2022-9-12 16:31



查看MySQL的最大连接数:
show variables like '%max_connections%';
图片3.png
2022-9-12 16:31



查看MySQL当前打开的连接数:
show status like 'threads_connected';
图片4.png
2022-9-12 16:32



查看MySQL当前处于激活状态的连接数:
show status like 'threads_running';
图片5.png
2022-9-12 16:32




查看单个库(mysql)的大小:(以MB为单位)
mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from information_schema.TABLES where table_schema = 'mysql';
+--------+
| data   |
+--------+
| 2.21MB |
+--------+
1 row in set (0.50 sec)

mysql>


查看单个库(mysql)的大小:(以字节为单位)
mysql> select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES where table_schema = 'mysql';
+---------+
| data    |
+---------+
| 2312172 |
+---------+
1 row in set (0.01 sec)

mysql>



查看当前数据库的用户数量:(库mysql的表user里面包含了数据库中所有用户的信息)
mysql> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

mysql>



############

被监控主机上安装第三方库(PyMySQL),可参考:Python3脚本管理Linux下的MySQL

查看PyMySQL的版本:
[root@zabbix_client ~]# pip3 freeze
PyMySQL==0.10.1
[root@zabbix_client ~]#

注释:PyMySQL可以管理MySQL,也可以管理MariaDB



######

在被监控主机上创建Python3脚本:(输出MySQL的最大连接数)

[root@zabbix_client ~]# cat /usr/local/xx.py
#coding=utf-8
import pymysql

def db_connect():

        #打开数据库连接;本地连接(localhost)、用户名、密码、其中一个库(mysql)的名称、端口号、字符集:
        db=pymysql.connect("localhost", "zhuohua", "886", "mysql",3306,charset="utf8")
       
        cursor=db.cursor()
        cursor.execute("show variables like '%max_connections%'") #执行SQL语句
        Results=cursor.fetchone()

        #print (Results) # ('max_connections', '500')
        #print (type(Results)) # <class 'tuple'>
       
        #print (Results[1]) # 500
        #print (type(Results[1])) # <class 'str'>
       
        Key_1 = int(Results[1])
        print (Key_1)
        #print (type(Key_1)) # <class 'int'>

        db.close()

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /usr/local/xx.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /usr/local/xx.py
500
[root@zabbix_client ~]#



######

在被监控主机上创建Python3脚本:(输出MySQL当前处于激活状态的连接数)

[root@zabbix_client ~]# cat /usr/local/yy.py
#coding=utf-8
import pymysql

def db_connect():

        db=pymysql.connect("localhost", "zhuohua", "886", "mysql",3306,charset="utf8")
       
        cursor=db.cursor()
        cursor.execute("show status like 'threads_running'") #执行SQL语句
        Results=cursor.fetchone()

        #print (Results) # ('Threads_running', '1')
        #print (type(Results)) # <class 'tuple'>
       
        #print (Results[1]) # 1
        #print (type(Results[1])) # <class 'str'>
       
        Key_1 = int(Results[1])
        print (Key_1)
        #print (type(Key_1)) # <class 'int'>

        db.close()

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /usr/local/yy.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /usr/local/yy.py
1
[root@zabbix_client ~]#



######

在被监控主机上创建Python3脚本:(输出当前数据库的用户数量)

[root@zabbix_client ~]# cat /usr/local/zz.py
#coding=utf-8
import pymysql

def db_connect():

        db=pymysql.connect("localhost", "zhuohua", "886", "mysql",3306,charset="utf8")
        cursor=db.cursor()
       
        SQL_1 = "select count(*) from user;" #SQL语句
        cursor.execute(SQL_1) #执行SQL语句
       
        Results=cursor.fetchone()

        #print (Results) # (3,)
        #print (type(Results)) # <class 'tuple'>
       
        print (Results[0])
        #print (type(Results[0])) # <class 'int'>

        db.close()

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /usr/local/zz.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /usr/local/zz.py
3
[root@zabbix_client ~]#



######

在被监控主机上创建Python3脚本:(输出单个库(mysql)的大小,以字节为单位)

[root@zabbix_client ~]# cat /usr/local/kk.py
#coding=utf-8
import pymysql

def db_connect():

        db=pymysql.connect("localhost", "zhuohua", "886", "mysql",3306,charset="utf8")
        cursor=db.cursor()
       
        SQL_1 = "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES where table_schema = 'mysql';"
        cursor.execute(SQL_1) #执行SQL语句
       
        Results=cursor.fetchone()

        #print (Results) # (b'2312172',)
        #print (type(Results)) # <class 'tuple'>
       
        #print (Results[0]) # b'2312172'
        #print (type(Results[0])) # <class 'bytes'>
       
        Key_1 = int(Results[0])
        print (Key_1)
        #print (type(Key_1)) # <class 'int'>

        db.close()

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


设置脚本权限:
[root@zabbix_client ~]# chmod a+x /usr/local/kk.py
[root@zabbix_client ~]#

脚本运行的结果:
[root@zabbix_client ~]# python3 /usr/local/kk.py
2312172
[root@zabbix_client ~]#





###############

被监控主机的Agent的安装可参考 Zabbix使用Agent监控CentOS6/Redhat6


修改被监控主机的Agent配置文件:
[root@zabbix_client ~]# vi /etc/zabbix/zabbix_agentd.conf

# UnsafeUserParameters=0
修改为:(启用该功能)
UnsafeUserParameters=1

插入:
UserParameter=command_1,/usr/bin/python3 /usr/local/xx.py
UserParameter=command_2,/usr/bin/python3 /usr/local/yy.py
UserParameter=command_3,/usr/bin/python3 /usr/local/zz.py
UserParameter=command_4,/usr/bin/python3 /usr/local/kk.py

如下图:
图片6.png
2022-9-12 16:40



保存好配置文件后,重启zabbix-agent:
[root@zabbix_client ~]# service zabbix-agent restart
Shutting down Zabbix agent: [确定]
Starting Zabbix agent: [确定]
[root@zabbix_client ~]#


备注:这相当于在被监控主机上进行本地监控,所以被监控主机无需打开防火墙的TCP 3306端口。



######

在Zabbix服务器测试,验证能否获取被监控主机(192.168.168.130)的键值:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.130 -p10050 -k "command_1"
500
[root@centos8 ~]#

[root@centos8 ~]#  /usr/local/zabbix/bin/zabbix_get -s 192.168.168.130 -p10050 -k command_2
1
[root@centos8 ~]#

[root@centos8 ~]#  /usr/local/zabbix/bin/zabbix_get -s 192.168.168.130 -k "command_3"
3
[root@centos8 ~]#

[root@centos8 ~]#  /usr/local/zabbix/bin/zabbix_get -s 192.168.168.130 -k command_4
2312172
[root@centos8 ~]#



##################Zabbix添加被监控主机:

配置》主机》创建主机:(主机名称无需与被监控主机的真实主机名一致;群组可以随便选;IP地址那里要输入被监控主机的IP地址;端口为10050)
图片7.png
2022-9-12 16:42

注释:
使用agent代理程序的接口。
使用 TCP 10050 端口。


主机MySQL5.7_Server_01添加成功:(主机可以不用模板的)
图片8.png
2022-9-12 16:43




给“MySQL的最大连接数”创建监控项:
自定义名称: MySQL command_1
键值: command_1
信息类型: 数字(无正负)
单位: !个
图片9.png
2022-9-12 16:44

备注:其他地方保持默认,点击底下的“添加”按键。



给“MySQL当前处于激活状态的连接数”创建监控项:
自定义名称: MySQL command_2
键值: command_2
信息类型: 数字(无正负)
单位: !个
图片10.png
2022-9-12 16:44

备注:其他地方保持默认,点击底下的“添加”按键。



给“当前数据库的用户数量”创建监控项:
自定义名称: MySQL command_3
键值: command_3
信息类型: 浮点数
单位: !个
图片11.png
2022-9-12 16:45

备注:其他地方保持默认,点击底下的“添加”按键。



给“单个库(mysql)的大小”创建监控项:
自定义名称: MySQL command_4
键值: command_4
信息类型: 数字(无正负)
单位: B
图片12.png
2022-9-12 16:46

备注:
使用单位“B”时,结果在单位换算时会每超过1024就除以1024,保留两位小数,是四舍五入;



######

给监控项“MySQL command_1”创建图形:
图片13.png
2022-9-12 16:46

监控项:
图片14.png
2022-9-12 16:46



给监控项“MySQL command_2”创建图形:
图片15.png
2022-9-12 16:47

监控项:
图片16.png
2022-9-12 16:47



给监控项“MySQL command_3”创建图形:
图片17.png
2022-9-12 16:47

监控项:
图片18.png
2022-9-12 16:48



给监控项“MySQL command_4”创建图形:
图片19.png
2022-9-12 16:48

监控项:
图片20.png
2022-9-12 16:48




######

查看图形:

监测》图形:
图片21.png
2022-9-12 16:49


图片22.png
2022-9-12 16:49


图片23.png
2022-9-12 16:49



图片24.png
2022-9-12 16:49


图片25.png
2022-9-12 16:49


图片26.png
2022-9-12 16:50



图片27.png
2022-9-12 16:50


图片28.png
2022-9-12 16:50


图片29.png
2022-9-12 16:50



图片30.png
2022-9-12 16:51


图片31.png
2022-9-12 16:51


图片32.png
2022-9-12 16:51






############
############

修改被监控主机的MySQL的最大连接数:( 没有代码就插入,要在[mysqld]下面 )
[root@zabbix_client ~]# vi /etc/my.cnf
[mysqld]
max_connections = 500
改为
max_connections = 1000


保存好配置文件后,重启MySQL服务:
[root@zabbix_client ~]# service mysql restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@zabbix_client ~]#


再次,在被监控主机上查看MySQL的最大连接数:
Show variables like '%max_connections%';
图片33.png
2022-9-12 16:52



再次,在Zabbix服务器上远程测试:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.130 -k command_1
1000
[root@centos8 ~]#


再次,查看图形“MySQL Command_1 image”:
图片34.png
2022-9-12 16:52


图片35.png
2022-9-12 16:53

注释:图形中的数据线是从右往左延伸的。

图片36.png
2022-9-12 16:53






相关文章:
MySQL的最大连接数/最大可打开表数/最大可打开文件数
Zabbix自定义监控Linux下的MySQL

Zabbix调用Python3脚本监控MySQL主从同步状态
Zabbix调用Python3脚本监控Linux下的MariaDB
Zabbix调用Python3脚本监控MSSQL
Zabbix调用Python3脚本监控Linux下的Oracle(一)

Zabbix使用模板监控Linux下的MySQL
Zabbix创建模板监控Windows下的MariaDB

Zabbix5.0.12_调用Python3脚本监控Linux下的MySQL

返回列表