拓冰建站拓冰建站
首页 / 资讯中心 / 正文

SkyWalking Virtual Cache 虚拟缓存监控:从 Cache Span 规范到慢缓存命令分析

可观测性后端微服务云原生【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址https://gitcode.com/gh_mirrors/sky/skywalking点击查看免费下载SkyWalking 的Virtual Cache虚拟缓存能力由各语言 Server Agent如 Java Agent中的缓存插件例如 Redis 插件自动检测应用访问的缓存节点并从缓存客户端视角采集流量、延迟、成功率以及采样后的慢操作读/写指标交给 OAP 后端做分析后在仪表盘中呈现。读完本文你将掌握缓存操作 Span 的标准打点规范cache.type/cache.op/cache.cmd/cache.key四个标签、OAP 后端的解析链路以及慢缓存命令Slow Cache Command阈值的完整配置方法。Virtual Cache 是什么Virtual Cache 指的是由 Server Agents 的插件检测到的缓存节点。它被称为虚拟Virtual是因为缓存节点本身并不是一个真正接入 SkyWalking 的服务Service而是被 Agent 插件虚拟化出来的、独立于业务服务的可观测对象。它的性能指标来自Cache 客户端即业务应用的视角而不是缓存服务器自身的视角例如 Java Agent 中的 Redis 插件可以检测到某条 Redis 命令get、set、del等的延迟借助 OAP 后端的分析能力SkyWalking 会在虚拟缓存仪表盘中展示该缓存节点的流量Traffic、延迟Latency、成功率Success Rate以及采样得到的慢操作Slow Operations区分写/读。从后端源码看虚拟缓存会以Layer.VIRTUAL_CACHE的层级注册为一种服务元数据ServiceMeta相关处理位于 VirtualCacheProcessor.java其 UI 模板由 virtual-cache-root.json 与 virtual-cache-service.json 定义。缓存操作 Span 的规范Agent 打点要求要让 OAP 后端正确识别并分析一次缓存访问承载该操作的Span 必须满足以下全部条件。这是 Agent 插件开发与手动埋点Manual Instrumentation都必须遵守的标准1. Span 类型Exit 或 Local缓存操作 Span 必须是Exit Span远程缓存或Local Span进程内缓存不能是 Entry Span。这决定了它在 Trace 拓扑中的位置——它是业务服务向外/向内部发起的一次资源访问。2. Span 层级CACHESpan 的layer必须等于CACHE。在 OAP 端VirtualCacheProcessor.prepareVSIfNecessary的第一道判断就是span.getSpanLayer() ! SpanLayer.Cache时直接返回见 VirtualCacheProcessor.java。3. 四个保留标签Tag后端定义在保留标签常量类 SpanTags.java 中Agent 必须为缓存 Span 设置Tag Key含义取值示例cache.type缓存系统类型redis、memcached、guava等cache.op操作类别指示cache.cmd属于读还是写read或writecache.cmd具体的缓存命令get、set、del等cache.key被访问的缓存 Key如user:1001其中cache.type是必需的。OAP 端在标签中取不到cache.type时会直接放弃对该 Span 的处理StringUtil.isBlank(cacheType)即 return并且会统一将类型名转为小写后再参与阈值匹配cache.op决定该次操作是读还是写后端通过parseOperation将write/read映射为VirtualCacheOperation.Write/VirtualCacheOperation.Read其他值归入VirtualCacheOperation.Others见 VirtualCacheProcessor.javacache.cmd与cache.key主要服务于慢缓存命令采样Slow Cache Command的展示。4. peer 语义区分进程内缓存与远程缓存如果缓存系统是**进程内in-memory**的例如 Guava CacheAgent 插件通常会创建Local Span此时 Span 的peer为null对于远程缓存如 Redis、MemcachedSpan 的peer是缓存服务器的网络地址IP 或域名通常形如127.0.0.1:6379。这个约定直接决定了虚拟缓存服务的身份命名OAP 后端在peer为空时会使用${cache.type}-local例如redis-local作为缓存服务名peer非空时则直接以peer作为服务名namingControl.formatServiceName(peer)见 VirtualCacheProcessor.java。OAP 后端如何分析缓存 Span源码级原理当 Agent 上报的 Segment 进入 OAP 后缓存 Span 会经过 VirtualCacheProcessor 处理产出三类 SourceServiceMeta服务元数据以Layer.VIRTUAL_CACHE注册虚拟缓存服务服务名为peer或${cache.type}-local时间桶取分钟级CacheAccess访问指标包含缓存类型 ID取自 Span 的componentId、延迟endTime - startTime、状态!span.getIsError()、操作类型等定义见 CacheAccess.javaScope 为CacheAccessCacheSlowAccess慢操作采样仅当该次操作延迟超过对应阈值时才生成记录命令command、Key、延迟、Trace ID、状态、时间戳等定义见 CacheSlowAccess.javaScope 为VirtualCacheSlowAccess。慢操作的判定逻辑读、写分别有独立的阈值if ((op Write latency cacheWriteLatencyThresholds.getThreshold(cacheType)) || (op Read latency cacheReadLatencyThresholds.getThreshold(cacheType))) { // 生成 CacheSlowAccess 采样记录 }慢操作的记录 ID 由traceSegmentId - spanId构成与具体 Trace 一一对应便于在链路中回溯定位见 VirtualCacheProcessor.java。测试用例佐证仓库中的单元测试 VirtualCacheProcessorTest.java 从三个角度验证了上述行为testEmptySpanSpan 层级为 Cache 但缺少标签时不产出任何 SourcetestExitSpan带完整标签、peer 为127.0.0.1:6379的 Exit Span产出 3 个 Source——ServiceMeta名为127.0.0.1:6379、层为 VIRTUAL_CACHE、CacheSlowAccess延迟 1000ms、操作为 Read、含 command/key/traceId与 CacheAccesstestExitSpanLessThreshold延迟低于阈值时只产出 2 个 SourceServiceMeta 与 CacheAccess不再生成慢操作采样。这直接印证了只有超过阈值才采样慢操作的设计。慢缓存命令Slow Cache Command的配置慢缓存命令是定位依赖缓存系统的系统瓶颈的关键手段。详细说明见官方文档 Slow Cache Command。采样机制慢缓存命令基于采样sampling默认每个周期10 分钟只保留Top 50 条最慢的命令被采样的命令其耗时必须慢于阈值OAP 会按服务Service维度统计每 10 分钟持久化一次 Top 50。周期由topNReportPeriod控制对应环境变量为SW_CORE_TOPN_REPORT_PERIOD默认10单位分钟。阈值配置格式配置项为一段以逗号分隔的cache-type:thresholdValue列表单位为毫秒cache-type:thresholdValue,cache-type2:thresholdValue2默认值为default:20,redis:10其中default是保留的缓存类型名Reserved Cache type表示所有未显式配置的缓存类型的默认阈值显式配置的类型如redis:10则使用自己的专属阈值。在 application.yml 中读、写两条路径分别对应两个配置项配置项环境变量默认值slowCacheReadThresholdSW_SLOW_CACHE_SLOW_READ_THRESHOLDdefault:20,redis:10slowCacheWriteThresholdSW_SLOW_CACHE_SLOW_WRITE_THRESHOLDdefault:20,redis:10也就是说默认情况下 Redis 的读/写命令只要超过10ms就会被视为慢命令参与采样而其他缓存类型如 Guava、Memcached的阈值是20ms。你可以通过环境变量覆盖例如export SW_SLOW_CACHE_SLOW_READ_THRESHOLDdefault:30,redis:15,memcached:25 export SW_SLOW_CACHE_SLOW_WRITE_THRESHOLDdefault:30,redis:15,memcached:25配置注意事项阈值不宜过小不要设置为1ms这类极小值。虽然理论上可行但如果系统中缓存访问耗时普遍超过 1ms会产生海量慢命令采样给 OAP 带来性能问题持久化频率有限OAP 按服务统计默认每 10 分钟topNReportPeriod只持久化 Top 50因此该功能定位是瓶颈画像而非全量明细排查时需结合 Trace 详情使用。使用流程小结在目标业务服务中安装对应语言的 Server Agent如 Java Agent并确认其缓存插件如 Redis 插件已生效参考 Server Agents确认缓存操作 Span 满足规范Exit/Local类型、layer CACHE、四个缓存标签齐全远程缓存带peer、进程内缓存不带peer在 OAP 中按需调整慢缓存阈值SW_SLOW_CACHE_SLOW_READ_THRESHOLD/SW_SLOW_CACHE_SLOW_WRITE_THRESHOLD与 TopN 周期SW_CORE_TOPN_REPORT_PERIOD在 SkyWalking UI 的虚拟缓存仪表盘中查看缓存节点的流量、延迟、成功率以及采样得到的慢读/慢写命令并结合 Trace 深入定位瓶颈。如需进一步了解缓存慢命令的完整背景可继续阅读 slow-cache-command.mdVirtual Cache 与虚拟数据库、虚拟 MQ 同属服务 Agent 的可观测能力体系相关文档位于 docs/en/setup/service-agent 目录下。赞分享可观测性后端微服务云原生【免费下载链接】skywalkingAPM, Application Performance Monitoring System项目地址https://gitcode.com/gh_mirrors/sky/skywalking点击查看免费下载相关推荐SkyWalking Virtual Cache 虚拟缓存监控Span 标签规范、后端分析链路与慢缓存阈值配置SkyWalking Virtual Cache 虚拟缓存监控Span 标签规范、后端分析链路与慢缓存阈值配置 Virtual Cache虚拟缓存是 Sk可观测性APM链路追踪指标监控日志分析微服务SkyWalking Virtual Database虚拟数据库监控指南从 Span 规约到慢 SQL 分析SkyWalking Virtual Database虚拟数据库监控指南从 Span 规约到慢 SQL 分析 虚拟数据库Virtual Database可观测性后端微服务云原生SkyWalking 虚拟数据库Virtual Database监控机制详解从 Span 规范到慢 SQL 采样SkyWalking 虚拟数据库Virtual Database监控机制详解从 Span 规范到慢 SQL 采样 导读 在 SkyWalking 中虚拟可观测性APM链路追踪指标监控日志分析微服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门