返回列表 发帖

Zabbix创建模板监控Windows下的MariaDB

笺注:
被监控主机的Agent的安装可参考 Zabbix使用Agent监控Windows2008R2
MariaDB的安装可参考 Windows2008R2_UPUPW搭建WordPress+Discuz!7.2


被监控主机配置MariaDB数据库:( 使用数据库管理员root@localhost )
d:
cd UPUPW_AP5.6\MariaDB\bin
mysql -uroot -p888

图片1.png


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

MariaDB [(none)]>


被监控主机查看自己的MariaDB版本:
MariaDB [(none)]> Select version();
+----------------+
| version()      |
+----------------+
| 10.1.8-MariaDB |
+----------------+
1 row in set (0.00 sec)

MariaDB [(none)]>



再授权数据库用户zbx_monitor@localhost(数据库用户可以不要密码的),只能本地登录,对所有的库有完全控制的权限:
MariaDB [(none)]> create user zbx_monitor@localhost;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on *.* to zbx_monitor@localhost;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>


查看本地数据库用户zbx_monitor@localhost的权限:
MariaDB [(none)]> show grants for zbx_monitor@localhost;
+----------------------------------------------------------+
| Grants for zbx_monitor@localhost                         |
+----------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zbx_monitor'@'localhost' |
+----------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]>



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

MariaDB [(none)]>


查看所有数据库用户及其主机信息:
MariaDB [(none)]> select user,host from mysql.user;
+-------------+-----------+
| user        | host      |
+-------------+-----------+
| root        | localhost |
| zbx_monitor | localhost |
+-------------+-----------+
2 rows in set (0.00 sec)

MariaDB [(none)]>



查看所有的库:
MariaDB [discuz]> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| discuz             |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

MariaDB [discuz]>



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

在CMD命令行中显示当前路径:
D:\UPUPW_AP5.6\MariaDB\bin>echo %cd%
D:\UPUPW_AP5.6\MariaDB\bin

D:\UPUPW_AP5.6\MariaDB\bin>


在CMD命令行中显示当前数据库的用户数量:
D:\UPUPW_AP5.6\MariaDB\bin>mysql -u"zbx_monitor"  -sN -e "Select count(*) from mysql.user;"
2

D:\UPUPW_AP5.6\MariaDB\bin>


在CMD命令行中显示所有库:
D:\UPUPW_AP5.6\MariaDB\bin>mysql -u"zbx_monitor" -sN -e "show databases;"
db1
discuz
information_schema
mysql
performance_schema
test


D:\UPUPW_AP5.6\MariaDB\bin>


在CMD命令行中显示所有库的总大小:(以字节为单位)
D:\UPUPW_AP5.6\MariaDB\bin>mysql -u"zbx_monitor"  -sN -e "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES;"
9250868

D:\UPUPW_AP5.6\MariaDB\bin>


在CMD命令行中显示库discuz的大小:(以字节为单位)
D:\UPUPW_AP5.6\MariaDB\bin>mysql -u"zbx_monitor" -sN -e "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES where table_schema = 'discuz';"
753595

D:\UPUPW_AP5.6\MariaDB\bin>


在CMD命令行中显示库db1的大小:(以字节为单位)
D:\UPUPW_AP5.6\MariaDB\bin>mysql -u"zbx_monitor" -sN -e "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES where table_schema = 'db1';"
7667712

D:\UPUPW_AP5.6\MariaDB\bin>


在CMD命令行中显示库db1的表users的大小:(以字节为单位)
D:\UPUPW_AP5.6\MariaDB\bin>mysql -u"zbx_monitor" -sN -e "select concat(sum(DATA_LENGTH))as data from information_schema.TABLES where table_schema='db1' and table_name='users';"
16384

D:\UPUPW_AP5.6\MariaDB\bin>



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

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

查看PyMySQL的版本:
D:\UPUPW_AP5.6\MariaDB\bin>pip3 freeze
PyMySQL==0.10.1

D:\UPUPW_AP5.6\MariaDB\bin>

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



######

在被监控主机上创建Python3脚本:( d:\script_1.py )
#coding=utf-8
import pymysql

def db_connect():

        #打开数据库连接;本地连接(localhost)、用户名、密码、其中一个库(mysql)的名称、端口号、字符集。
        db = pymysql.connect("localhost", "zbx_monitor", "", "mysql",3306,charset="utf8")
       
        cursor = db.cursor()
       
        Sql_1 = "select count(*) from user" #输出当前数据库的用户数量
        cursor.execute(Sql_1)
        Result_1 = cursor.fetchone()

        #print(Result_1) #(2,)
        #print(type(Result_1)) #<class 'tuple'>
        print(Result_1[0])
        #print(type(Result_1[0])) #<class 'int'>

        db.close()

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

if __name__ == "__main__":
        main()


被监控主机本地运行脚本的结果:
C:\Users\Administrator>python d:\script_1.py
2

C:\Users\Administrator>



######

在被监控主机上创建Python3脚本:( d:\script_2.py )
#coding=utf-8
import pymysql

def db_connect():

        db = pymysql.connect("localhost", "zbx_monitor", "", "mysql",3306,charset="utf8")        
        cursor = db.cursor()
       
        Sql_1 = "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES" #输出所有库的总大小,以字节为单位
        cursor.execute(Sql_1)
        Result_1 = cursor.fetchone()

        #print(Result_1) #(b'9250868',)
        #print(type(Result_1)) #<class 'tuple'>
        #print(Result_1[0]) #b'9250868'
        #print(type(Result_1[0])) #<class 'bytes'>

        Result_2 = int(Result_1[0])
        print(Result_2)
        #print(type(Result_2)) #<class 'int'>
       
        db.close()

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

if __name__ == "__main__":
        main()


被监控主机本地运行脚本的结果:
C:\Users\Administrator>python d:\script_2.py
9250868

C:\Users\Administrator>



######

在被监控主机上创建Python3脚本:( d:\script_3.py )
#coding=utf-8
import pymysql

def db_connect():

        db = pymysql.connect("localhost", "zbx_monitor", "", "mysql",3306,charset="utf8")        
        cursor = db.cursor()
       
        Sql_1 = "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES where table_schema = 'discuz'" #输出库discuz的大小,以字节为单位
        cursor.execute(Sql_1)
        Result_1 = cursor.fetchone()

        #print(Result_1) #(b'753595',)
        #print(type(Result_1)) #<class 'tuple'>
        #print(Result_1[0]) #b'753595'
        #print(type(Result_1[0])) #<class 'bytes'>

        Result_2 = int(Result_1[0])
        print(Result_2)
        #print(type(Result_2)) #<class 'int'>
       
        db.close()

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

if __name__ == "__main__":
        main()


被监控主机本地运行脚本的结果:
C:\Users\Administrator>python d:\script_3.py
753595

C:\Users\Administrator>



######

在被监控主机上创建Python3脚本:( d:\script_4.py )
#coding=utf-8
import pymysql

def db_connect():

        db = pymysql.connect("localhost", "zbx_monitor", "", "mysql",3306,charset="utf8")        
        cursor = db.cursor()
       
        Sql_1 = "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES where table_schema = 'db1'" #输出库db1的大小,以字节为单位
        cursor.execute(Sql_1)
        Result_1 = cursor.fetchone()

        #print(Result_1) #(b'7667712',)
        #print(type(Result_1)) #<class 'tuple'>
        #print(Result_1[0]) #b'7667712'
        #print(type(Result_1[0])) #<class 'bytes'>

        Result_2 = int(Result_1[0])
        print(Result_2)
        #print(type(Result_2)) #<class 'int'>
       
        db.close()

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

if __name__ == "__main__":
        main()


被监控主机本地运行脚本的结果:
C:\Users\Administrator>python d:\script_4.py
7667712

C:\Users\Administrator>



######

在被监控主机上创建Python3脚本:( d:\script_5.py )
#coding=utf-8
import pymysql

def db_connect():

        db = pymysql.connect("localhost", "zbx_monitor", "", "mysql",3306,charset="utf8")        
        cursor = db.cursor()
       
        Sql_1 = "select concat(sum(DATA_LENGTH)) as data from information_schema.TABLES where table_schema ='db1' and table_name='users'" #输出库db1的表users的大小,以字节为单位
        cursor.execute(Sql_1)
        Result_1 = cursor.fetchone()

        #print(Result_1) #(b'16384',)
        #print(type(Result_1)) #<class 'tuple'>
        #print(Result_1[0]) #b'16384'
        #print(type(Result_1[0])) #<class 'bytes'>

        Result_2 = int(Result_1[0])
        print(Result_2)
        #print(type(Result_2)) #<class 'int'>
       
        db.close()

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

if __name__ == "__main__":
        main()


被监控主机本地运行脚本的结果:
C:\Users\Administrator>python d:\script_5.py
16384

C:\Users\Administrator>



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

修改被监控主机的Agent配置文件:
C:\Program Files\Zabbix Agent\zabbix_agentd.conf
图片2.png

图片3.png
修改为:
UnsafeUserParameters=1

接着插入:
UserParameter=command_1,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\script_1.py

UserParameter=command_2,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\script_2.py

UserParameter=command_3,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\script_3.py

UserParameter=command_4,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\script_4.py

UserParameter=command_5,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\script_5.py


保存好配置文件后,重启Zabbix Agent服务:
图片4.png


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





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

在Zabbix服务器测试,验证能否获取被监控主机(192.168.168.129)的键值:

[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.129 -k command_1
ZBX_NOTSUPPORTED: Timeout while executing a shell script.
[root@centos8 ~]#


解决方法:
修改被监控主机的Agent配置文件:
C:\Program Files\Zabbix Agent\zabbix_agentd.conf
图片5.png
修改为 Timeout=30


保存好配置文件后,重启Zabbix Agent服务:
图片6.png


在Zabbix服务器可以获取被监控主机(192.168.168.129)的键值了:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.129 -k command_1
2
[root@centos8 ~]#

[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.129 -k command_2
9250868
[root@centos8 ~]#

[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.129 -k command_3
753595
[root@centos8 ~]#

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

[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.129 -k command_5
16384
[root@centos8 ~]#





##################Zabbix创建模板:

配置》模板》创建模板:(群组可以随便选)
图片7.png



在模板Template DB MariaDB中创建监控项:
自定义名称: MariaDB command_1
键值: command_1
信息类型: 数字(无正负)
单位: 个
图片8.png
备注:其他地方保持默认,点击底下的“添加”按键。



在模板Template DB MariaDB中创建监控项:
自定义名称: MariaDB command_2
键值: command_2
信息类型: 数字(无正负)
图片9.png
备注:
单位留空时,结果在单位换算时会每超过1000就除以1000,保留两位小数,是四舍五入;
在监控项对应的图形中可以看到结果;



在模板Template DB MariaDB中创建监控项:
自定义名称: MariaDB command_3
键值: command_3
信息类型: 数字(无正负)
单位: B
图片10.png
备注:
使用单位“B”时,结果在单位换算时会每超过1024就除以1024,保留两位小数,是四舍五入;



在模板Template DB MariaDB中创建监控项:
自定义名称: MariaDB command_4
键值: command_4
信息类型: 数字(无正负)
单位: Bytes
图片11.png
备注:
使用单位“Bytes”时,结果在单位换算时会每超过1000就除以1000,保留两位小数,是四舍五入;



在模板Template DB MariaDB中创建监控项:
自定义名称: MariaDB command_5
键值: command_5
信息类型: 数字(无正负)
图片12.png
备注:其他地方保持默认,点击底下的“添加”按键。


至此,模板Template DB MariaDB有了5个监控项:
图片13.png





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

在模板Template DB MariaDB中,给监控项“MariaDB command_1”创建图形:
图片14.png
监控项:
图片15.png



在模板Template DB MariaDB中,给监控项“MariaDB command_2”创建图形:
图片16.png
监控项:
图片17.png



在模板Template DB MariaDB中,给监控项“MariaDB command_3”创建图形:
图片18.png
监控项:
图片19.png



在模板Template DB MariaDB中,给监控项“MariaDB command_4”创建图形:
图片20.png
监控项:
图片21.png



在模板Template DB MariaDB中,给监控项“MariaDB command_5”创建图形:
图片22.png
监控项:
图片23.png


至此,模板Template DB MariaDB有了5个图形:
图片24.png





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

配置》主机》创建主机 :(主机名称无需与被监控主机的真实主机名一致;群组可以随便选;IP地址那里要输入被监控主机的IP地址;端口为10050)
图片25.png
注释:
使用agent代理程序的接口。
使用 TCP 10050 端口。


主机MariaDB_1添加成功:
图片26.png


主机MariaDB_1添加模板:( Template DB MariaDB  )
图片27.png


模板Template DB MariaDB添加成功:
图片28.png

笺注:主机会继承所使用的模板的监控项、触发器、图形等等。



######

监测》图形:

查看主机MariaDB_1的图形“MariaDB command_1 image”:
图片29.png

图片30.png

图片31.png



查看主机MariaDB_1的图形“MariaDB command_2 image”:
图片32.png

图片33.png

图片34.png



查看主机MariaDB_1的图形“MariaDB command_3 image”:
图片35.png

图片36.png

图片37.png



查看主机MariaDB_1的图形“MariaDB command_4 image”:
图片38.png

图片39.png

图片40.png



查看主机MariaDB_1的图形“MariaDB command_5 image”:
图片41.png

图片42.png

图片43.png





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

在模板Template DB MariaDB中,
给监控项“MariaDB command_1”创建一个触发器:(返回值大于3就告警)

自定义名称: Datebase users is bigger than 3 (当前值: {ITEM.VALUE})
严重性: 一般严重
图片44.png
注释: {ITEM.VALUE} 是预定义变量,即触发状态时监控项的值。

插入表达式:( 监控项 Template DB MariaDB: MariaDB command_1
图片45.png

自动生成的表达式:(触发器的表达式要用到监控项中的键值)
{Template DB MariaDB:command_1.last()}>3
图片47.png

本页拖下去:
图片48.png


至此,模板Template DB MariaDB有了1个触发器:
图片49.png



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

使用了模板Template DB MariaDB的主机会立即继承新的触发器:
图片50.png

图片51.png



主机MariaDB_1的图形“MariaDB command_1 image”会自动发生改变:
图片52.png

图片53.png

图片54.png



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

先在被监控主机的MariaDB数据库里再创建两个用户,至此,一共有四个数据库用户。

在被监控主机本地测试:
D:\UPUPW_AP5.6\MariaDB\bin>mysql -u"root" -p"888" -sN -e "Select count(*) from mysql.user;"
4

D:\UPUPW_AP5.6\MariaDB\bin>


在Zabbix服务器远程测试:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.129 -k command_1
4
[root@centos8 ~]#


主机MariaDB_1的图形“MariaDB command_1 image”中看到的效果:
图片55.png

图片56.png

图片57.png



主机MariaDB_1的监控项“MariaDB command_1”的返回值大于3时,仪表板会如下图显示:(显示对应触发器的名称)
Datebase users is bigger than 3 (当前值: 4 个)
图片58.png

图片60.png



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

当主机MariaDB_1的监控项“MariaDB command_1”的返回值继续增大至6个后,在主机MariaDB_1的图形“MariaDB command_1 image”中看到的效果:
图片61.png

图片62.png

图片63.png
注释:在图形中可以看到预定义变量{ITEM.VALUE}的值会随着监控项的返回值的变化而变化。


但在仪表板却没有看到预定义变量{ITEM.VALUE}的值随着监控项的返回值的变化而变化,只是一直显示当初触发状态时的值:
图片64.png



######

在模板Template DB MariaDB中禁用触发器:
图片65.png

笺注:触发器被禁用后,仪表板的告警会自动消失,在主机MariaDB_1的图形“MariaDB command_1 image”中也看不到这个触发器了。





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

在模板Template DB MariaDB的监控项中更改“单位”:
图片66.png
备注:
使用单位“个”时,结果在单位换算时会每超过1000就除以1000,保留两位小数,是四舍五入;


再次,查看主机MariaDB_1的图形“MariaDB command_5 image”:
图片67.png

图片68.png

图片69.png



######

在模板Template DB MariaDB的监控项中更改“单位”:
图片70.png
备注:
单位前面加上“!”时,结果就不会进行单位换算;


再次,查看主机MariaDB_1的图形“MariaDB command_5 image”:
图片71.png

图片72.png

图片73.png



######

在模板Template DB MariaDB的监控项中更改“单位”:
图片74.png
备注:
单位前面加上“!”时,结果就不会进行单位换算;


查看主机MariaDB_1的图形“MariaDB command_3 image”:
图片75.png

图片76.png

图片77.png





相关文章:
Win7/Windows2008R2安装Python3
Python3脚本管理Windows下的MariaDB

Zabbix使用模板监控Windows下的MariaDB

Zabbix调用Python3脚本监控Linux下的MySQL
Zabbix调用Python3脚本监控MSSQL
Zabbix调用Python3脚本监控Linux进程/内存使用率/分区使用率

使用Navicat远程管理MySQL

Zabbix自定义监控Linux下的MySQL
Zabbix使用预编译Agent监控CentOS7+监控文件内容

返回列表