☰
Zabbix 8.0 使用模板 “Memcached by Zabbix agent 2“ 监控 Memcached 全指南
2026/10/4 9:35:05 网站建设 项目流程
  • 指标监控
  • 可观测性
  • 告警
  • 运维

【免费下载链接】zabbix

Real-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.

项目地址:https://gitcode.com/gh_mirrors/zabbix2/zabbix
点击查看免费下载

导读

本文以官方模板 templates/app/memcached/README.md 为骨架,结合仓库内 Zabbix agent 2 的 Memcached 插件源码,完整讲解如何零脚本地接入并监控 Memcached 服务。你将掌握模板的宏与监控项设计、memcached.ping/memcached.stats两类键的底层机制、连接会话配置方法,以及全部 8 条内置触发器的告警含义,可直接落地到生产环境。


模板概述:零外部脚本的 Memcached 监控

该模板专为通过Zabbix agent 2监控 Memcached 设计,官方定位是"effortless deployment"——即部署过程不依赖任何外部脚本,所有数据采集均由 agent 2 内建的 Memcached 插件完成(参见插件文档 src/go/plugins/memcached/README.md)。

适用版本要求:

  • Zabbix 版本:8.0 及以上(模板 YAML 头部的zabbix_export: version: '8.0'同样印证这一点,见 template_app_memcached.yaml);
  • 已测试的 Memcached 版本:1.4、1.5、1.6。插件侧对支持的版本描述为 "Memcached, version 1.4+",与模板测试范围一致。

模板使用前,请先按照 Zabbix 官方手册中 "Templates out of the box"(开箱即用模板)章节的流程完成模板导入、链接到主机等前置配置。本文其余章节将围绕模板内部设计与插件实现展开。


工作原理:agent 2 与 Memcached 插件如何协作

模板的所有数据都来自插件注册的两个指标键。这两个键在 metrics.go 中定义:

键作用返回
memcached.ping[<通用参数>]探测连接是否存活存活返回1,任何错误(含认证失败、配置错误)返回0
memcached.stats[<通用参数>[,type]]执行 Memcached 的stats命令并序列化为 JSONJSON 字符串

其中memcached.stats的type参数支持items、sizes、slabs、settings四种取值,默认为空(即通用统计)。模板中的"Get status"监控项正是以memcached.stats["{$MEMCACHED.CONN.URI}"]作为主监控项(master item),其余全部监控项作为依赖项(Dependent item),通过 JSON Path 预处理从主项返回的 JSON 中抽取各自字段。这就是模板整体数据流的核心:一次stats请求,喂给二十多个派生监控项。

从实现上看,请求链路为:Export(memcached.go)→ 参数解析与默认值填充 →getHandlerFunc分发到pingHandler或statsHandler(handler_ping.go、handler_stats.go)。statsHandler调用连接层conn.Stats(params["Type"])拿到mc.McStats后json.Marshal输出;pingHandler通过conn.NoOp()探测连接,失败即返回0。

值得注意的底层设计(conn.go):

  • 连接复用:插件按uri.URI维护连接池(ConnManager),连接保持打开状态以降低网络抖动、延迟、CPU 与内存开销;
  • 连接保活(KeepAlive):默认 300 秒内未被访问的连接会被关闭;后台 housekeeper 每 10 秒巡检一次;
  • 连接参数:Retries: 2、Failover: true、PoolSize: 1、启用 TCP keepalive 与TcpNoDelay。

这些机制决定了模板拉取数据开销极低,适合高频轮询场景。


部署准备与连通性验证

1. 确认 agent 2 已编译 Memcached 插件

插件随 Zabbix agent 2 一同发布,无需单独安装步骤(插件 README)。部署时确保 agent 2 二进制包含 Memcached 插件,并在 agent 配置文件中按需调整以下选项:

配置项说明默认值取值范围
Plugins.Memcached.KeepAlive空闲连接关闭前等待时间300 秒60–900
Plugins.Memcached.Timeout单次请求最大等待时间等于全局Timeout1–30

注意:Plugins.Memcached.Timeout已被标记为deprecated,仅用于兼容 7.0 版本之前的 Zabbix 服务器请求。在 config.go 中可以看到,若设置了该旧选项,其值会回填到Default.ConnectionTimeout。新环境请通过全局Timeout或会话级ConnectionTimeout控制超时。

2. 测试连通性

模板 README 给出的标准验证命令:

zabbix_get -s memcached-host -k memcached.ping

返回1表示连接正常;返回0则说明 agent 无法与 Memcached 实例建立连接(可能原因包括网络不通、认证失败、配置错误等,详见插件pingHandler的实现 handler_ping.go)。

3. 连接串(URI)格式约束

连接既可通过键参数直接指定,也可通过命名会话(named sessions)配置。URI 语法约束如下(插件 README):

  • 仅支持tcp与unix两种网络 schema(metrics.go中AllowedSchemes: []string{"tcp", "unix"}硬性校验);
  • 默认 URI 为tcp://localhost:11211(uriDefaults中Scheme: "tcp", Port: "11211");
  • 禁止在 URI 内嵌用户名密码(userinfo 会被忽略并报错),正确做法是把用户名密码作为独立参数传入:
    • 错误写法:memcached.ping[tcp://user:password@127.0.0.1]
    • 正确写法:memcached.ping[tcp://127.0.0.1,user,password]
  • 合法 URI 示例:tcp://127.0.0.1:11211、tcp://localhost、localhost、unix:/var/run/memcached.sock、/var/run/memcached.sock;
  • 凭据长度上限为 252 字符(maxEntryLen = 252)。

4. 使用命名会话管理多实例

当需要同时监控多个 Memcached 实例(如 Prod 与 Test)时,推荐在 agent 配置文件中定义会话:

Plugins.Memcached.Sessions.Prod.Uri=tcp://192.168.1.1:11211 Plugins.Memcached.Sessions.Prod.User=<UserForProd> Plugins.Memcached.Sessions.Prod.Password=<PasswordForProd> Plugins.Memcached.Sessions.Prod.ConnectionTimeout=10 Plugins.Memcached.Sessions.Test.Uri=tcp://192.168.0.1:11211 Plugins.Memcached.Sessions.Test.User=<UserForTest> Plugins.Memcached.Sessions.Test.Password=<PasswordForTest> Plugins.Memcached.Sessions.Test.ConnectionTimeout=30

随后在键的第一个参数位置直接使用会话名代替 URI:

memcached.ping[Prod] memcached.ping[Test]

会话参数由 config.go 中的session结构定义,支持Uri、User、Password、ConnectionTimeout四项,其中ConnectionTimeout仅能作为会话参数或全局默认值设置。会话名区分大小写。相比把凭据写进监控项键或宏,命名会话是更安全的凭据存放方式。


宏(Macros)详解

模板共定义 5 个宏(与 YAML 中macros段一一对应,template_app_memcached.yaml):

宏名描述默认值
{$MEMCACHED.CONN.URI}URI 格式连接串(不使用密码)。若已设置,将覆盖配置文件Plugins.Memcached.Uri选项;否则使用插件默认值tcp://localhost:11211tcp://localhost:11211
{$MEMCACHED.CONN.THROTTLED.MAX.WARN}每秒被节流(throttled)连接数的告警上限1
{$MEMCACHED.CONN.QUEUED.MAX.WARN}每秒排队连接数的告警上限1
{$MEMCACHED.CONN.PRC.MAX.WARN}已连接客户端占比(百分比)告警上限80
{$MEMCACHED.MEM.PUSED.MAX.WARN}内存使用率(百分比)告警上限90

在 YAML 宏定义中,{$MEMCACHED.CONN.URI}被标记为required: YES,即部署时必须显式填写实际 Memcached 地址;其余阈值类宏均附带了数字正则校验(^-?([0-9]+|(([0-9]+)\.([0-9]+)))$),其中两个百分比宏的合法范围为 0–100 闭区间。多实例场景可借助主机级宏覆盖实现同一模板监控不同目标。


监控项(Items)完整清单

模板由 1 个主监控项 + 25 个依赖监控项组成。主监控项Get status(memcached.stats["{$MEMCACHED.CONN.URI}"])不保存历史(history: '0'),仅作为 JSON 数据源;其余依赖项通过 JSON Path 抽取字段,并按需叠加"每秒变化率(Change per second)"或"心跳去重(Discard unchanged with heartbeat)"预处理。

连接类(connections)

监控项名称键JSON Path / 预处理说明
Max connectionsmemcached.connections.max$.max_connections,30m 去重最大并发连接数
Open connectionsmemcached.connections.current$.curr_connections当前已连接客户端数
Connection structuresmemcached.connections.structures$.connection_structures服务端分配的连接结构数量
New connections per secondmemcached.connections.rate$.total_connections+ Change per second每秒新建连接数
Queued connections per secondmemcached.connections.queued.rate$.listen_disabled_num+ Change per second达到连接上限后监听器被禁用、连接进入队列的次数
Throttled connectionsmemcached.connections.throttled.rate$.conn_yields+ Change per second客户端连接被节流的次数(批量 GET 且单连接请求数超过-R参数限制时,为防饥饿会节流)

缓存与内存类(cache / memory / keyspace)

监控项名称键JSON Path / 预处理说明
Maximum number of bytesmemcached.config.limit_maxbytes$.limit_maxbytes,30m 去重缓存允许的最大字节数(可在配置文件或启动命令行调整)
Bytes usedmemcached.stats.bytes$.bytes当前存储条目占用的字节数
Current number of items storedmemcached.stats.curr_items$.curr_items当前实例存储的条目总数
New items per secondmemcached.stats.total_items.rate$.total_items+ Change per second每秒新增存储条目数
Evictions per secondmemcached.stats.evictions.rate$.evictions+ Change per second每秒淘汰条目数。当条目仍存活却被移除以为新条目腾空间时发生,采用伪 LRU 机制;高淘汰率伴随低命中率通常意味着应用写入了大量不再使用的键

命令类(commands)

监控项名称键JSON Path / 预处理说明
Commands: GET per secondmemcached.commands.get.rate$.cmd_get+ Change per second每秒收到的 GET 请求数
Commands: SET per secondmemcached.commands.set.rate$.cmd_set+ Change per second每秒收到的 SET 请求数
Commands: FLUSH per secondmemcached.commands.flush.rate$.cmd_flush+ Change per secondflush_all命令会使数据库中所有条目失效,带来性能惩罚,生产环境不应出现,可用于发现调试脚本

请求命中类(requests)

监控项名称键JSON Path / 预处理说明
Hits per secondmemcached.stats.hits.rate$.get_hits+ Change per second每秒成功命中(请求且找到)的 GET 数
Misses per secondmemcached.stats.misses.rate$.get_misses+ Change per second每秒未命中(请求但未找到)的 GET 数

网络类(network)

监控项名称键JSON Path / 预处理说明
Read bytes per secondmemcached.stats.bytes_read.rate$.bytes_read+ Change per second网络读速率(B/sec)
Written bytes per secondmemcached.stats.bytes_written.rate$.bytes_written+ Change per second网络写速率(B/sec)

CPU / 应用信息类(cpu / application / threads)

监控项名称键JSON Path / 预处理说明
CPU usermemcached.cpu.user$.rusage_userMemcached 服务消耗的用户态 CPU(秒)
CPU sysmemcached.cpu.sys$.rusage_systemMemcached 服务消耗的系统态 CPU(秒)
Process idmemcached.process_id$.pid,1d 去重服务进程 PID
Memcached versionmemcached.version$.version,1d 去重服务版本号
Uptimememcached.uptime$.uptime服务启动以来的秒数
Threadsmemcached.stats.threads$.threads请求的工作线程数

补充:Ping 监控项memcached.ping["{$MEMCACHED.CONN.URI}"]属于 agent 直采项,带有 10m 心跳去重预处理,并通过值映射 "Service state"(0=Down,1=Up)将数值转为可读状态。

YAML 中每个依赖项还带有component标签(如connections、commands、cpu、network、keyspace、memory、requests、application、threads、health、raw),便于后续在 Zabbix 中进行标签过滤与分类管理。


触发器(Triggers)与告警语义

模板内置 8 条触发器,覆盖可用性、容量、性能与变更通知四类场景,完整如下:

触发器名称表达式严重级别说明
Memcached: Service is downlast(/Memcached by Zabbix agent 2/memcached.ping["{$MEMCACHED.CONN.URI}"])=0Average服务不可达;需手动关闭
Memcached: Failed to fetch info datanodata(/Memcached by Zabbix agent 2/memcached.cpu.sys,30m)=1Warning30 分钟未收到数据;依赖"Service is down";需手动关闭
Memcached: Too many queued connectionsmin(/Memcached by Zabbix agent 2/memcached.connections.queued.rate,5m)>{$MEMCACHED.CONN.QUEUED.MAX.WARN}Warning连接数达上限,新连接被迫排队等待
Memcached: Too many throttled connectionsmin(/Memcached by Zabbix agent 2/memcached.connections.throttled.rate,5m)>{$MEMCACHED.CONN.THROTTLED.MAX.WARN}Warning节流连接数过高,需关注批量 GET 场景的-R限制
Memcached: Total number of connected clients is too highmin(/Memcached by Zabbix agent 2/memcached.connections.current,5m)/last(/Memcached by Zabbix agent 2/memcached.connections.max)*100>{$MEMCACHED.CONN.PRC.MAX.WARN}Warning当前连接数占上限百分比超阈值;达到max_connections后新连接会被拒绝
Memcached: Memory usage is too highmin(/Memcached by Zabbix agent 2/memcached.stats.bytes,5m)/last(/Memcached by Zabbix agent 2/memcached.config.limit_maxbytes)*100>{$MEMCACHED.MEM.PUSED.MAX.WARN}Warning内存使用率超过宏阈值
Memcached: Version has changedlast(...memcached.version,#1)<>last(...memcached.version,#2) and length(last(...memcached.version))>0Info服务版本变更,需确认后手动关闭
Memcached: Service has been restartedlast(/Memcached by Zabbix agent 2/memcached.uptime)<10mInfo运行时长小于 10 分钟,判定服务刚重启;需手动关闭

使用建议:容量类触发器(队列、节流、连接占比、内存占比)的阈值宏建议按业务压测结果调整,避免误报;"Failed to fetch info data" 因依赖关系仅在 "Service is down" 未触发时才独立告警,可有效抑制故障风暴。


开箱自带的图表与仪表盘

模板 YAML 中同时定义了 6 张内建图形与 1 个仪表盘,导入模板后即可直接查看:

  • 图形:Memcached: Commands(get/set/flush 速率)、Memcached: Connections(max/current/structures)、Memcached: Connections rate(新建/节流/排队连接速率)、Memcached: Keyspace(命中/未命中速率)、Memcached: Network(读写速率)、Memcached: Uptime;
  • 仪表盘:Memcached: Overview,包含上述 6 张图形的单页布局。

这些可视化直接复用依赖监控项的数据,无需额外配置,可在前端"仪表盘"中按需调整。


部署落地步骤(小结)

  1. 确认 Zabbix Server/前端版本为8.0+,agent 2 已包含 Memcached 插件;
  2. 在 agent 配置文件中按需设置Plugins.Memcached.*选项或命名会话,重启 agent 2;
  3. 执行zabbix_get -s memcached-host -k memcached.ping验证返回1;
  4. 在 Zabbix 前端导入 template_app_memcached.yaml,将其链接到目标主机;
  5. 将主机级宏{$MEMCACHED.CONN.URI}覆盖为真实连接串(如tcp://127.0.0.1:11211或unix:/var/run/memcached.sock),并按需调整 4 个阈值宏;
  6. 等待数个采集周期后,检查监控项是否产出数据、触发器是否正常复位。

故障排查

  • memcached.ping返回0:检查网络连通性、URI 格式(仅支持tcp/unix)、认证凭据(禁止 URI 内嵌凭据,长度 ≤ 252 字符);
  • 依赖监控项无数据:确认主监控项 "Get status" 是否在采集,必要时在监控项预处理中核对 JSON Path 字段名与 Memcached 版本输出是否一致;
  • 需要更多细节时,提高 agent 的调试级别(DebugLevel),插件日志会随 agent 日志输出,包括连接创建与关闭记录(conn.go中均有log.Debugf埋点);
  • 模板问题反馈渠道:Zabbix 官方支持站点与官方论坛(模板 README 的 Feedback 章节)。
  • 指标监控
  • 可观测性
  • 告警
  • 运维

【免费下载链接】zabbix

Real-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.

项目地址:https://gitcode.com/gh_mirrors/zabbix2/zabbix
点击查看免费下载

相关推荐

上一篇:突破ESP32音频播放瓶颈:深度解析服务器请求丢失问题与全栈解决方案
下一篇:Go2 ROS2 SDK中的电池状态获取技术解析

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询