监控 Redis:Zabbix 和 Nightingale 生态对比

对比 Zabbix Agent 2 与 Nightingale/Categraf 监控 Redis 的方式,说明 Redis INFO 采集原理、Zabbix Redis 模板、Categraf Redis 插件、标签模型、存储压力和选型边界。

作者 巴辉特

Zabbix 监控 Redis 和 Nightingale 生态监控 Redis,采集原理类似:连接 Redis 实例,执行 info 之类的命令,解析输出,再把结果写入监控系统。但两者的产品体验和数据模型差异很大。

本文分别说明 Zabbix 和 Nightingale/Categraf 的 Redis 监控方式,帮助大家做选型对比。

核心要点摘要

  • Redis 监控的采集端逻辑并不复杂,通常是通过 TCP 连接 Redis,执行 info 命令并解析 key-value 输出。
  • Zabbix 老版本监控 Redis 主要依赖自定义脚本;Zabbix Agent 2 开始支持更多采集能力,包括 Redis 监控。
  • 在 Zabbix 中,建议把 Redis 采集任务下发给 Redis 实例所在机器上的 agent,减少网络因素影响。
  • Nightingale 本身不采集数据,通常由 Categraf 等采集器采集 Redis 指标,再推送给 Nightingale 或远端时序库。
  • 少量 Redis 实例用 Zabbix 也能工作;大量实例、高频采集和复杂聚合场景,更适合 Prometheus 生态和专用时序库。

监控 Redis 的原理

监控 Redis 的原理比较简单:通过 TCP 连到 Redis 实例,执行 info 之类的命令获取输出,解析输出中的 key-value,再把解析出来的数据推给监控系统。

MySQL、MongoDB 等数据库或中间件监控,从采集端看也有类似思路:连接目标实例,执行查询或状态命令,解析输出,再转换为监控指标。

当然,采集逻辑简单,不代表理解指标含义简单。Redis 指标很多,不同指标背后的容量、性能和异常含义需要结合实际业务判断。本文只讨论采集和监控系统接入方式。

下面是我的环境里通过 info 命令拿到的部分输出:

$ redis-cli
127.0.0.1:6379> info
# Server
redis_version:6.2.16
redis_git_sha1:00000000
redis_git_dirty:0
...

# Memory
used_memory:963376
used_memory_human:940.80K
used_memory_rss:8712192
used_memory_rss_human:8.31M
used_memory_peak:1021480

上面的内容只截取了一部分,但已经能说明问题。info 命令的输出按 section 分组,每个 section 里有很多 key-value 对,这些 key-value 对就是监控系统要解析和上报的指标来源。

Zabbix 如何监控 Redis

Zabbix 老版本监控 Redis 主要靠用户自行编写采集脚本。这种方式可行,但比较麻烦。

从 Zabbix Agent 2 开始,agent 使用 Go 重写,支持了更多新的采集能力,其中就包括 Redis 监控数据采集。

Zabbix 的采集流程可以理解为:

  1. 选择一个 agent 所在机器作为探针。
  2. 在 Zabbix 中给这个探针下发采集任务。
  3. Agent 执行采集任务,连接 Redis 并获取数据。
  4. Agent 把采集到的数据发送给 Zabbix Server。
  5. Zabbix Server 存储数据,并根据用户配置的告警规则触发告警。

一般来讲,为了稳定可靠地采集,建议直接把采集任务下发给 Redis 实例所在机器上的 agent。这样 agent 可以通过 127.0.0.1:6379 连接本地 Redis 实例,采集过程受网络影响更小。

Zabbix 绑定 Redis 模板

上例中,我给这台机器绑定了 Redis by Zabbix agent 2 模板。这个模板默认连接的是:

tcp://localhost:6379

绑定模板后,就可以采集到 Redis 指标。比如 redis.clients.connected 这个 Key 表示当前连接到 Redis 的客户端数量。

Nightingale/Categraf 如何监控 Redis

Nightingale 本身无法采集数据,可以使用 Categraf 作为采集器。当然,也可以使用其他习惯的采集器。

下面是 Categraf 采集 Redis 的相关配置:

[[instances]]
address = "localhost:6379"
labels = { instance="n9e-10.2.3.4:6379" }

这个配置的核心是 address,也就是 Redis 实例地址。如果 Redis 设置了密码,还需要配置 password

示例中还给采集数据附加了一个 instance 标签。后续就可以根据 instance 标签区分不同 Redis 实例。

categraf redis dashboard

上图是使用 Categraf 采集数据并推给夜莺后,在夜莺中导入 Redis 内置仪表盘看到的效果。

联系我们交流

Zabbix 和 Nightingale 的关键差异

表面上看,Zabbix 和 Nightingale/Categraf 都是在采 Redis 指标,差别好像不大。实际上差异主要在数据模型、存储和生态。

对比项 Zabbix Nightingale/Categraf
采集方式 Zabbix Agent 2 通过模板和 Key 采集 Redis。 Categraf Redis 插件采集后推送到 Nightingale 或时序库。
数据模型 使用 Key 表示监控指标。 使用 Prometheus/OpenTSDB 生态的指标名 + 标签。
实例区分 依赖 Host、Key 和模板配置。 通过 instance 等标签区分不同 Redis 实例。
存储方式 依赖 Zabbix 底层数据库和历史数据模型。 通常接入 Prometheus 生态或专用时序库。
聚合计算 Key 模型在多维聚合上不够灵活。 标签模型更适合按实例、服务、环境等维度聚合。

数据结构差异

Zabbix 使用 Key 表示监控指标。Nightingale 复用 OpenTSDB、Prometheus 生态的标签 + 指标方式,更灵活,尤其是在聚合计算时更明显。

Redis 这种中间件,经常需要按实例、集群、业务、环境等维度查看和聚合。如果数据从一开始就带有结构化标签,后续查询和告警规则会更容易维护。

存储容量差异

如果只有少量 Redis 实例要监控,差异感受不深。但如果有大量 Redis 实例,并且需要高频率采集,就会明显感受到 RDBMS 存储时序数据的瓶颈。Zabbix 在这个点上比较吃力。

Redis 实例的指标数量整体还好。如果换成 Elasticsearch 这类组件,要想完整采集,一个实例就可能有非常多指标。这类大规模时序数据更适合使用专门的时序库。

选型建议

如果你使用的是第一代 Zabbix Agent,笔者不建议用 Zabbix 监控 Redis 以及各类数据库、中间件。后续 Zabbix Agent 2 会更好一些,可以用,但因为 Zabbix 的历史包袱,笔者仍然不建议把它作为中间件监控首选。

笔者的判断是:

  • Zabbix 更适合监控网络设备和传统基础设施。
  • 数据库、中间件、Kubernetes、微服务这些监控需求,更适合交给 Prometheus 生态。
  • Redis 实例少、已有 Zabbix 环境且只需要基础监控时,可以继续用 Zabbix Agent 2。
  • Redis 实例多、需要高频采集、多维聚合和统一告警时,建议使用 Categraf、Telegraf、Prometheus Exporter 等采集器接入 Prometheus 生态。

Prometheus 生态的采集器很多,除了本文介绍的 Categraf,还可以使用 Telegraf、Prometheus Exporter 等。这些采集器都是开源的,可以根据团队习惯选择。

Nightingale 在 Prometheus 生态里扮演的是高可用、UI 易用的告警引擎。它可以同时对接多套 Prometheus,用一套告警规则生效到多套 Prometheus,并提供权限管控,适合给全公司多个团队使用。后面 Nightingale 会开放 Elasticsearch、ClickHouse 的告警引擎能力,届时会更加强大。

FAQ

Zabbix 能监控 Redis 吗?

可以。Zabbix Agent 2 已支持 Redis 监控能力,可以通过绑定 Redis 模板采集指标。老版本 Zabbix 通常需要自定义脚本。

Nightingale 为什么还需要 Categraf?

因为 Nightingale 本身主要承担告警引擎和平台入口角色,不直接负责采集。Redis 指标需要由 Categraf、Telegraf 或 Exporter 等采集器获取并上报。

少量 Redis 实例是否必须迁到 Prometheus 生态?

不一定。如果实例数量少、采集频率不高、团队已有 Zabbix 体系,用 Zabbix Agent 2 也可以满足基础需求。Prometheus 生态的优势主要体现在大量实例、多维标签和复杂聚合场景。

总结

Zabbix 和 Nightingale/Categraf 监控 Redis 的采集原理类似,都是连接 Redis、执行命令、解析输出并上报指标。真正的差异在于数据模型、存储能力和生态扩展方式。

Zabbix 适合已有 Zabbix 环境中的基础 Redis 监控,尤其是实例数量不多、监控要求不复杂的场景。Nightingale/Categraf 更适合 Prometheus 生态,适合实例更多、标签维度更多、聚合和告警治理要求更高的场景。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云