1、memcachedExporter安装及配置
以下是使用 Prometheus + memcached_exporter 监控 Memcached 集群的详细安装及配置步骤:
一、环境准备
系统要求:CentOS 7/8 或 Ubuntu(本文以 CentOS 7 为例)。
依赖工具:wget、tar、systemd(用于服务管理)。
下载地址:
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 |
日志级别(info、debug 等,默认: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 的运行状态,及时发现性能瓶颈和异常情况。















暂无评论内容