前言
在当今的Web应用架构中,MySQL作为主流的关系型数据库,Redis作为高性能的缓存中间件,两者共同构成了数据存储层的核心。对这两款关键组件的监控,直接关系到业务系统的数据安全和响应性能。
Zabbix Agent 2 原生支持MySQL和Redis的监控插件,通过内置的采集模块,无需额外安装脚本即可实现对数据库的全面监控。本文将分别详细介绍如何使用Zabbix Agent 2监控MySQL和Redis,涵盖用户创建、权限配置、模板宏变量调整等全流程。
一、实验环境说明
| 组件 | 配置 |
|---|---|
| 数据库服务器 | AlmaLinux 9.1(IP: 192.168.38.27) |
| Zabbix Server | 192.168.38.30 |
| Zabbix Agent 2 | 已安装并配置完成 |
| MySQL版本 | 8.0 / 5.7 |
| Redis版本 | 6.x / 7.x |
二、Zabbix Agent 2 基础配置
2.1 安装Zabbix Agent 2
在数据库服务器(192.168.38.27)上安装Zabbix Agent 2,安装过程此处不再赘述,可参考前期文章。
2.2 修改Agent配置文件
编辑Agent配置文件 /etc/zabbix/zabbix_agent2.conf:
# Zabbix Server地址(被动模式)
Server=192.168.38.30
# Zabbix Server地址(主动模式)
ServerActive=192.168.38.30
# 本机主机名(需与Zabbix Web中添加的主机名一致)
Hostname=192.168.38.27
配置完成后重启Agent服务:
[root@mysql-server ~]# systemctl restart zabbix-agent2
[root@mysql-server ~]# systemctl enable zabbix-agent2
三、监控MySQL数据库
3.1 创建Zabbix监控用户
MySQL需要为Zabbix Agent 2创建一个专用的监控用户,并授予必要的权限。
登录MySQL创建用户:
mysql> CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY 'mysqlabc123';
mysql> GRANT USAGE, REPLICATION CLIENT, PROCESS, SHOW DATABASES, SHOW VIEW ON *.* TO 'zbx_monitor'@'localhost';
mysql> FLUSH PRIVILEGES;
权限说明:
| 权限 | 用途 |
|---|---|
USAGE |
允许连接数据库 |
REPLICATION CLIENT |
获取主从复制状态信息 |
PROCESS |
查看当前连接和进程列表 |
SHOW DATABASES |
查看数据库列表 |
SHOW VIEW |
查看视图定义 |
安全建议:
监控用户应使用
localhost限制,仅允许本地连接密码建议使用强密码策略
仅授予最小必要权限
3.2 验证监控用户连通性
在服务器本地测试监控用户能否正常连接MySQL:
[root@mysql-server ~]# mysql -u zbx_monitor -p -e "SELECT VERSION();"
Enter password: mysqlabc123
+-----------+
| VERSION() |
+-----------+
| 8.0.32 |
+-----------+
3.3 配置MySQL模板宏变量
Zabbix官方提供了 MySQL by Zabbix agent 2 模板,利用Agent 2内置的MySQL插件采集数据。需要先配置模板中的宏变量。
操作步骤:
-
登录Zabbix Web管理界面
-
进入 数据采集(Data collection) → 模板(Templates)
-
搜索找到 MySQL by Zabbix agent 2 模板
-
点击模板名称进入详情页,切换到 宏(Macros) 选项卡
如下图所示:

宏变量配置说明:
| 宏变量 | 默认值 | 推荐修改值 | 说明 |
|---|---|---|---|
{$MYSQL.USER} |
root | zbx_monitor | MySQL监控用户名 |
{$MYSQL.PASSWORD} |
(空) | mysqlabc123 | MySQL监控用户密码 |
{$MYSQL.HOST} |
localhost | localhost | MySQL主机地址 |
{$MYSQL.PORT} |
3306 | 3306 | MySQL服务端口 |
3.4 链接MySQL监控模板
-
进入 数据采集(Data collection) → 主机(Hosts)
-
选择目标主机(192.168.38.27)
-
切换到 模板(Templates) 选项卡
-
点击 链接新模板(Link new templates)
-
搜索并选择 MySQL by Zabbix agent 2
-
点击 更新(Update) 保存配置
如下图所示:

3.5 验证MySQL监控数据
模板链接完成后,稍等片刻,验证数据是否正常采集:
方式一:通过Zabbix Web查看
进入 监控(Monitoring) → 最新数据(Latest data) ,筛选主机 192.168.38.27,查看是否有 MySQL 前缀的监控项数据。
方式二:命令行快速测试
在Zabbix Server端使用 zabbix_get 测试:
# 测试MySQL版本信息采集
zabbix_get -s 192.168.38.27 -k "mysql.version"
# 测试MySQL连接数采集
zabbix_get -s 192.168.38.27 -k "mysql.connections"
3.6 MySQL监控项概览
链接模板后,Zabbix会自动采集以下核心指标:
| 监控类别 | 监控项示例 | 说明 |
|---|---|---|
| 连接状态 | MySQL: Connections | 当前连接数 |
| 查询性能 | MySQL: Questions | 查询总数 |
| 查询吞吐量 | MySQL: Queries per second | 每秒查询数(QPS) |
| 连接健康 | MySQL: Aborted connections | 异常断开的连接数 |
| 主从复制 | MySQL: Slave status | 复制状态(Slave_IO/SQL_Running) |
| 复制延迟 | MySQL: Seconds behind master | 从库延迟秒数 |
| 表锁 | MySQL: Table locks | 表锁等待情况 |
| 缓存命中 | MySQL: Key buffer hit rate | MyISAM缓存命中率 |
| InnoDB状态 | MySQL: InnoDB buffer pool | InnoDB缓冲池使用率 |
四、监控Redis缓存数据库
4.1 安装部署Redis
如果尚未安装Redis,可参考以下步骤快速部署:
# 下载并解压Redis源码包
[root@mysql-server ~]# tar -xzvf redis-stable.tar.gz
[root@mysql-server ~]# cd redis-stable
# 编译安装
[root@mysql-server redis-stable]# make
[root@mysql-server redis-stable]# make install
# 复制配置文件
[root@mysql-server redis-stable]# cp redis.conf /etc/
# 修改Redis配置(daemonize改为yes,使Redis以守护进程方式运行)
[root@mysql-server ~]# sed -i 's/^daemonize no/daemonize yes/' /etc/redis.conf
# 启动Redis服务
[root@mysql-server ~]# redis-server /etc/redis.conf
# 验证Redis是否正常运行
[root@mysql-server ~]# redis-cli ping
PONG
生产环境建议:
设置Redis密码:在
redis.conf中配置requirepass绑定内网IP:配置
bind 127.0.0.1 192.168.38.27关闭保护模式(如需远程访问)
4.2 配置Redis模板宏变量
Zabbix Agent 2 内置了Redis监控插件,可以获取 INFO 命令输出的所有信息、慢查询日志以及服务存活状态。
操作步骤:
-
进入 数据采集(Data collection) → 模板(Templates)
-
搜索找到 Redis by Zabbix agent 2 模板
-
点击模板名称进入详情页,切换到 宏(Macros) 选项卡
如下图所示:

宏变量配置说明:
| 宏变量 | 默认值 | 说明 | 备注 |
|---|---|---|---|
{$REDIS.CONN.HOST} |
localhost | Redis主机地址 | 使用默认即可 |
{$REDIS.CONN.PORT} |
6379 | Redis服务端口 | 如非默认需修改 |
{$REDIS.CONN.PASSWORD} |
(空) | Redis连接密码 | 如设置了密码需填写 |
4.3 链接Redis监控模板
-
进入 数据采集(Data collection) → 主机(Hosts)
-
选择目标主机(192.168.38.27)
-
切换到 模板(Templates) 选项卡
-
点击 链接新模板(Link new templates)
-
搜索并选择 Redis by Zabbix agent 2
-
点击 更新(Update) 保存配置
4.4 验证Redis监控数据
命令行测试:
# 测试Redis信息采集
zabbix_get -s 192.168.38.27 -k "redis.info[127.0.0.1,6379]"
# 测试Redis存活状态
zabbix_get -s 192.168.38.27 -k "redis.ping[127.0.0.1,6379]"
# 测试Redis慢查询日志数量
zabbix_get -s 192.168.38.27 -k "redis.slowlog.count[127.0.0.1,6379]"
4.5 Redis监控项详解
链接模板后,Zabbix会自动采集以下Redis核心指标:
| 监控类别 | 监控项 | 说明 | 监控意义 |
|---|---|---|---|
| 服务状态 | Redis: Ping | Redis服务存活检测 | 判断服务是否在线 |
| 连接状态 | Redis: Connected clients | 当前连接的客户端数 | 监控连接是否正常 |
| 内存使用 | Redis: Used memory | 已使用的内存字节数 | ⚠️ 内存溢出告警关键指标 |
| 内存使用率 | Redis: Used memory percentage | 内存使用百分比 | 评估是否达到maxmemory上限 |
| 命中率 | Redis: Cache hit ratio | 缓存命中率 | 评估缓存效率(越高越好) |
| 键空间 | Redis: Number of keys | 当前存储的键数量 | 监控数据量增长 |
| 过期键 | Redis: Expired keys | 已过期的键数量 | 监控过期策略执行情况 |
| 逐出键 | Redis: Evicted keys | 因内存限制被逐出的键数量 | ⚠️ 内存不足的信号 |
| 慢查询 | Redis: Slow log count | 慢查询日志数量 | ⚠️ 反映命令执行效率 |
| 每秒操作数 | Redis: Instantaneous ops per sec | 当前每秒操作数(OPS) | 反映实时吞吐量 |
| 网络流量 | Redis: In/Out network traffic | 网络出入流量 | 监控网络带宽使用 |
| 主从复制 | Redis: Replication state | 主从复制状态 | 判断复制是否正常 |
五、常见问题排查
5.1 MySQL监控常见问题
| 问题现象 | 排查步骤 |
|---|---|
| 模板链接后无MySQL数据 | 检查Zabbix Agent 2是否运行:systemctl status zabbix-agent2 |
| 监控项显示"不支持" | 检查MySQL监控用户是否存在:SELECT User FROM mysql.user WHERE User='zbx_monitor' |
| 连接被拒绝 | 检查MySQL是否监听3306端口:`netstat -tlnp |
| 认证失败 | 检查宏变量中的用户名和密码是否正确,注意密码中的特殊字符需要转义 |
| 权限不足 | 确认已授予所有必要权限:SHOW GRANTS FOR 'zbx_monitor'@'localhost' |
快速诊断命令:
# 在数据库服务器本地测试MySQL插件
zabbix_agent2 -t mysql.ping
zabbix_agent2 -t mysql.version
5.2 Redis监控常见问题
| 问题现象 | 排查步骤 |
|---|---|
| Redis无数据 | 确认Redis服务是否运行:redis-cli ping |
| 连接失败 | 检查Redis端口6379是否监听:`netstat -tlnp |
| 认证失败 | 如果设置了Redis密码,需在宏 {$REDIS.CONN.PASSWORD} 中配置 |
| 慢查询无数据 | 检查Redis慢查询配置:redis-cli CONFIG GET slowlog-log-slower-than |
快速诊断命令:
# 在数据库服务器本地测试Redis插件
zabbix_agent2 -t redis.ping[localhost,6379]
zabbix_agent2 -t redis.info[localhost,6379]
六、性能调优与告警建议
6.1 MySQL关键告警配置
| 告警项 | 建议阈值 | 说明 |
|---|---|---|
| MySQL服务不可用 | 状态不为"1" | 立即告警 |
| 连接数使用率 | > 80% max_connections | 连接池即将耗尽 |
| 主从复制中断 | Slave_IO_Running != Yes 或 Slave_SQL_Running != Yes | 立即告警 |
| 从库延迟 | Seconds_Behind_Master > 60秒 | 存在复制延迟 |
| 慢查询数量 | 1分钟内 > 10条 | 存在SQL性能问题 |
| InnoDB缓冲池命中率 | < 95% | 缓存配置不足 |
6.2 Redis关键告警配置
| 告警项 | 建议阈值 | 说明 |
|---|---|---|
| Redis服务不可用 | PING响应不为"PONG" | 立即告警 |
| 内存使用率 | > 80% maxmemory | 需扩容或清理数据 |
| 缓存命中率 | < 85% | 缓存效率下降 |
| 逐出键数量 | > 0 | 内存已达上限 |
| 慢查询数量 | 1分钟内 > 5条 | 存在慢命令 |
| 连接数使用率 | > 80% maxclients | 连接数即将耗尽 |
6.3 MySQL参数调优参考
# /etc/my.cnf 常用调优参数
# 连接数配置
max_connections = 500
# InnoDB缓冲池(建议设置为物理内存的60%-80%)
innodb_buffer_pool_size = 4G
# 查询缓存(8.0已弃用)
# query_cache_size = 128M
# 慢查询日志
slow_query_log = ON
long_query_time = 2
6.4 Redis参数调优参考
# /etc/redis.conf 常用调优参数
# 最大内存(根据实际物理内存设置)
maxmemory 4GB
# 内存逐出策略(推荐allkeys-lru)
maxmemory-policy allkeys-lru
# 慢查询阈值(微秒)
slowlog-log-slower-than 10000
# 最大连接数
maxclients 10000
七、高可用监控方案建议
对于生产环境,建议建立以下监控体系:

-
MySQL主从复制:监控从库的延迟和复制状态,确保数据同步正常
-
Redis主从/哨兵/集群:监控各节点状态,确保高可用机制正常工作
-
容量规划:关注数据增长趋势,提前进行容量规划
结语
通过本文的详细讲解,我们完成了使用Zabbix Agent 2监控MySQL和Redis的完整部署流程。核心要点回顾:
-
Agent 2原生支持:MySQL和Redis监控无需额外脚本,利用Agent 2内置插件即可
-
最小权限原则:为监控用户授予最小必要权限,保障数据库安全
-
宏变量统一管理:通过模板宏变量集中管理数据库凭据,便于维护
-
关键指标监控:重点关注MySQL的连接数、主从延迟、慢查询,Redis的内存使用率、命中率、逐出键
在实际生产环境中,建议将数据库监控与业务应用监控相结合,构建从应用层到数据层的全链路可观测性体系。
📌 相关文章推荐:
《Zabbix监控Nginx+PHP-FPM应用实践》
《Zabbix监控Apache与Nginx应用实践》
《Zabbix监控Windows应用实践》
如果文章对您有帮助,欢迎点赞收藏!如有疑问,请在评论区留言交流。
原创文章,转载请注明出处。