Zabbix监控MySQL与Redis应用实践完整指南

前言

在当今的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插件采集数据。需要先配置模板中的宏变量。

操作步骤:

  1. 登录Zabbix Web管理界面

  2. 进入 数据采集(Data collection)模板(Templates)

  3. 搜索找到 MySQL by Zabbix agent 2 模板

  4. 点击模板名称进入详情页,切换到 宏(Macros) 选项卡

如下图所示:

宏变量配置说明:

宏变量 默认值 推荐修改值 说明
{$MYSQL.USER} root zbx_monitor MySQL监控用户名
{$MYSQL.PASSWORD} (空) mysqlabc123 MySQL监控用户密码
{$MYSQL.HOST} localhost localhost MySQL主机地址
{$MYSQL.PORT} 3306 3306 MySQL服务端口

3.4 链接MySQL监控模板

  1. 进入 数据采集(Data collection)主机(Hosts)

  2. 选择目标主机(192.168.38.27)

  3. 切换到 模板(Templates) 选项卡

  4. 点击 链接新模板(Link new templates)

  5. 搜索并选择 MySQL by Zabbix agent 2

  6. 点击 更新(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 命令输出的所有信息、慢查询日志以及服务存活状态。

操作步骤:

  1. 进入 数据采集(Data collection)模板(Templates)

  2. 搜索找到 Redis by Zabbix agent 2 模板

  3. 点击模板名称进入详情页,切换到 宏(Macros) 选项卡

如下图所示:

宏变量配置说明:

宏变量 默认值 说明 备注
{$REDIS.CONN.HOST} localhost Redis主机地址 使用默认即可
{$REDIS.CONN.PORT} 6379 Redis服务端口 如非默认需修改
{$REDIS.CONN.PASSWORD} (空) Redis连接密码 如设置了密码需填写

4.3 链接Redis监控模板

  1. 进入 数据采集(Data collection)主机(Hosts)

  2. 选择目标主机(192.168.38.27)

  3. 切换到 模板(Templates) 选项卡

  4. 点击 链接新模板(Link new templates)

  5. 搜索并选择 Redis by Zabbix agent 2

  6. 点击 更新(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应用实践》

如果文章对您有帮助,欢迎点赞收藏!如有疑问,请在评论区留言交流。

原创文章,转载请注明出处。

相关推荐
fiveym2 小时前
05 - 黄金镜像与全自动还原
运维·服务器·架构
OsDepK2 小时前
在安卓Termux终端中部署openssh
linux·服务器
动力 continue10 小时前
Linux 基础篇 · 压缩打包与用户管理
linux·服务器·基础命令linux
画中有画11 小时前
软件架构中质量属性(性能、安全、可扩展性)的权衡设计
java·运维·安全
陈皮波比茶11 小时前
Redis学习
数据库·redis·学习
NJCloud11 小时前
Ansible(三)——Zabbix 监控系统部署与敏感信息加密
linux·运维·chrome·信息可视化·ansible·zabbix
ltl12 小时前
Cgroups v2:为什么内存限制设了,宿主机数据库还是被 OOM
linux
NJCloud12 小时前
TiDB 集群部署与 MySQL 兼容性适配实战
linux·运维·数据库·mysql·tidb