使用 Zabbix 监控 MySQL 存储空间和性能指标的完整实践指南

目录

引言

一、最终目标支持功能

二、监控方案设计

2.1 技术选型

2.2 设计思路

三、实现步骤

3.1 准备工作

3.11 创建 MySQL 监控账号

3.12 配置 .my.cnf 文件

 3.2 编写统一脚本

 3.3 配置 Zabbix Agent UserParameter

 3.4 Zabbix 前端配置建议

四、总结


引言

MySQL 数据库作为众多业务系统的核心组件,其性能与存储状况直接影响系统的稳定性和响应速度。对于运维工程师而言,实时监控 MySQL 的性能指标和存储空间使用情况尤为关键。本文将分享如何使用 Zabbix 结合自定义脚本,监控 MySQL 的关键性能指标(如 QPS、TPS)及存储空间使用(包括数据库空间大小、日志文件大小等),帮助你搭建精准且高效的数据库监控体系。

一、最终目标支持功能

支持如下参数调用:

参数含义
QPS每秒查询数
TPS每秒事务数
dbsize所有数据库空间使用(MB)
dbsize[<库名>]某个数据库空间使用(MB)

二、监控方案设计

2.1 技术选型

  • Zabbix Agent:用于在数据库服务器采集指标数据。

  • 自定义 Shell 脚本:通过 MySQL 命令查询系统状态和文件大小,输出给 Zabbix。

  • MySQL 只读监控账号:用于查询性能指标和表空间信息。

2.2 设计思路

  • 统一脚本根据参数动态返回不同指标值,避免分散管理。

  • 采用 .my.cnf 文件存储数据库连接信息,保证安全。

  • Zabbix Agent 通过 UserParameter 调用脚本,实现灵活监控。

三、实现步骤

3.1 准备工作

3.11 创建 MySQL 监控账号
-- 创建用户(如已存在可跳过)
CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '你的安全密码';

-- 授权所需权限:
-- 1. SHOW DATABASES            — 用于数据库自动发现(LLD)
-- 2. PROCESS                   — 用于查询当前线程等状态
-- 3. REPLICATION CLIENT        — 允许读取主从状态
-- 4. SELECT ON *.*             — 允许查看库大小、InnoDB 统计、慢查询数等
GRANT SHOW DATABASES, PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'zbx_monitor'@'localhost';

-- 强烈建议刷新权限以立即生效
FLUSH PRIVILEGES;
3.12 配置 .my.cnf 文件

/var/lib/zabbix/.my.cnf 文件中写入: 

[client]
user=zbx_monitor
password=your_password

并设置权限:

chmod 600 /var/lib/zabbix/.my.cnf

 3.2 编写统一脚本

# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh
#!/bin/bash

METRIC="$1"
DB_NAME="$2"

MY_CNF="/var/lib/zabbix/.my.cnf"
MYSQL_HOST="192.168.1.129"
MYSQL_PORT="3306"

MYSQL_CMD="mysql --defaults-extra-file=$MY_CNF -h$MYSQL_HOST -P$MYSQL_PORT -Nse"
MYSQLADMIN_CMD="mysqladmin --defaults-extra-file=$MY_CNF -h$MYSQL_HOST"

get_qps() {
  Uptime=$($MYSQLADMIN_CMD status | awk '{print $2}')
  Questions=$($MYSQLADMIN_CMD status | awk '{print $6}')
  [[ "$Uptime" -gt 0 ]] && awk "BEGIN {printf \"%.2f\", $Questions / $Uptime}" || echo 0
}

get_tps() {
  Uptime=$($MYSQLADMIN_CMD status | awk '{print $2}')
  rollback=$($MYSQLADMIN_CMD extended-status | awk '/Com_rollback/{print $4}')
  commit=$($MYSQLADMIN_CMD extended-status | awk '/Com_commit/{print $4}')
  total=$((rollback + commit))
  [[ "$Uptime" -gt 0 ]] && awk "BEGIN {printf \"%.2f\", $total / $Uptime}" || echo 0
}

get_db_size() {
  if [[ -z "$DB_NAME" ]]; then
    RESULT=$($MYSQL_CMD "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) FROM information_schema.tables;")
  else
    RESULT=$($MYSQL_CMD "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) FROM information_schema.tables WHERE table_schema='$DB_NAME';")
  fi
  echo "${RESULT:-0}"
}

case "$METRIC" in
  qps) get_qps ;;
  tps) get_tps ;;
  dbsize) get_db_size ;;
  *) echo "Unsupported metric"; exit 1 ;;
esac

设置执行权限:

chmod +x /usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh

3.3 配置 Zabbix Agent UserParameter

编辑 
# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mysql.conf
UserParameter=mysql.qps,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh qps
UserParameter=mysql.tps,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh tps
UserParameter=mysql.dbsize,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh dbsize
UserParameter=mysql.dbsize[*],/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh dbsize "$1"

重启 Agent:

systemctl restart zabbix-agent

 3.4 Zabbix 前端配置建议

  • 创建监控项:

    • mysql.qps(单位:ops)

    • mysql.tps(单位:ops)

    • mysql.dbsize(单位:MB)

    • mysql.dbsize[your_db](单位:MB,按需添加)

  • 设定更新间隔如 1m5m

  • 设置合适的触发器阈值,例如:

    {host:mysql.qps.last()} > 1000
    {host:mysql.dbsize.last()} > 10240
    

四、总结

本文提供了一个简洁且实用的 Zabbix + MySQL 监控方案,重点解决 MySQL 存储空间及关键性能指标采集问题。通过集中管理的脚本和灵活的 Zabbix 配置,能够帮助运维快速构建稳定、全面的数据库监控体系,提升问题预警能力和故障响应速度。

欢迎关注与交流,如需脚本模板或更多指标监控实现,欢迎留言。 

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    IT_狂奔者

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值