前言:

1. zabbix默认监控模板中有监控Mysql的一些监控项,但是感觉不是太符合自己的情况使用,所以想着做一套自定义监控项来监控Mysql的各项数据。

2. 安装zabbix跟Mysql的步骤就略过了,可以看前面几篇帖子自行安装。

3. 这边我先监控了Mysql的以下一些数据,后边会根据需要在不断补充:

当前连接数 历史连接数 配置连接数 Mysql状态 线程正在运行 每秒创建的线程数 线程连接 缓存线程 Mysql CPU,内存利用率

第一步 创建自定义监控项

这边在我之前测试的agent2主机上已经使用Docker安装了Mysql8.0

在Mysql创建一个监控用户

# 在Mysql中创建一个zabbix监控用户

CREATE USER 'zabbix'@'%'IDENTIFIED BY 'zabbix';
GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix'@'%';
flush privileges;

# 修改一下mysql的配置文件,把用户添加进去,要不收集信息的时候mysql会警告命令行中输入密码是不安全的行为
vim /etc/mysql/my.cnf        # 打开Mysql的配置文件底部添加以下几行
[client]
user=zabbix
password=zabbix
[mysqladmin]
host=localhost
user=zabbix
password=zabbix


docker restart mysql8.0   # 重启一下服务重载配置文件

创建自定义监控项配置文件

因为我的Mysql是用Docker搭建的,所以每个命令前面我都加了一个docker exec -it mysql8.0,如果自己有想法可以更改,不是必须的,只要能获取到想要的值就行
因为第一步已经把监控用户放到配置文件中了,所以这边就不需要mysql -u -p 的这两个参数了

自定义监控项参数为:
UserParameter=    # 固定格式
mysql.Cpu         # 键值,添加监控项就是用它等于标识符
,docker stats.... # 逗号以后的就是收集指标的命令了
创建一个自定义监控项的配置文件
vim /etc/zabbix/zabbix_agent2.d/mysql.conf
# Mysql CPU 内存利用率
UserParameter=mysql.Cpu,docker stats --no-stream | grep mysql8.0 | awk '{print $3}' | sed s'/%//'
UserParameter=mysql.Mem,docker stats --no-stream | grep mysql8.0 | awk '{print $4}' | sed s'/MiB//'
# 当前连接数 历史连接数 配置连接数
UserParameter=mysqld.Threads_connected,docker exec mysql8.0 bash -c "mysql -e \"SHOW GLOBAL STATUS LIKE 'Threads_connected';\"" | awk 'NR==2{print $2}'
UserParameter=mysql.Max_used_connections,docker exec mysql8.0 bash -c "mysql -e \"SHOW GLOBAL STATUS LIKE 'Max_used_connections';\"" | awk 'NR==2{print $2}'
UserParameter=mysql.Max_connections,docker exec mysql8.0 bash -c "mysql -e \"SHOW VARIABLES LIKE 'max_connections';\"" | awk 'NR==2{print $2}'
# Mysql状态 Mysql复制状态
UserParameter=mysql.Mysqladminstatus,docker exec mysql8.0 bash -c "if mysqladmin ping | grep -q 'mysqld is alive'; then echo 1; else echo 0; fi"
# 线程正在运行
UserParameter=mysql.MysqlThreads_running,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW GLOBAL STATUS LIKE 'Threads_running';\"" | awk 'NR==2{print $2}'
# 每秒创建的线程数
UserParameter=mysql.Threads_created,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW GLOBAL STATUS LIKE 'Threads_created';\"" | awk 'NR==2{print $2}'
# 线程连接
UserParameter=mysql.Threads_connected,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW GLOBAL STATUS LIKE 'Threads_connected';\"" | awk 'NR==2{print $2}'
# 缓存线程
UserParameter=mysql.Thread_cache_size,docker exec mysql8.0 bash -c "mysql -uzabbix -e \"SHOW VARIABLES LIKE 'thread_cache_size';\"" | awk 'NR==2{print $2}'


# 配置好之后重启一下 agent2 
systemctl restart zabbix-agent2.service

创建完之后测试

在 agent 端可以用  zabbix_agent2 -t 键值  来测试
在 server 端可以用 zabbix_get -s 192.168.1.11 -p 10050 -k 键值   来测试


zabbix_agent2 -t mysql.Cpu    # 测试CPu键值的数据
mysql.Cpu                                     [s|24.74]  # 24.74就是数据

添加一下zabbix用户权限

因为 zabbix 服务是 zabbix 用户运行的,所以他没有执行 Docker 的权限,所以我需要把zabbix加到docker组中
sudo gpasswd -a zabbix docker
newgrp docker


# 加入之后重启一下agent2
systemctl restart zabbix-agent2.service

第二步:web页面创建一个单独的模板

grafana怎么添加zabbix插件 grafana接入zabbix_grafana怎么添加zabbix插件

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_02

第三步:创建自定义监控项

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_03

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_04

 

这边测试数据没问题保存就行

grafana怎么添加zabbix插件 grafana接入zabbix_grafana怎么添加zabbix插件_05

按照这个流程添加自己剩下所想监控的内容

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_06

第四步:创建几个触发器

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_07

grafana怎么添加zabbix插件 grafana接入zabbix_zabbix_08

grafana怎么添加zabbix插件 grafana接入zabbix_sql_09

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_10

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_11

按照上方配置流程添加自己想配置的触发器

grafana怎么添加zabbix插件 grafana接入zabbix_sql_12

第五步:创建主机测试效果

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_13

稍等没几分钟可以看到已经正常了

grafana怎么添加zabbix插件 grafana接入zabbix_zabbix_14

点击最新数据查看数据

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_15

测试触发器

我用其他主机登录Mysql 把Mysql的当前连接数给提上去

grafana怎么添加zabbix插件 grafana接入zabbix_sql_16

可以看到问题界面有报警,因为我触发器配置的是超过5个连接就告警

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_17

我现在断开连接看他恢复

grafana怎么添加zabbix插件 grafana接入zabbix_sql_18

第六步:接入Grafana

这步做不做都行,zabbix也有图形可以创建,我是因为正在学习这几个东西所以就接入一下

安装grafana就跳过了,可以看我的其他帖子安装

安装zabbix插件

因为grafana默认没有zabbix的数据源,所以需要自行安装插件激活一下

[root@Zabbix ~]# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 4.2.6
[root@Zabbix ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
✔ Downloaded alexanderzobnin-zabbix-app v4.2.6 zip successfully

Please restart Grafana after installing plugins. Refer to Grafana documentation for instructions if necessary.
[root@Zabbix ~]# ls /var/lib/grafana/plugins/
alexanderzobnin-zabbix-app

# 如果从github下载较慢,建议先下载然后安装
# 通过windows下载安装包 然后上传到/var/lib/grafana/plugins/进行解压
# 不管用哪种方式最后重启服务

安装好之后页面激活zabbix插件

grafana怎么添加zabbix插件 grafana接入zabbix_grafana怎么添加zabbix插件_19

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_20

添加数据源

grafana怎么添加zabbix插件 grafana接入zabbix_sql_21

grafana怎么添加zabbix插件 grafana接入zabbix_mysql_22

grafana怎么添加zabbix插件 grafana接入zabbix_grafana怎么添加zabbix插件_23

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_24

创建仪表盘

这边我就示例创建两个仪表盘,也可以去grafana导入一个模板,那种做的也都不错

模板地址:Dashboards | Grafana Labs

grafana怎么添加zabbix插件 grafana接入zabbix_sql_25

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_26

grafana怎么添加zabbix插件 grafana接入zabbix_grafana怎么添加zabbix插件_27

grafana怎么添加zabbix插件 grafana接入zabbix_zabbix_28

多添加几个参数看下效果

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_29

保存仪表盘!!重要!!

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_30

 

grafana怎么添加zabbix插件 grafana接入zabbix_grafana_31