5、exporter之memcachedExporter

1、memcachedExporter安装及配置

以下是使用 Prometheus + memcached_exporter 监控 Memcached 集群的详细安装及配置步骤:

一、环境准备

系统要求:CentOS 7/8 或 Ubuntu(本文以 CentOS 7 为例)。
依赖工具wgettarsystemd(用于服务管理)。
下载地址
memcached_exporter 官方仓库(基于 Go 语言开发,支持多平台二进制文件)。

二、安装 memcached_exporter

1. 下载并解压二进制文件

bash

# 进入安装目录(可选)
mkdir -p /usr/local/prometheus-exporters
cd /usr/local/prometheus-exporters

# 下载对应系统的二进制文件(以 Linux amd64 为例)
wget https://github.com/prometheus/memcached_exporter/releases/download/v1.0.0/memcached_exporter-1.0.0.linux-amd64.tar.gz

# 解压
tar -zxvf memcached_exporter-1.0.0.linux-amd64.tar.gz
mv memcached_exporter-1.0.0.linux-amd64 memcached_exporter
2. 验证安装

bash

# 查看版本
cd memcached_exporter
./memcached_exporter --version
# 输出类似:memcached_exporter, version 1.0.0 (branch: , revision: )

三、配置 memcached_exporter

1. 基本参数说明
参数 描述
--web.listen-address 监听地址和端口(默认::9107)。
--memcached.server Memcached 节点地址(格式:host:port,支持多个节点,用逗号分隔)。
--web.telemetry-path 指标访问路径(默认:/metrics)。
--log.level 日志级别(infodebug 等,默认:info)。
2. 单节点配置示例

bash

# 直接指定单个 Memcached 节点(如本地 11211 端口)
./memcached_exporter --memcached.server="127.0.0.1:11211"
3. 多节点集群配置(以 3 节点为例)

bash

# 监听 0.0.0.0:9107,监控 3 个 Memcached 节点
./memcached_exporter 
  --web.listen-address="0.0.0.0:9107" 
  --memcached.server="192.168.1.101:11211,192.168.1.102:11211,192.168.1.103:11211"
4. 通过配置文件指定节点(推荐)

创建配置文件 memcached_exporter.yml

yaml

memcached_servers:
  - "192.168.1.101:11211"
  - "192.168.1.102:11211"
  - "192.168.1.103:11211"

启动时指定配置文件:

bash

./memcached_exporter --config.file="memcached_exporter.yml"

四、设置系统服务(systemd)

1. 创建服务文件

bash

vi /etc/systemd/system/memcached_exporter.service

写入以下内容(根据实际路径修改):

ini

[Unit]
Description=Memcached Exporter for Prometheus
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/prometheus-exporters/memcached_exporter
ExecStart=/usr/local/prometheus-exporters/memcached_exporter/memcached_exporter 
  --web.listen-address="0.0.0.0:9107" 
  --memcached.server="192.168.1.101:11211,192.168.1.102:11211,192.168.1.103:11211"
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
2. 重载 systemd 并启动服务

bash

systemctl daemon-reload
systemctl enable memcached_exporter
systemctl start memcached_exporter
3. 验证服务状态

bash

systemctl status memcached_exporter
# 正常运行时应显示 "active (running)"

五、配置 Prometheus 抓取指标

1. 修改 Prometheus 配置文件

编辑 prometheus.yml(默认路径:/etc/prometheus/prometheus.yml),添加以下内容:

yaml

scrape_configs:
  - job_name: 'memcached'
    static_configs:
      - targets: ['192.168.1.101:9107', '192.168.1.102:9107', '192.168.1.103:9107']  # memcached_exporter 地址
    metrics_path: '/metrics'
    scrape_interval: 15s  # 抓取间隔(可自定义)
2. 重启 Prometheus

bash

systemctl restart prometheus
3. 验证指标是否抓取成功

访问 Prometheus 控制台(默认地址:http://localhost:9090),在 Status > Targets 中查看 memcached 任务状态是否为 up
在 Graph 页面输入任意指标(如 memcached_uptime_seconds),点击 Execute 查看返回结果。

六、常用监控指标

指标名称 描述
memcached_uptime_seconds Memcached 运行时间(秒)。
memcached_items_total 存储的 item 总数。
memcached_bytes 存储的数据总字节数。
memcached_get_hits GET 请求命中次数。
memcached_get_misses GET 请求未命中次数(命中率 = hits / (hits + misses))。
memcached_bytes_read 读取的数据总字节数。
memcached_bytes_written 写入的数据总字节数。
memcached_connection_count 当前连接数。
memcached_limit_maxbytes 最大内存限制(字节)。

七、Grafana 可视化配置

1. 安装 Grafana(可选)

bash

# CentOS 7 安装命令
yum install -y https://dl.grafana.com/oss/release/grafana-9.5.8-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
2. 配置数据源

访问 Grafana 控制台(http://localhost:3000,默认账号 / 密码:admin/admin)。
进入 Configuration > Data Sources,添加 Prometheus 数据源,地址填写 Prometheus 服务地址(如 http://prometheus-server:9090)。

3. 导入 Memcached 监控仪表盘

在 Grafana 官网搜索 Memcached 监控仪表盘 ID(例如:ID 11367)。
进入 + > Import,输入仪表盘 ID,选择数据源后即可查看可视化图表。

八、常见问题处理

无法连接 Memcached 节点

检查 --memcached.server 参数是否正确,确保 Memcached 节点 IP / 端口可达。
确认 Memcached 节点允许 exporter 所在服务器的 IP 访问(关闭防火墙或添加规则)。

指标未显示或为空

检查 memcached_exporter 日志(systemctl status memcached_exporter),查看是否有连接错误。
确保 Prometheus 配置中的 targets 与 memcached_exporter 的监听地址一致。

性能影响

memcached_exporter 资源消耗极低,但若监控节点过多,可适当调整 scrape_interval(如从 15s 改为 30s)。

通过以上步骤,可快速实现对 Memcached 集群的监控,结合 Prometheus 和 Grafana 实时查看性能指标,及时发现内存瓶颈、缓存命中率低等问题。

2、memcachedExporter的工作原理?

Memcached Exporter 是用于监控 Memcached 服务的工具,通常基于 Prometheus 生态的 Exporter 框架开发(如使用 Go 语言编写的 memcached_exporter)。它的核心工作原理是通过 主动抓取 Memcached 服务的统计信息,并将其转换为 Prometheus 可识别的指标格式,供 Prometheus 服务器拉取和监控。以下是其详细工作原理:

一、核心功能:获取 Memcached 统计信息

Memcached 本身提供了一组 stats 命令,用于返回服务的运行状态和统计数据(如内存使用、请求次数、命中率等)。Exporter 的核心工作就是通过网络连接到 Memcached 实例,执行 stats 命令,并解析返回结果。

1. stats 命令返回的关键指标

常见指标包括:

指标名称 含义描述
curr_connections 当前打开的连接数
cmd_get 执行 get 请求的总数
cmd_set 执行 set 请求的总数
get_hits get 请求命中缓存的次数
get_misses get 请求未命中缓存的次数
bytes 缓存中存储的数据总字节数
evictions 因内存不足被逐出的缓存项数量
uptime Memcached 运行的总秒数

二、工作流程:从抓取到暴露指标

Memcached Exporter 的工作流程可分为以下步骤:

1. 初始化配置

Exporter 启动时读取配置文件(如 YAML 或命令行参数),获取要监控的 Memcached 实例地址、端口、认证信息(如有)等。
示例配置(通过命令行指定监控目标):

bash

./memcached_exporter --memcached.addr=memcached-server:11211
2. 建立连接并抓取数据

Exporter 周期性地(默认间隔可配置)通过 TCP 连接到 Memcached 实例,发送 stats 命令。
解析 stats 命令的响应结果,将其转换为 Prometheus 指标的 键值对格式(如 memcached_get_hits{instance="memcached-server:11211"} 100)。

3. 处理特殊指标

部分指标需要进一步计算或转换:

命中率:通过 get_hits 和 get_misses 计算得出(get_hits / (get_hits + get_misses))。
内存利用率:结合 bytes 和 limit_maxbytes(Memcached 配置的最大内存)计算。

这些衍生指标会被重新命名并暴露为独立的 Prometheus 指标。

4. 暴露指标供 Prometheus 拉取

Exporter 启动一个 HTTP 服务(默认端口为 9107),在 /metrics 端点返回所有转换后的指标。
Prometheus 服务器通过配置 scrape_configs 定期从该端点拉取数据,例如:

yaml

scrape_configs:
  - job_name: 'memcached'
    static_configs:
      - targets: ['exporter-server:9107']  # Exporter 所在服务器地址

三、关键特性与扩展

1. 多实例监控

Exporter 支持同时监控多个 Memcached 实例,只需在配置中添加多个 --memcached.addr 参数或通过文件配置:

bash

./memcached_exporter --memcached.addr=instance1:11211 --memcached.addr=instance2:11211

每个实例的指标通过 instance 标签区分,便于 Prometheus 分组和聚合。

2. 身份验证支持

若 Memcached 启用了认证(如通过 SASL),Exporter 可配置用户名和密码:

bash

./memcached_exporter --memcached.username=user --memcached.password=pass
3. 指标过滤与自定义

部分 Exporter 支持通过配置文件过滤不需要的指标,或添加自定义指标逻辑(需修改代码或使用插件)。

四、与 Prometheus 生态的集成

数据存储与展示

Prometheus 拉取指标后,存储在时间序列数据库中。
通过 Grafana 等工具加载 Prometheus 数据源,使用预设或自定义仪表盘展示 Memcached 监控数据(如命中率趋势、内存使用峰值等)。

告警机制

通过 Prometheus Alertmanager 配置告警规则,例如:

yaml

alert: MemcachedHighEvictions
expr: memcached_evictions > 100  # 逐出次数超过阈值
labels:
  severity: warning
annotations:
  summary: "Memcached 实例 {
               { $labels.instance }} 逐出次数过高"

五、常见实现方案对比

工具名称 语言 特点
prometheus/memcached_exporter Go 官方维护,轻量级,支持多实例,原生集成 Prometheus。
memcached-exporter Python 支持更多自定义配置和扩展,适合复杂监控场景。

总结

Memcached Exporter 的核心价值在于将 Memcached 的内部状态转化为标准化的监控指标,降低了接入 Prometheus 监控体系的门槛。其工作原理简单直接:通过 stats 命令获取原始数据,转换为 Prometheus 指标格式,并通过 HTTP 服务暴露。这一流程使得用户能够轻松实现对 Memcached 集群的性能分析、故障排查和容量规划。

3、memcachedExporter提供了哪些监控指标以及通过PromQL如何查询这些指标以及如何配置alertManager告警?

以下是关于 Memcached Exporter 提供的监控指标、PromQL 查询示例及 Alertmanager 告警配置的详细说明:

一、Memcached Exporter 核心监控指标

Memcached Exporter 将 stats 命令的结果转换为 Prometheus 指标,主要包含以下几类指标(以官方 Go 版本为例):

1. 基础运行指标
指标名称 含义描述
memcached_uptime_seconds Memcached 运行总时长(秒)
memcached_version Memcached 版本号
memcached_curr_connections 当前活动连接数
memcached_total_connections 累计创建的连接数
memcached_listen_disabled_num 因达到最大连接数而被拒绝的连接数
2. 请求与命中指标
指标名称 含义描述
memcached_cmd_get 累计 get 请求次数
memcached_cmd_set 累计 set 请求次数
memcached_get_hits get 请求命中缓存的次数
memcached_get_misses get 请求未命中缓存的次数
memcached_get_expired get 请求命中已过期缓存的次数(仅部分版本支持)
memcached_get_flushed get 请求命中被 flush 清理的缓存次数(仅部分版本支持)
3. 内存与缓存指标
指标名称 含义描述
memcached_bytes 缓存中存储的数据总字节数
memcached_curr_items 当前缓存中的 item 数量
memcached_total_items 累计存储的 item 数量
memcached_limit_maxbytes 配置的最大内存容量(字节)
memcached_evictions 因内存不足被逐出的 item 数量
memcached_reclaimed 已回收的过期 item 数(通过 LRU 机制)
4. 操作与效率指标
指标名称 含义描述
memcached_bytes_read 从网络读取的总字节数
memcached_bytes_written 向网络写入的总字节数
memcached_cmd_flush 累计 flush 命令执行次数
memcached_threads 线程池中的线程数(仅部分版本支持)
5. 衍生指标(通过 PromQL 计算)
指标名称 计算方式
缓存命中率 (memcached_get_hits / (memcached_get_hits + memcached_get_misses)) * 100
内存利用率 (memcached_bytes / memcached_limit_maxbytes) * 100
逐出速率(每分钟) rate(memcached_evictions[5m]) * 60

二、PromQL 查询示例

以下是常见监控场景的 PromQL 查询语句,可在 Prometheus 控制台或 Grafana 中使用:

1. 基础运行状态

查询 Memcached 运行时长

promql

memcached_uptime_seconds

查询当前连接数

promql

memcached_curr_connections
2. 请求与命中分析

查询过去 5 分钟内的平均 get 请求速率

promql

rate(memcached_cmd_get[5m])

计算缓存命中率(百分比)

promql

round((sum by(instance) (memcached_get_hits) / sum by(instance) (memcached_get_hits + memcached_get_misses)) * 100, 2)

查询未命中次数突然增加的实例(对比前 5 分钟):

promql

increase(memcached_get_misses[1m]) > 2 * increase(memcached_get_misses[5m])
3. 内存与缓存压力

查询内存利用率

promql

(memcached_bytes / memcached_limit_maxbytes) * 100

查询过去 1 小时内的逐出速率(次 / 分钟)

promql

rate(memcached_evictions[1h]) * 60

查询当前缓存 item 数超过阈值的实例(如阈值设为 10 万):

promql

memcached_curr_items > 1e5
4. 性能与吞吐量

查询网络 I/O 速率(字节 / 秒)

promql

rate(memcached_bytes_read[5m]) + rate(memcached_bytes_written[5m])

查询 set 请求速率是否超过峰值(如 1000 次 / 秒):

promql

rate(memcached_cmd_set[1m]) > 1000

三、Alertmanager 告警配置示例

通过 Prometheus 的 rules.yml 配置告警规则,然后由 Alertmanager 触发通知(如邮件、Slack 等)。以下是常见告警规则:

1. 缓存命中率过低

yaml

groups:
- name: memcached_hits_alert
  rules:
  - alert: MemcachedLowHitRate
    expr: (memcached_get_hits / (memcached_get_hits + memcached_get_misses)) * 100 < 70
    for: 5m  # 持续 5 分钟触发告警
    labels:
      severity: warning
    annotations:
      summary: "Memcached 实例 {
           { $labels.instance }} 命中率过低"
      description: "当前命中率为 {
           { $value | humanize }}%,低于阈值 70%"
2. 内存利用率过高

yaml

- name: memcached_memory_alert
  rules:
  - alert: MemcachedHighMemoryUsage
    expr: (memcached_bytes / memcached_limit_maxbytes) * 100 > 90
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "Memcached 实例 {
           { $labels.instance }} 内存不足"
      description: "当前内存利用率为 {
           { $value | humanize }}%,超过阈值 90%"
3. 频繁逐出缓存项

yaml

- name: memcached_evictions_alert
  rules:
  - alert: MemcachedFrequentEvictions
    expr: rate(memcached_evictions[1h]) * 60 > 100  # 每小时逐出超过 100 次
    for: 1h
    labels:
      severity: warning
    annotations:
      summary: "Memcached 实例 {
           { $labels.instance }} 逐出频繁"
      description: "当前逐出速率为 {
           { $value | humanize }} 次/小时,可能存在内存瓶颈"
4. 连接数达到上限

yaml

- name: memcached_connection_alert
  rules:
  - alert: MemcachedMaxConnectionsReached
    expr: memcached_listen_disabled_num > 0
    for: 2m
    labels:
      severity: error
    annotations:
      summary: "Memcached 实例 {
           { $labels.instance }} 拒绝连接"
      description: "因连接数达到上限,已拒绝 {
           { $value }} 次连接"

四、配置步骤总结

在 Prometheus 中添加 Exporter 监控目标

yaml

# prometheus.yml
scrape_configs:
  - job_name: 'memcached'
    static_configs:
      - targets: ['memcached-exporter:9107']  # Exporter 地址和端口

加载告警规则

在 Prometheus 配置中指定规则文件路径:

yaml

rule_files:
  - "rules/memcached_rules.yml"  # 告警规则文件路径

重启 Prometheus 使配置生效。

配置 Alertmanager

定义通知渠道(如邮件、Webhook 等),参考 Alertmanager 官方文档。
确保 Prometheus 已正确配置 alerting 部分指向 Alertmanager 地址。

五、扩展建议

使用 Grafana 可视化

导入 Memcached 监控仪表盘(如 Grafana 仪表盘 ID 11377),快速查看关键指标趋势。

多集群标签管理

通过 instance 或自定义标签(如 cluster=prod)区分不同环境的 Memcached 实例,便于告警分组和过滤。

动态发现实例

若 Memcached 实例动态变化,可使用服务发现机制(如 Kubernetes、Consul)替代静态配置,提升监控灵活性。

通过以上指标、查询和告警配置,可全面监控 Memcached 的运行状态,及时发现性能瓶颈和异常情况。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
黒松錄的头像 - 宋马
评论 抢沙发

请登录后发表评论

    暂无评论内容