返回列表 发帖

Zabbix自定义监控Linux下的MySQL

笺注:
被监控主机的Agent的安装可参考 Zabbix使用Agent监控CentOS6/Redhat6
这是在 LNMP一键安装包(lamp_CentOS6.9) 的基础上进行的。


被监控主机在命令行中输出MySQL的版本信息:( 使用数据库管理员root@localhost )
[root@zabbix_client ~]# mysql -u"root" -p"888" -h"localhost" -e "select version()"
Warning: Using a password on the command line interface can be insecure.
+------------+
| version()  |
+------------+
| 5.6.29-log |
+------------+
[root@zabbix_client ~]#

注释:
-h"localhost" 是可以省略的;


只显示指定的值:
[root@zabbix_client ~]# mysql -u"root" -p"888" -e "select version()" |tail -1 |awk -F- '{print $1}'
Warning: Using a password on the command line interface can be insecure.
5.6.29
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"root" -p"888" -sN -e "select version()" |awk -F- '{print $1}'
Warning: Using a password on the command line interface can be insecure.
5.6.29
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"root" -p"888" -sN -e "show variables like '%max_connections%';" |awk '{print $2}'
Warning: Using a password on the command line interface can be insecure.
500
[root@zabbix_client ~]#

备注:
这个Warning在mysql5.6.6版本及以上都有的;限制在命令行输入密码。
这个Warning会让Zabbix无法获取到值。



被监控主机再授权数据库用户zhuohua@localhost(数据库用户可以不要密码的),只能本地登录,对所有的库有完全控制的权限:
[root@zabbix_client ~]# mysql -u"root" -p"888" -e "grant all on *.* to zhuohua@localhost;flush privileges;"
Warning: Using a password on the command line interface can be insecure.
[root@zabbix_client ~]#


查看本地数据库用户zhuohua@localhost的权限:
[root@zabbix_client ~]# mysql -u"root" -p"888" -e "show grants for zhuohua@localhost;"
Warning: Using a password on the command line interface can be insecure.
+------------------------------------------------------+
| Grants for zhuohua@localhost                         |
+------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zhuohua'@'localhost' |
+------------------------------------------------------+
[root@zabbix_client ~]#



使用没有密码的MySQL用户,就没有上面那个Warning了:
[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "select version()" |awk -F- '{print $1}'
5.6.29
[root@zabbix_client ~]#


测试输出的结果跟自定义的结果是否相符:
[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "select version()" |awk -F- '{print $1}' |grep -c "5.6.29"
1
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "select version()" |awk -F- '{print $1}' |grep -c "5.6.88"
0
[root@zabbix_client ~]#

返回值: 1相符;0不相符。



查看MySQL的最大连接数:
[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "show variables like '%max_connections%';" |awk '{print $2}'
500
[root@zabbix_client ~]#


测试输出的结果跟自定义的结果是否相符:
[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "show variables like '%max_connections%';" |awk '{print $2}' |grep -c 500
1
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "show variables like '%max_connections%';" |awk '{print $2}' |grep -c 88
0
[root@zabbix_client ~]#

返回值: 1相符;0不相符。





######

创建一个库db1:
[root@zabbix_client ~]# mysql -u"zhuohua" -e "Create database db1;"
[root@zabbix_client ~]#


[root@zabbix_client ~]# mysql -u"zhuohua" -e "Show create database db1;"
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+-----------------------------------------------------------------+
[root@zabbix_client ~]#

注释:库db1的字符集为 utf8mb4_general_ci



在库db1中创建表:
[root@zabbix_client ~]# mysql -u"zhuohua" -e "use db1;Create table Table1(Name varchar(20),Chinese float);"
[root@zabbix_client ~]#


在库db1中插入测试的数据:
[root@zabbix_client ~]# mysql -u"zhuohua" -e "Use db1;INSERT into Table1(Name,Chinese) values ('Zhuohua',8);"
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"zhuohua" -e "Use db1;INSERT into Table1(Name,Chinese) values ('Python',8.8);"
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"zhuohua" -e "Use db1;INSERT into Table1(Name,Chinese) values ('李大杰',-8.8);"
[root@zabbix_client ~]#



输出SQL语句执行后的返回值:
[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "Select Chinese from db1.Table1 where Name = 'Zhuohua'"
8
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"zhuohua" -sN -e "Select Chinese from db1.Table1 where Name = 'Python';"
8.8
[root@zabbix_client ~]#

[root@zabbix_client ~]# mysql -u"zhuohua" -P"3306" -h"localhost" -sN -e "Select Chinese from db1.Table1 where Name = '李大杰'"
-8.8
[root@zabbix_client ~]#



#######

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

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

接着插入代码:
UserParameter=max_connections,mysql -u"zhuohua" -sN -e "show variables like '%max_connections%';" |awk '{print $2}'

UserParameter=Command_1,mysql -u"zhuohua" -sN -e "Select Chinese from db1.Table1 where Name = 'Zhuohua'"

UserParameter=Command_2,mysql -u"zhuohua" -sN -e "Select Chinese from db1.Table1 where Name = 'Python';"

UserParameter=Command_3,/bin/bash /script/xx.sh


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


使用Shell脚本输出SQL语句执行后的返回值:
[root@zabbix_client ~]# cat /script/xx.sh
#!/bin/bash
mysql -u"zhuohua" -sN -e "Select Chinese from db1.Table1 where Name = '李大杰'"

脚本运行的结果:
[root@zabbix_client ~]# bash /script/xx.sh
-8.8
[root@zabbix_client ~]#

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


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





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

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

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

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

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

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



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

配置》主机》创建主机:(主机名称无需与被监控主机的真实主机名一致;群组可以随便选)
图片1.png
2022-9-6 08:44

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


主机MySQL_1添加成功:(主机可以不用模板的)
图片2.png
2022-9-6 08:44




在主机MySQL_1中创建监控项:
名称: MySQL max_connections
键值: max_connections
信息类型: 数字(无正负)
图片3.png
2022-9-6 08:45

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



在主机MySQL_1中创建监控项:
名称: MySQL Command_1
键值: Command_1
信息类型: 浮点数
图片4.png
2022-9-6 08:45

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



在主机MySQL_1中创建监控项:
名称: MySQL Command_2
键值: Command_2
信息类型: 浮点数
图片5.png
2022-9-6 08:46

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



在主机MySQL_1中创建监控项:
名称: MySQL Command_3
键值: Command_3
信息类型: 浮点数
图片6.png
2022-9-6 08:46

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



######

给监控项“MySQL max_connections”创建图形:
图片7.png
2022-9-6 08:47

监控项:
图片8.png
2022-9-6 08:47




给监控项“MySQL Command_1”创建图形:
图片9.png
2022-9-6 08:47

监控项:
图片10.png
2022-9-6 08:47




给监控项“MySQL Command_2”创建图形:
图片11.png
2022-9-6 08:48

监控项:
图片12.png
2022-9-6 08:48




给监控项“MySQL Command_3”创建图形:
图片13.png
2022-9-6 08:48

监控项:
图片14.png
2022-9-6 08:48




查看图形:

监测》图形:
图片15.png
2022-9-6 08:49


图片16.png
2022-9-6 08:49


图片17.png
2022-9-6 08:49




图片18.png
2022-9-6 08:49


图片19.png
2022-9-6 08:50


图片20.png
2022-9-6 08:50




图片21.png
2022-9-6 08:50


图片22.png
2022-9-6 08:50


图片23.png
2022-9-6 08:51




图片24.png
2022-9-6 08:51


图片25.png
2022-9-6 08:51


图片26.png
2022-9-6 08:51




######

给主机MySQL_1的监控项“MySQL max_connections”创建一个触发器:(返回值大于1000就告警)

自定义名称: MySQL max_connections is bigger than 1000
严重性: 一般严重
图片27.png
2022-9-6 08:51


插入表达式:( 监控项  MySQL_1: MySQL max_connections
图片28.png
2022-9-6 08:52


自动生成的表达式:(触发器的表达式要用到监控项中的键值)
{MySQL_1:max_connections.last()}>1000
图片29.png
2022-9-6 08:52


本页拖下去:
图片30.png
2022-9-6 08:52




主机MySQL_1的图形“MySQL max_connections image”会自动发生改变:
图片31.png
2022-9-6 08:53


图片32.png
2022-9-6 08:53


图片33.png
2022-9-6 08:53




#####

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


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



被监控主机本地测试:
[root@localhost ~]# mysql -u"zhuohua" -sN -e "show variables like '%max_connections%';" |awk '{print $2}'
1001
[root@localhost ~]#


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



当监控项“MySQL max_connections”的返回值大于1000时,仪表板会如下图显示:(显示对应触发器的名称)
MySQL max_connections is bigger than 1000
图片34.png
2022-9-6 08:54


图片35.png
2022-9-6 08:55




再次查看主机MySQL_1的图形“MySQL max_connections image”:
图片36.png
2022-9-6 08:55


图片37.png
2022-9-6 08:55


图片38.png
2022-9-6 08:55




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

在主机MySQL_1的监控项中更改“单位”:
单位: !个
图片39.png
2022-9-6 08:56

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


再次查看主机MySQL_1的图形“MySQL max_connections image”:
图片40.png
2022-9-6 08:56


图片41.png
2022-9-6 08:56


图片42.png
2022-9-6 08:57






相关文章:
使用SQLyog远程管理MySQL
MySQL5.6使用mysql_config_editor

MySQL的最大连接数/最大可打开表数/最大可打开文件数

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

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

返回列表