Skip to content

MySQL Zabbix 监控配置

监控架构设计

监控拓扑

  • Zabbix Server:中央监控服务器,负责收集和存储监控数据
  • Zabbix Agent:部署在 MySQL 服务器上,执行监控脚本并发送数据
  • MySQL 模板:预定义的监控项和触发器集合
  • 自定义脚本:用于收集 MySQL 特定指标

部署规划

  • 生产环境建议独立部署 Zabbix Server
  • 对于大规模 MySQL 集群,考虑使用 Zabbix Proxy 分担负载
  • 确保 Zabbix Agent 与 MySQL 服务器网络连通性

基础配置

Zabbix Agent 安装

bash
# CentOS/RHEL
yum install zabbix-agent -y

# Ubuntu/Debian
apt-get install zabbix-agent -y

MySQL 监控用户创建

sql
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT REPLICATION CLIENT, PROCESS, SHOW DATABASES, SHOW VIEW ON *.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;

监控脚本配置

  1. 创建 MySQL 连接配置文件
txt
# /etc/zabbix/.my.cnf
[client]
user=zabbix
password=password
host=localhost
port=3306
  1. 配置文件权限
bash
chown zabbix:zabbix /etc/zabbix/.my.cnf
chmod 600 /etc/zabbix/.my.cnf

关键监控指标

连接状态

  • 活跃连接数
  • 连接错误率
  • 连接拒绝数
  • 最大连接使用率

查询性能

  • 每秒查询数 (QPS)
  • 每秒事务数 (TPS)
  • 慢查询数
  • 查询执行时间分布

复制状态

  • 复制延迟
  • 复制错误
  • 主从状态
  • 二进制日志位置

存储引擎

  • InnoDB 缓冲池使用率
  • InnoDB 缓冲池命中率
  • InnoDB 日志等待
  • 表锁和行锁竞争

系统资源

  • CPU 使用率
  • 内存使用率
  • 磁盘 I/O
  • 网络流量

监控模板配置

导入 MySQL 模板

  1. 登录 Zabbix Web 界面
  2. 导航至 配置模板
  3. 点击 导入
  4. 选择 MySQL 模板文件(如 Template App MySQL)

自定义监控项

  1. 创建监控项
bash
# 添加自定义监控项配置
cat >> /etc/zabbix/zabbix_agentd.d/mysql.conf << EOF
UserParameter=mysql.status[*],mysql -N -B -u1 -p2 -h3 -P4 -e "SHOW GLOBAL STATUS WHERE Variable_name='$5'"
UserParameter=mysql.ping,mysqladmin -u1 -p2 -h3 -P4 ping | grep -c alive
UserParameter=mysql.version,mysql -V
EOF
  1. 重启 Zabbix Agent
bash
systemctl restart zabbix-agent

告警设置

告警阈值配置

监控项阈值严重程度
活跃连接数> 80% 最大连接数警告
慢查询数> 10/分钟警告
复制延迟> 300秒严重
InnoDB 缓冲池命中率< 95%警告
磁盘空间使用率> 85%警告

告警通知方式

  • 邮件通知
  • SMS 通知
  • 企业微信/钉钉通知
  • 自动故障工单

监控仪表盘

关键指标面板

  • MySQL 概览面板
  • 性能趋势面板
  • 复制状态面板
  • 资源使用面板

自定义仪表盘

  1. 登录 Zabbix Web 界面
  2. 导航至 监控仪表盘
  3. 点击 创建仪表盘
  4. 添加所需的监控项和图表

监控数据存储

历史数据保留

  • 根据存储空间和监控需求设置保留期
  • 生产环境建议保留 30-90 天
  • 考虑使用分区表优化历史数据查询

趋势数据配置

  • 配置适当的趋势数据间隔
  • 利用 Zabbix 的趋势数据功能减少存储空间

最佳实践

监控覆盖范围

  • 监控所有生产和预生产环境的 MySQL 实例
  • 确保监控覆盖主从复制架构的所有节点
  • 定期审查监控项,移除冗余指标

告警优化

  • 避免告警风暴,合理设置告警抑制
  • 建立告警升级机制
  • 定期调整告警阈值,适应业务变化

监控脚本维护

  • 版本控制监控脚本
  • 定期测试监控脚本的有效性
  • 确保监控脚本具有适当的错误处理

常见问题(FAQ)

Q1: Zabbix 监控 MySQL 时连接失败怎么办?

A1: 检查以下几点:

  • MySQL 用户密码是否正确
  • Zabbix Agent 是否有读取 .my.cnf 文件的权限
  • MySQL 服务器是否允许本地连接
  • 防火墙是否阻止了连接

Q2: 如何减少 Zabbix 对 MySQL 性能的影响?

A2: 可以采取以下措施:

  • 增加监控项的采集间隔
  • 避免使用高负载的监控查询
  • 使用 Zabbix Proxy 分担采集压力
  • 对监控用户设置合理的权限限制

Q3: 复制延迟监控不准确怎么办?

A3: 可能的原因和解决方案:

  • 网络延迟导致时间同步问题,确保所有服务器 NTP 同步
  • 监控脚本执行时间过长,优化脚本性能
  • 复制拓扑复杂,考虑使用更精确的延迟计算方法

Q4: 如何监控 MySQL 集群的整体状态?

A4: 可以通过以下方式:

  • 创建集群级别的监控模板
  • 使用 Zabbix 的聚合功能汇总集群指标
  • 配置集群状态的自定义监控项
  • 建立集群健康状态的综合仪表盘