Prometheus 监控 Memcached 全栈实战:从命中率到连接风暴的实时可观测性
Prometheus 监控 Memcached 全栈实战:从命中率到连接风暴的实时可观测性
Memcached 是高速缓存层的经典选择,它的命中率、内存利用率、连接数和驱逐速率直接影响网站响应速度和数据库压力。Prometheus 通过官方的 memcached_exporter 将 Memcached 的 stats 命令输出转化为标准化指标,让缓存层的健康状态透明、可量化、可告警。本文将带你从零部署到生产级告警,全面掌握 Memcached 的可观测性。
1. 部署 memcached_exporter
prometheus/memcached_exporter 是官方维护的导出器,支持连接单个或多个 Memcached 实例,默认暴露端口 9150。
1.1 二进制部署
wget https://github.com/prometheus/memcached_exporter/releases/download/v0.14.2/memcached_exporter-0.14.2.linux-amd64.tar.gz
tar xzf memcached_exporter-0.14.2.linux-amd64.tar.gz
cd memcached_exporter-0.14.2.linux-amd64
启动并指定 Memcached 地址:
./memcached_exporter --memcached.address=localhost:11211
若要监控多个实例,可启动多个 exporter,或使用 --memcached.address 多次指定(某些版本支持逗号分隔)。
1.2 Docker 部署
docker run -d \
--name memcached_exporter \
-p 9150:9150 \
prom/memcached-exporter:v0.14.2 \
--memcached.address=host.docker.internal:11211 # 根据实际情况调整
访问 http://localhost:9150/metrics,能看到以 memcached_ 开头的指标即为成功。
2. 配置 Prometheus 抓取
scrape_configs:
- job_name: 'memcached'
scrape_interval: 15s
static_configs:
- targets:
- '10.0.0.70:9150'
labels:
instance: 'cache-01'
env: 'production'
3. 核心指标与 PromQL
Memcached 的指标简洁但至关重要,以下按维度分类:
| 分类 | 关键指标 | 含义 | PromQL 示例 |
|---|---|---|---|
| 存活 | memcached_up |
1 = 可连接 | 直接告警 |
| 命中率 | memcached_get_hits_totalmemcached_get_misses_total |
命中与未命中次数 | rate(memcached_get_hits_total[1m]) / (rate(memcached_get_hits_total[1m]) + rate(memcached_get_misses_total[1m])) * 100 |
| 命令速率 | memcached_commands_total (带 command 标签) |
各命令的执行次数 | rate(memcached_commands_total{command="get"}[1m]) |
| 连接数 | memcached_current_connections |
当前连接数 | 直接与最大连接数对比 |
| 内存使用 | memcached_current_bytesmemcached_limit_bytes |
当前使用内存 / 最大限制 | memcached_current_bytes / memcached_limit_bytes * 100 |
| 驱逐 | memcached_evictions_total |
因内存满被驱逐的对象总数 | rate(memcached_evictions_total[5m]) > 0 说明内存不足 |
| 项目统计 | memcached_current_itemsmemcached_total_items |
当前存储对象数 / 累计存储对象数 | 注意对象数变化趋势 |
| 系统 | memcached_uptime_secondsmemcached_threads |
运行时间、线程数 | 运行时间用于计算重启事件 |
| 网络 | memcached_bytes_read_totalmemcached_bytes_written_total |
网络字节流量 | rate(memcached_bytes_read_total[1m]) * 8 得 bps |
| 删除/过期 | memcached_delete_hits_total / memcached_delete_misses_total |
删除命中与未命中 | 辅助分析 |
关键告警计算:
- 内存使用率:
memcached_current_bytes / memcached_limit_bytes超过 0.85 需扩容。 - 驱逐速率:
rate(memcached_evictions_total[5m]) > 0立即可见内存紧张。
4. Grafana 仪表盘推荐
- Memcached Full Dashboard:ID 11506(Prometheus Memcached),覆盖命中率、内存、连接、命令速率、网络等。
- Memcached Exporter Quickstart:ID 9428,轻量简洁。
导入后选择数据源并绑定 instance 变量即可。
5. 告警规则实战
groups:
- name: memcached_alerts
rules:
- alert: MemcachedDown
expr: memcached_up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Memcached 实例 {{ $labels.instance }} 不可达"
- alert: MemcachedHighMemoryUsage
expr: memcached_current_bytes / memcached_limit_bytes > 0.85
for: 5m
labels:
severity: warning
annotations:
summary: "Memcached 内存使用率超过 85%"
- alert: MemcachedEvictions
expr: rate(memcached_evictions_total[5m]) > 0
for: 1m
labels:
severity: critical
annotations:
summary: "Memcached 发生内存驱逐,缓存对象被强制淘汰"
- alert: MemcachedHitRateLow
expr: rate(memcached_get_hits_total[5m]) / (rate(memcached_get_hits_total[5m]) + rate(memcached_get_misses_total[5m])) < 0.5
for: 10m
labels:
severity: warning
annotations:
summary: "Memcached 缓存命中率低于 50%"
- alert: MemcachedTooManyConnections
expr: memcached_current_connections > 1000 # 根据实际容量设定
for: 5m
labels:
severity: warning
annotations:
summary: "Memcached 连接数超过 1000"
根据需要可加入 memcached_commands_total 异常波动告警。
6. 进阶:监控集群和多实例
-
多个独立 Memcached 实例:可在同一 exporter 中指定多个
--memcached.address(exporter v0.9+ 支持),此时指标带有addr标签区分。./memcached_exporter --memcached.address=192.168.1.10:11211 --memcached.address=192.168.1.11:11211然后在 Prometheus 中抓取该 exporter 即可看到多个实例的指标集合。
-
Memcached 集群(如 mcrouter):通常监控每个节点即可,也可通过 mcrouter 的 stats 暴露指标。
-
安全性:如果 Memcached 启用 SASL 认证(较少见),exporter 支持
--memcached.username和--memcached.password参数。建议将 Memcached 绑定内网 IP,并限制 9150 端口仅 Prometheus 访问。
部署完成后,Memcached 就不再是一个黑盒缓存。内存即将耗尽、命中率陡降、连接风暴……一切异常都会在 Grafana 面板中直观呈现,并第一时间触发告警,让你在数据库被压垮之前从容扩容或优化缓存策略。这套 Prometheus 监控体系让你的缓存层真正实现可观测、可预测、可自愈。
更多推荐




所有评论(0)