尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Zabbix 8.0 使用模板 “Memcached by Zabbix agent 2“ 监控 Memcached 全指南

Zabbix 8.0 使用模板 “Memcached by Zabbix agent 2“ 监控 Memcached 全指南 指标监控可观测性告警运维【免费下载链接】zabbixReal-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任何错误含认证失败、配置错误返回0memcached.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请求喂给二十多个派生监控项。从实现上看请求链路为Exportmemcached.go→ 参数解析与默认值填充 →getHandlerFunc分发到pingHandler或statsHandlerhandler_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–900Plugins.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两种网络 schemametrics.go中AllowedSchemes: []string{tcp, unix}硬性校验默认 URI 为tcp://localhost:11211uriDefaults中Scheme: tcp, Port: 11211禁止在 URI 内嵌用户名密码userinfo 会被忽略并报错正确做法是把用户名密码作为独立参数传入错误写法memcached.ping[tcp://user:password127.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.Uritcp://192.168.1.1:11211 Plugins.Memcached.Sessions.Prod.UserUserForProd Plugins.Memcached.Sessions.Prod.PasswordPasswordForProd Plugins.Memcached.Sessions.Prod.ConnectionTimeout10 Plugins.Memcached.Sessions.Test.Uritcp://192.168.0.1:11211 Plugins.Memcached.Sessions.Test.UserUserForTest Plugins.Memcached.Sessions.Test.PasswordPasswordForTest Plugins.Memcached.Sessions.Test.ConnectionTimeout30随后在键的第一个参数位置直接使用会话名代替 URImemcached.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 statusmemcached.stats[{$MEMCACHED.CONN.URI}]不保存历史history: 0仅作为 JSON 数据源其余依赖项通过 JSON Path 抽取字段并按需叠加每秒变化率Change per second或心跳去重Discard unchanged with heartbeat预处理。连接类connections监控项名称键JSON Path / 预处理说明Max connectionsmemcached.connections.max$.max_connections30m 去重最大并发连接数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_maxbytes30m 去重缓存允许的最大字节数可在配置文件或启动命令行调整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/secWritten bytes per secondmemcached.stats.bytes_written.rate$.bytes_written Change per second网络写速率B/secCPU / 应用信息类cpu / application / threads监控项名称键JSON Path / 预处理说明CPU usermemcached.cpu.user$.rusage_userMemcached 服务消耗的用户态 CPU秒CPU sysmemcached.cpu.sys$.rusage_systemMemcached 服务消耗的系统态 CPU秒Process idmemcached.process_id$.pid1d 去重服务进程 PIDMemcached versionmemcached.version$.version1d 去重服务版本号Uptimememcached.uptime$.uptime服务启动以来的秒数Threadsmemcached.stats.threads$.threads请求的工作线程数补充Ping 监控项memcached.ping[{$MEMCACHED.CONN.URI}]属于 agent 直采项带有 10m 心跳去重预处理并通过值映射 Service state0Down1Up将数值转为可读状态。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: Commandsget/set/flush 速率、Memcached: Connectionsmax/current/structures、Memcached: Connections rate新建/节流/排队连接速率、Memcached: Keyspace命中/未命中速率、Memcached: Network读写速率、Memcached: Uptime仪表盘Memcached: Overview包含上述 6 张图形的单页布局。这些可视化直接复用依赖监控项的数据无需额外配置可在前端仪表盘中按需调整。部署落地步骤小结确认 Zabbix Server/前端版本为8.0agent 2 已包含 Memcached 插件在 agent 配置文件中按需设置Plugins.Memcached.*选项或命名会话重启 agent 2执行zabbix_get -s memcached-host -k memcached.ping验证返回1在 Zabbix 前端导入 template_app_memcached.yaml将其链接到目标主机将主机级宏{$MEMCACHED.CONN.URI}覆盖为真实连接串如tcp://127.0.0.1:11211或unix:/var/run/memcached.sock并按需调整 4 个阈值宏等待数个采集周期后检查监控项是否产出数据、触发器是否正常复位。故障排查memcached.ping返回0检查网络连通性、URI 格式仅支持tcp/unix、认证凭据禁止 URI 内嵌凭据长度 ≤ 252 字符依赖监控项无数据确认主监控项 Get status 是否在采集必要时在监控项预处理中核对 JSON Path 字段名与 Memcached 版本输出是否一致需要更多细节时提高 agent 的调试级别DebugLevel插件日志会随 agent 日志输出包括连接创建与关闭记录conn.go中均有log.Debugf埋点模板问题反馈渠道Zabbix 官方支持站点与官方论坛模板 README 的 Feedback 章节。赞分享指标监控可观测性告警运维【免费下载链接】zabbixReal-time monitoring of IT components and services, such as networks, servers, VMs, applications and the cloud.项目地址https://gitcode.com/gh_mirrors/zabbix2/zabbix点击查看免费下载相关推荐后端微服务分层架构实践Routes → Controllers → Services → Repositories 全链路权威指南后端微服务分层架构实践Routes → Controllers → Services → Repositories 全链路权威指南 本篇技术指南源自仓库内 b指标监控可观测性告警运维Zabbix 监控模板集合使用指南Zabbix 监控模板集合使用指南 项目概览 Zabbix 监控模板集合是一个专为 Zabbix 监控系统设计的模板库包含多种设备和服务的监控模板。该项目旨在用一句自然语言指挥100安全工具AI安全测试平台CyberStrikeAI实战全解用一句自然语言指挥100安全工具AI安全测试平台CyberStrikeAI实战全解 想象一下这个季度有50个系统等着做安全评估每一个都要过一遍信息收集、指标监控可观测性告警运维上一篇突破ESP32音频播放瓶颈深度解析服务器请求丢失问题与全栈解决方案下一篇Go2 ROS2 SDK中的电池状态获取技术解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表