3. 巡检体系设计:巡检目标、巡检频率、巡检指标与工具选型

网络缓存巡检是保障缓存系统稳定、高效运行的核心手段。一个完整的巡检体系需要明确“为什么巡”、“多久巡”、“巡什么”以及“用什么巡”。本章从这四个维度展开,结合 CoreDNS 与缓存层的实际运维场景,构建可落地的巡检框架。

3.1 巡检目标

巡检目标决定了巡检的覆盖范围与优先级。对于网络缓存系统(包括 CoreDNS 缓存、反向代理缓存、分布式缓存等),巡检目标分为三个层次:

目标层级 具体描述 典型场景
可用性 缓存服务进程存活、端口监听正常、API 响应可达 CoreDNS Pod 重启、Nginx 缓存进程挂死
性能 缓存命中率达标、延迟在 SLO 范围内、错误率低于阈值 DNS 查询平均延迟 > 50ms、缓存 Miss 率突增
一致性 缓存数据与源站数据无偏差、TTL 管理正确 CoreDNS 缓存记录过期未刷新、上游记录变更未同步
实践建议: 在 Kubernetes 环境中,可用性巡检应优先依赖 livenessProbe 与 readinessProbe,而非仅靠外部监控系统轮询。性能与一致性巡检则需独立采集指标。

3.2 巡检频率

巡检频率需平衡“及时发现异常”与“避免监控系统自身成为瓶颈”。不同指标对时效性的要求差异较大:

  • 高频率(秒级 ~ 分钟级): 核心性能指标(命中率、延迟、错误率)。建议 15s ~ 60s 采集一次,用于实时告警与 Dashboard 展示。
  • 中频率(分钟级 ~ 小时级): 缓存一致性校验、配置变更审计。建议每 5 ~ 30 分钟执行一次,避免频繁请求源站。
  • 低频率(小时级 ~ 天级): 缓存容量规划、日志归档、证书过期检查。建议每日或每周执行一次。
巡检类型 推荐频率 采集方式
进程存活 / 端口监听 10s Prometheus Blackbox Exporter
命中率 / 延迟 / 错误率 30s Prometheus + coredns_metrics
缓存一致性校验 10min 自定义脚本 + 上游对比
配置变更审计 1h GitOps + ConfigMap 差异比对
证书 / 容量 / 日志 1d CronJob + 报告推送

3.3 巡检指标:命中率、延迟、错误率

这三个指标构成缓存巡检的“黄金三角”,任何一项偏离基线都意味着缓存系统需要干预。

3.3.1 命中率(Hit Ratio)

命中率是缓存系统最核心的效率指标。计算公式:

命中率 = 缓存命中次数 / (缓存命中次数 + 缓存未命中次数) × 100%

在 CoreDNS 中,可通过 coredns_cache_hits_total 与 coredns_cache_misses_total 指标计算。命中率过低通常由以下原因导致:

  • 缓存容量不足,导致频繁驱逐(Eviction)。
  • TTL 设置过短,缓存记录频繁过期。
  • 查询的域名分布过于分散,缺乏热点。
巡检阈值参考: DNS 缓存命中率应 > 95%;反向代理缓存(如 Nginx)应 > 80%;分布式缓存(如 Redis)视业务场景而定,通常 > 90%。

3.3.2 延迟(Latency)

延迟反映缓存系统的响应速度。需要区分“缓存命中延迟”与“缓存未命中延迟”:

  • 命中延迟: 从缓存直接返回数据的时间,通常 < 1ms。
  • 未命中延迟: 缓存 Miss 后回源查询的时间,可能达到 10ms ~ 100ms 甚至更高。

在 CoreDNS 中,coredns_dns_request_duration_seconds 指标按 zone 和 type 维度暴露延迟分布。巡检时应关注 P99 延迟,而非平均值。

3.3.3 错误率(Error Rate)

错误率指缓存系统返回非成功状态码的比例。对于 CoreDNS,错误包括 NXDOMAIN、SERVFAIL、REFUSED 等。计算公式:

错误率 = 错误响应总数 / 总请求数 × 100%

错误率突增可能的原因:

  • 上游 DNS 服务器不可达或超时。
  • CoreDNS 插件配置错误(如 forward 目标失效)。
  • 缓存数据损坏或格式异常。
注意: 错误率与命中率存在关联。当缓存 Miss 后回源失败,错误率会同步上升。巡检时应将两个指标联合分析,避免误判。

3.4 巡检工具选型

工具选型需考虑部署环境(Kubernetes / 虚拟机 / 物理机)、指标暴露方式(Prometheus / StatsD / 日志)以及团队技术栈。以下为推荐组合:

工具 适用场景 优势 局限
Prometheus + Grafana 指标采集、告警、可视化 生态成熟、Kubernetes 原生支持、告警规则灵活 存储成本随指标基数增长
Blackbox Exporter 外部探测(TCP/HTTP/DNS) 模拟用户视角、支持多协议 无法采集内部指标
coredns_metrics CoreDNS 内部指标暴露 零侵入、开箱即用 仅适用于 CoreDNS
ELK / Loki 日志巡检与错误分析 支持全文检索、关联 Trace 实时性不如指标系统
自定义脚本 + CronJob 一致性校验、配置审计 高度定制、无外部依赖 维护成本高、缺乏统一视图
推荐组合: Prometheus + Grafana 作为指标巡检主平台,Blackbox Exporter 做外部探测,Loki 做日志巡检,自定义 CronJob 做一致性校验。所有工具统一对接告警系统(如 AlertManager)。

3.5 巡检体系架构图

下图展示了缓存巡检体系的整体架构,涵盖指标采集、存储、可视化与告警链路:

缓存巡检体系架构图 缓存巡检体系架构图 CoreDNS Metrics Blackbox Exporter 自定义 CronJob Prometheus Server(指标存储 + 告警规则评估) Grafana Dashboard AlertManager(告警通知) SRE 响应 / 自动修复(Kubernetes Operator / 自愈脚本) 说明:指标从 CoreDNS、Blackbox Exporter 和自定义任务汇聚到 Prometheus,经 Grafana 展示与 AlertManager 告警,最终驱动 SRE 响应或自动修复。

3.6 巡检指标与告警阈值速查表

以下为 CoreDNS 缓存巡检的核心指标与推荐告警阈值,可直接用于 Prometheus 告警规则配置:

指标名称 PromQL 示例 告警阈值 严重级别
缓存命中率 1 - (rate(coredns_cache_misses_total[5m]) / rate(coredns_cache_hits_total[5m] + coredns_cache_misses_total[5m])) < 0.95 Warning
P99 查询延迟 histogram_quantile(0.99, rate(coredns_dns_request_duration_seconds_bucket[5m])) > 0.05s Critical
错误率 rate(coredns_dns_responses_total{rcode!="NOERROR"}[5m]) / rate(coredns_dns_responses_total[5m]) > 0.01 Critical
缓存驱逐率 rate(coredns_cache_evictions_total[5m]) > 100 Warning
上游超时率 rate(coredns_forward_requests_duration_seconds_count{status="timeout"}[5m]) > 0 Critical
巡检体系落地检查清单:
  • 是否已为所有缓存节点配置 Prometheus 指标暴露?
  • 是否已定义命中率、延迟、错误率的告警规则?
  • 是否已设置 Grafana Dashboard 用于日常巡检?
  • 是否已建立巡检频率与值班响应流程的对应关系?
  • 是否已对巡检工具进行压力测试,避免监控系统自身成为瓶颈?