外观
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 -yMySQL 监控用户创建
sql
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT REPLICATION CLIENT, PROCESS, SHOW DATABASES, SHOW VIEW ON *.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;监控脚本配置
- 创建 MySQL 连接配置文件
txt
# /etc/zabbix/.my.cnf
[client]
user=zabbix
password=password
host=localhost
port=3306- 配置文件权限
bash
chown zabbix:zabbix /etc/zabbix/.my.cnf
chmod 600 /etc/zabbix/.my.cnf关键监控指标
连接状态
- 活跃连接数
- 连接错误率
- 连接拒绝数
- 最大连接使用率
查询性能
- 每秒查询数 (QPS)
- 每秒事务数 (TPS)
- 慢查询数
- 查询执行时间分布
复制状态
- 复制延迟
- 复制错误
- 主从状态
- 二进制日志位置
存储引擎
- InnoDB 缓冲池使用率
- InnoDB 缓冲池命中率
- InnoDB 日志等待
- 表锁和行锁竞争
系统资源
- CPU 使用率
- 内存使用率
- 磁盘 I/O
- 网络流量
监控模板配置
导入 MySQL 模板
- 登录 Zabbix Web 界面
- 导航至 配置 → 模板
- 点击 导入
- 选择 MySQL 模板文件(如 Template App MySQL)
自定义监控项
- 创建监控项
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- 重启 Zabbix Agent
bash
systemctl restart zabbix-agent告警设置
告警阈值配置
| 监控项 | 阈值 | 严重程度 |
|---|---|---|
| 活跃连接数 | > 80% 最大连接数 | 警告 |
| 慢查询数 | > 10/分钟 | 警告 |
| 复制延迟 | > 300秒 | 严重 |
| InnoDB 缓冲池命中率 | < 95% | 警告 |
| 磁盘空间使用率 | > 85% | 警告 |
告警通知方式
- 邮件通知
- SMS 通知
- 企业微信/钉钉通知
- 自动故障工单
监控仪表盘
关键指标面板
- MySQL 概览面板
- 性能趋势面板
- 复制状态面板
- 资源使用面板
自定义仪表盘
- 登录 Zabbix Web 界面
- 导航至 监控 → 仪表盘
- 点击 创建仪表盘
- 添加所需的监控项和图表
监控数据存储
历史数据保留
- 根据存储空间和监控需求设置保留期
- 生产环境建议保留 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 的聚合功能汇总集群指标
- 配置集群状态的自定义监控项
- 建立集群健康状态的综合仪表盘
