Zabbix监控MySQL表属性

利用zabbix的自动发现功能,对数据库中表的数据大小、索引大小、碎片大小、自增值进行监控。

通常数据库中的表很多,如果要全部监控,那么一个表一个表配置监控项非常麻烦,耗时特别长,可以直接利用zabbix 的自动发现功能部署监控。

对数据库中表的数据大小、索引大小、碎片大小、自增值需要通过information_schema.tables来查询。

1.环境准备
Ubuntu 16.04
zabbix server 4.0.30
MySQL 5.7.33
2.客户端操作
2.1.配置发现规则
在mysql服务器上配置自动发现规则。

root@DB-Summary-002:/etc/zabbix/script/mysql/tables_status# cat table_discover.sh
#!/bin/bash

#1 Message

Auth: ZJ

Purpose: 获取表名,形成JSON格式。

#2 Defined Varibales
User=root
Passwd=xxx

#3 Operate
diskarray=(/usr/bin/mysql -u${User} -p${Passwd} -Ne "use ipoc_db;show tables;" 2>/dev/null)
length={#diskarray[@]} printf “{\n” printf ‘\t'”\”data\”:[” for ((i=0;i<length;i++))
do
printf ‘\n\t\t{‘
printf “”{#TABLE_NAME}”:”{diskarray[i]}”}”
if [ ilti -lt [$length-1] ];then
printf ‘,’
fi
done
printf “\n\t]\n”
printf “}\n”
2.2.配置监控项脚本
在mysql服务器的配置监测脚本

shell> cat /etc/zabbix/script/mysql/tables_status/table_status.sh
#!/bin/bash

#1 Message

Auth: ZJ

Purpose: 监控表行数,统计数

#2 Defind Variables
Dir=/etc/zabbix/script/mysql/tables_status
User=root
Passwd=xxx
Table=1TableStatus=1 Table_Status=2
DB=ipoc_db

#3 Operate
cd ${Dir}

getdata() {
/usr/bin/mysql -uUserp{User} -p{Passwd} -Ne “use information_schema;select TableStatusfromtableswheretablename={Table_Status} from tables where table_name =’{Table}’ and table_schema =’${DB}’;” 2>/dev/null | grep [0123456789]
}

case ${Table_Status} in
table_rows)
getdata
;;
data_length)
getdata
;;
index_length)
getdata
;;
data_free)
getdata
;;
auto_increment)
getdata
;;
esac
2.3.更新配置及重启agent
在mysql服务器上更新配置文件

shell> vim /etc/zabbix/zabbix_agent.conf
….
##2021-05-25 myqsl中表的行数、数据长度、索引长度、自增值、碎片
UserParameter=mysql.table,/bin/bash /etc/zabbix/script/mysql/tables_status/table_discover.sh
UserParameter=mysql.table_status[*],/bin/bash /etc/zabbix/script/mysql/tables_status/table_status.sh 11 2

#2 启动zabbix-agent
shell> /etc/init.d/zabbix-agent restart
3.Web页面配置
1、配置 → 模板 → 创建模板

2、填写信息

3、配置监控项原型

4、主机链接模板,配置 → 主机 → “选中主机” → 批量更新

模板 → 选中“模板链接” → 选中模板 → 选择 → 更新

等待几分钟,该主机就自动添加了所有表的监控项,如下:

这里发现有些表基本不更新或者几乎不更新,可以优化一下,取消不必要表的监控。

4.优化表自动发现规则
一般并不需要监控所有的表,只需要监控一些变化比较大的表即可,那么我们就需要优化一下自动发现规则。

我们执行一下table_discover.sh 自动发现规则的脚本,发现其结果如下:

shell> sh table_discover.sh |more
{
“data”:[
{“{#TABLE_NAME}”:”_t_session_call_doing_del”},
{“{#TABLE_NAME}”:”checksums”},
{“{#TABLE_NAME}”:”heartbeat”},


{“{#TABLE_NAME}”:”tbl_message”},
{“{#TABLE_NAME}”:”tbl_notice_read”},
{“{#TABLE_NAME}”:”tbl_user_notice_cnt”}
]
}
那我们就造一个同样格式的文件,把需要监控的表加进去。

shell> cat tables
{
“data”:[
{“{#TABLE_NAME}”:”t_system_sp_user”},
{“{#TABLE_NAME}”:”t_task_member”},
{“{#TABLE_NAME}”:”t_user”},
{“{#TABLE_NAME}”:”t_user_life_record”},
{“{#TABLE_NAME}”:”t_user_life_stat”}
]
}
更新zabbix_agent配置文件

shell> cat /etc/zabbix/zabbix_agentd.conf


#监控数据库中表的数据大小、索引大小、碎片大小、自增值
UserParameter=mysql.table,cat /etc/zabbix/script/mysql/tables_status/table
UserParameter=mysql.table_status[*],/bin/bash /etc/zabbix/script/mysql/tables_status/table_status.sh $1
给该主机添加配置好的模板

等待一段时间会自动添加好监控项

OK! 这样就实现了我们的需求。

参考网址:www.zj1120.com/?p=13210

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享