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_total
memcached_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_bytes
memcached_limit_bytes
当前使用内存 / 最大限制 memcached_current_bytes / memcached_limit_bytes * 100
驱逐 memcached_evictions_total 因内存满被驱逐的对象总数 rate(memcached_evictions_total[5m]) > 0 说明内存不足
项目统计 memcached_current_items
memcached_total_items
当前存储对象数 / 累计存储对象数 注意对象数变化趋势
系统 memcached_uptime_seconds
memcached_threads
运行时间、线程数 运行时间用于计算重启事件
网络 memcached_bytes_read_total
memcached_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 监控体系让你的缓存层真正实现可观测、可预测、可自愈。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐