Zabbix监控MySQL表属性

426 阅读2分钟

利用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: WJ
## 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 [ $i -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:  WJ
## Purpose:  监控表行数,统计数

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

#3 Operate
cd ${Dir}

getdata() {
    /usr/bin/mysql -u${User} -p${Passwd} -Ne "use information_schema;select ${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 $1 $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! 这样就实现了我们的需求。