3. 巡检体系设计:巡检目标、巡检频率、巡检指标与工具选型
网络缓存巡检是保障缓存系统稳定、高效运行的核心手段。一个完整的巡检体系需要明确“为什么巡”、“多久巡”、“巡什么”以及“用什么巡”。本章从这四个维度展开,结合 CoreDNS 与缓存层的实际运维场景,构建可落地的巡检框架。
3.1 巡检目标
巡检目标决定了巡检的覆盖范围与优先级。对于网络缓存系统(包括 CoreDNS 缓存、反向代理缓存、分布式缓存等),巡检目标分为三个层次:
| 目标层级 | 具体描述 | 典型场景 |
|---|---|---|
| 可用性 | 缓存服务进程存活、端口监听正常、API 响应可达 | CoreDNS Pod 重启、Nginx 缓存进程挂死 |
| 性能 | 缓存命中率达标、延迟在 SLO 范围内、错误率低于阈值 | DNS 查询平均延迟 > 50ms、缓存 Miss 率突增 |
| 一致性 | 缓存数据与源站数据无偏差、TTL 管理正确 | CoreDNS 缓存记录过期未刷新、上游记录变更未同步 |
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 设置过短,缓存记录频繁过期。
- 查询的域名分布过于分散,缺乏热点。
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 目标失效)。
- 缓存数据损坏或格式异常。
3.4 巡检工具选型
工具选型需考虑部署环境(Kubernetes / 虚拟机 / 物理机)、指标暴露方式(Prometheus / StatsD / 日志)以及团队技术栈。以下为推荐组合:
| 工具 | 适用场景 | 优势 | 局限 |
|---|---|---|---|
| Prometheus + Grafana | 指标采集、告警、可视化 | 生态成熟、Kubernetes 原生支持、告警规则灵活 | 存储成本随指标基数增长 |
| Blackbox Exporter | 外部探测(TCP/HTTP/DNS) | 模拟用户视角、支持多协议 | 无法采集内部指标 |
| coredns_metrics | CoreDNS 内部指标暴露 | 零侵入、开箱即用 | 仅适用于 CoreDNS |
| ELK / Loki | 日志巡检与错误分析 | 支持全文检索、关联 Trace | 实时性不如指标系统 |
| 自定义脚本 + CronJob | 一致性校验、配置审计 | 高度定制、无外部依赖 | 维护成本高、缺乏统一视图 |
3.5 巡检体系架构图
下图展示了缓存巡检体系的整体架构,涵盖指标采集、存储、可视化与告警链路:
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 用于日常巡检?
- 是否已建立巡检频率与值班响应流程的对应关系?
- 是否已对巡检工具进行压力测试,避免监控系统自身成为瓶颈?