搭建属于你自己的 Redis 监控中心:Grafana + Prometheus + redis_exporter 深度教程
序言:为什么需要监控 Redis?
在现代应用架构中,Redis 作为一款高性能的内存数据结构存储系统,常被用作数据库、缓存和消息代理。它的速度和灵活性使其成为许多关键业务的核心组件。然而,正如任何重要的系统一样,Redis 也需要细致的监控。
没有有效的监控,你可能会遇到以下问题:
- 性能瓶颈难以发现: Redis 内存使用过高导致 OOM、连接数过多耗尽资源、命令执行缓慢(如 O(N) 操作)、高并发下的 QPS 压力。
- 潜在的故障风险: 主从同步延迟、持久化失败、节点不可用等问题可能导致数据丢失或服务中断。
- 资源规划不当: 不清楚 Redis 的实际负载,无法合理分配内存、CPU、网络资源,导致资源浪费或不足。
- 问题排查效率低下: 发生故障时,没有历史数据和实时指标,只能“盲人摸象”,延长故障恢复时间。
通过构建一个强大的监控系统,我们可以实时了解 Redis 的运行状况、发现潜在问题、优化性能并进行容量规划。本文将详细介绍如何使用 Grafana 作为可视化平台,Prometheus 作为时间序列数据库,以及 redis_exporter 作为指标采集器,从零开始搭建一套完整的 Redis 监控系统。
核心组件介绍
在深入搭建过程之前,我们先了解一下这三个核心组件的作用:
- redis_exporter: 这是一个专门为 Redis 设计的 Prometheus exporter。它连接到 Redis 实例,通过执行
INFO
等命令获取各种内部指标(如内存使用、连接数、命令统计、持久化状态、主从同步信息等),并将这些指标转换成 Prometheus 可以理解和抓取的格式。 - Prometheus: 一个开源的系统监控和告警工具包。Prometheus 通过 HTTP 协议“拉取”(scrape)各个 exporter(包括 redis_exporter)暴露的指标数据,并将其存储在自己的时间序列数据库中。它还提供了强大的查询语言 PromQL,用于分析这些指标。
- Grafana: 一个开源的数据可视化和分析平台。Grafana 可以连接到各种数据源(如 Prometheus、InfluxDB、Elasticsearch 等),通过灵活的面板(Panel)和仪表盘(Dashboard)将数据转化为直观的图表和图形,帮助用户理解系统的运行状况。
这三个组件协同工作,构成了一个高效、灵活且广泛应用的监控解决方案:redis_exporter
采集数据 -> Prometheus 存储和查询数据 -> Grafana 可视化数据。
环境准备
在开始搭建之前,请确保你拥有以下环境和条件:
- 一台或多台运行 Redis 的服务器: 这是我们监控的目标。假设 Redis 已经在运行,并且你可以访问它的 IP 地址和端口(通常是 6379)。如果 Redis 设置了密码,需要记下密码。
- 一台用于安装 Prometheus 和 Grafana 的服务器: 最好是一台独立的服务器,或者与 Redis 服务器不同,以避免监控系统本身影响 Redis 性能。这台服务器需要能够访问 Redis 服务器的网络。
- 操作系统: 建议使用 Linux 发行版,如 CentOS 7/8, Ubuntu LTS 版本。本文的命令将主要基于 systemd 系统,适用于大多数现代 Linux 发行版。
- 用户权限: 拥有 root 或 sudo 用户权限,以便安装软件、创建文件和管理服务。
- 网络连通性: 确保安装 Prometheus 和 Grafana 的服务器可以访问 Redis 服务器的 6379 端口(如果自定义了端口,则是对应端口),以及可以访问互联网以下载所需的软件。同时,需要规划好 Prometheus (默认 9090) 和 Grafana (默认 3000) 的访问端口,并确保防火墙允许外部访问这些端口(如果需要从外部访问监控面板)。
- 基础知识: 对 Linux 命令行、基本网络概念(IP地址、端口)、文本编辑器(vi/nano)有基本了解。
我们将在这台用于安装 Prometheus 和 Grafana 的服务器上进行大部分操作。
搭建步骤详解
我们将按照以下顺序逐步进行:
- 安装和配置
redis_exporter
- 安装和配置 Prometheus
- 安装和配置 Grafana
- 在 Grafana 中添加 Prometheus 数据源
- 导入或创建 Redis 监控 Dashboard
步骤 1:安装和配置 redis_exporter
redis_exporter
需要安装在能够连接到 Redis 实例的服务器上。如果 Redis 实例很多,你可能需要在每台 Redis 服务器上都安装一个 redis_exporter
,或者在一台机器上运行多个 redis_exporter
实例,分别连接不同的 Redis。为了简化教程,我们假设在一台服务器上监控一个 Redis 实例,并将 redis_exporter
安装在这台服务器上。
1.1 下载 redis_exporter
访问 redis_exporter
的 GitHub Releases 页面 (https://github.com/oliver006/redis_exporter/releases) 找到最新版本。选择与你的服务器架构(如 amd64
)和操作系统(linux
)匹配的二进制文件。
“`bash
以 v1.65.0 版本为例,请根据实际情况选择最新版本
REDIS_EXPORTER_VERSION=”1.65.0″
ARCH=”amd64″ # 或者 arm64 等
wget “https://github.com/oliver006/redis_exporter/releases/download/v${REDIS_EXPORTER_VERSION}/redis_exporter-${REDIS_EXPORTER_VERSION}.linux-${ARCH}.tar.gz”
解压
tar -xzf “redis_exporter-${REDIS_EXPORTER_VERSION}.linux-${ARCH}.tar.gz”
进入解压后的目录
cd “redis_exporter-${REDIS_EXPORTER_VERSION}.linux-${ARCH}”
你会看到一个名为 redis_exporter 的可执行文件
ls
“`
1.2 创建用户和目录
为了安全起见,我们为 redis_exporter
创建一个专门的用户,并将其可执行文件放置到系统路径下。
“`bash
创建 redis_exporter 用户,不允许登录
useradd –no-create-home –shell /bin/false redis_exporter
创建存放 exporter 二进制文件的目录
mkdir /usr/local/bin
将可执行文件复制到 /usr/local/bin
cp redis_exporter /usr/local/bin/
“`
1.3 配置 systemd 服务
使用 systemd 管理 redis_exporter
进程,使其能够开机自启和方便管理。创建一个服务文件:
bash
sudo vi /etc/systemd/system/redis_exporter.service
粘贴以下内容,并根据你的 Redis 配置进行修改(主要是 ExecStart
中的 redis.addr
和 redis.password
)。
“`ini
[Unit]
Description=Prometheus Redis Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=redis_exporter
Group=redis_exporter
Type=simple
ExecStart=/usr/local/bin/redis_exporter –redis.addr “localhost:6379” –redis.password “your_redis_password”
如果没有密码,删除 –redis.password “your_redis_password” 参数
如果Redis在其他服务器,将 “localhost:6379” 替换为 “redis_server_ip:6379”
如果需要监听其他端口,可以添加 –web.listen-address “:9122” 参数 (默认就是 9122)
WorkingDirectory=/
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
“`
重要提示:
* 将 "localhost:6379"
替换为你的 Redis 服务器 IP 地址和端口。
* 将 "your_redis_password"
替换为你的 Redis 密码。如果没有密码,请 删除 --redis.password "..."
整个参数。
* 在生产环境中,密码最好通过配置文件或环境变量传递,而不是直接写在 systemd 文件中,但为了简化教程,这里直接写入。更安全的方式是使用 --redis.password-file /path/to/password.txt
。
* --web.listen-address
参数指定 exporter 监听哪个地址和端口暴露指标。默认是 :9122
,监听所有网络接口的 9122 端口。如果只需要在本地访问(比如 Prometheus 和 redis_exporter 装在同一台机器上),可以改成 127.0.0.1:9122
。
保存并关闭文件。
1.4 启动并验证服务
重新加载 systemd 配置,启动服务,并设置为开机自启。
bash
sudo systemctl daemon-reload
sudo systemctl start redis_exporter
sudo systemctl enable redis_exporter
检查服务状态:
bash
sudo systemctl status redis_exporter
确保状态显示 active (running)
.
最后,验证 exporter 是否正在暴露指标。如果 Prometheus/Grafana 服务器可以访问到这台机器的 9122 端口(或者你配置的其他端口),可以通过 curl
或浏览器访问:
“`bash
curl http://localhost:9122/metrics # 如果 exporter 监听在 localhost
或
curl http://
“`
你应该看到大量的以 redis_
开头的文本输出,这就是 Prometheus 需要抓取的指标数据。
步骤 2:安装和配置 Prometheus
现在我们在监控服务器上安装 Prometheus,让它去抓取 redis_exporter
暴露的指标。
2.1 下载 Prometheus
访问 Prometheus 的下载页面 (https://prometheus.io/download/),找到最新版本的二进制文件。
“`bash
以 v2.48.0 版本为例,请根据实际情况选择最新版本
PROMETHEUS_VERSION=”2.48.0″
ARCH=”amd64″ # 或者 arm64 等
wget “https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}.tar.gz”
解压
tar -xzf “prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}.tar.gz”
进入解压后的目录
cd “prometheus-${PROMETHEUS_VERSION}.linux-${ARCH}”
你会看到 prometheus 和 promtool 可执行文件,以及 consoles 和 console_libraries 目录,还有 prometheus.yml 配置文件示例
ls
“`
2.2 创建用户和目录
为 Prometheus 创建用户,并创建必要的目录。
“`bash
创建 prometheus 用户,不允许登录
useradd –no-create-home –shell /bin/false prometheus
创建存放 Prometheus 配置、数据和二进制文件的目录
mkdir /etc/prometheus /var/lib/prometheus /usr/local/bin
将可执行文件复制到 /usr/local/bin
cp prometheus promtool /usr/local/bin/
将示例配置文件和控制台文件复制到 /etc/prometheus
cp prometheus.yml /etc/prometheus/
cp -r consoles/ console_libraries/ /etc/prometheus/
“`
2.3 配置 Prometheus
修改 Prometheus 的配置文件 /etc/prometheus/prometheus.yml
,告诉它去哪里抓取 redis_exporter
的数据。
bash
sudo vi /etc/prometheus/prometheus.yml
文件内容如下,我们需要在 scrape_configs
部分添加一个 Job 来抓取 redis_exporter
:
“`yaml
global:
scrape_interval: 15s # 设置抓取间隔为 15 秒
evaluation_interval: 15s # 设置规则评估间隔
Alertmanager configuration
如果需要配置告警,可以在这里添加
alerting:
alertmanagers:
– static_configs:
– targets:
# – alertmanager:9093
Load rules once and periodically evaluate them according to the global ‘evaluation_interval’.
rule_files:
– “first_rules.yml”
– “second_rules.yml”
A list of scrape configurations.
scrape_configs:
# Prometheus 自己的监控,默认存在
– job_name: “prometheus”
static_configs:
– targets: [“localhost:9090”] # 监控 Prometheus 自身
# 添加 Redis 监控 job
– job_name: “redis” # Job 名称,可以自定义
static_configs:
– targets: [“
# 如果 redis_exporter 监听在默认端口 9122,可以只写 IP
# 如果 redis_exporter 和 Prometheus 在同一台机器,且 exporter 监听 127.0.0.1:9122,则这里写 “127.0.0.1:9122”
# 如果你有多个 redis_exporter 实例(监控不同的 Redis),可以这样写:
# – targets:
# – “redis_exporter_server_ip1:9122”
# – “redis_exporter_server_ip2:9122”
# – “another_redis_server_ip:9123” # 不同的端口,如果 exporter 监听不同端口
“`
重要提示:
* 在 scrape_configs
下添加一个新的 job_name: "redis"
。
* 在 targets
中填写 redis_exporter
实际监听的 IP 地址和端口。这个 IP 应该是 Prometheus 服务器能够访问到的 IP。
保存并关闭文件。
2.4 配置 systemd 服务
为 Prometheus 创建一个 systemd 服务文件:
bash
sudo vi /etc/systemd/system/prometheus.service
粘贴以下内容:
“`ini
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
–config.file /etc/prometheus/prometheus.yml \
–storage.tsdb.path /var/lib/prometheus/ \
–web.console.templates=/etc/prometheus/consoles \
–web.console.libraries=/etc/prometheus/console_libraries \
–web.listen-address=”:9090″ # Prometheus 监听的地址和端口,默认 9090
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
“`
保存并关闭文件。
2.5 启动并验证服务
重新加载 systemd 配置,启动 Prometheus 服务,并设置为开机自启。
bash
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
检查服务状态:
bash
sudo systemctl status prometheus
确保状态显示 active (running)
.
验证 Prometheus 是否成功抓取 redis_exporter
的指标:
在浏览器中访问 Prometheus 的 Web UI:http://<prometheus_server_ip>:9090
。
点击顶部菜单的 “Status” -> “Targets”。你应该能看到一个名为 redis
的 Job,其 State 应该是 UP
,表示 Prometheus 成功连接到了 redis_exporter
并正在抓取数据。
如果状态是 DOWN
,检查防火墙设置、redis_exporter
是否正在运行以及 prometheus.yml
中 targets
的 IP 和端口是否正确。
步骤 3:安装和配置 Grafana
现在我们在同一台监控服务器上安装 Grafana,它将连接到 Prometheus 并展示数据。
3.1 安装 Grafana
Grafana 官方提供了方便的包管理安装方式。以 Debian/Ubuntu 为例:
“`bash
添加 Grafana apt 仓库的 GPG 密钥
wget -q -O – https://apt.grafana.com/gpg.key | sudo apt-key add –
添加 Grafana stable 仓库 (如果你需要 beta/nightly 版本,请修改 grafana stable)
echo “deb https://apt.grafana.com stable main” | sudo tee /etc/apt/sources.list.d/grafana.list
更新 apt 缓存
sudo apt update
安装 Grafana
sudo apt install grafana
“`
对于基于 RHEL/CentOS 的系统 (使用 yum/dnf):
“`bash
添加 Grafana yum 仓库文件
cat <<EOF | sudo tee /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
安装 Grafana
sudo yum install grafana
或 sudo dnf install grafana (对于 CentOS 8+)
“`
3.2 启动并验证服务
Grafana 安装完成后,使用 systemd 启动并设置开机自启:
bash
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
检查服务状态:
bash
sudo systemctl status grafana-server
确保状态显示 active (running)
.
验证 Grafana Web UI:
在浏览器中访问 http://<grafana_server_ip>:3000
(默认端口)。你应该看到 Grafana 的登录页面。
默认用户名和密码都是 admin
。第一次登录后,系统会提示你修改密码。
步骤 4:在 Grafana 中添加 Prometheus 数据源
登录 Grafana 后,我们需要将 Prometheus 添加为数据源,这样 Grafana 才能从 Prometheus 获取 Redis 指标。
- 登录 Grafana: 使用默认凭据
admin/admin
登录。系统会提示你修改密码。 - 添加数据源:
- 点击左侧菜单栏的齿轮图标(Configuration)。
- 选择 “Data sources”。
- 点击 “Add data source” 按钮。
- 在数据源类型列表中选择 “Prometheus”。
- 配置数据源:
- Name: 给这个数据源起一个名字,比如
Prometheus
或Prometheus_Redis
。 - URL: 输入 Prometheus 服务器的地址和端口,例如
http://localhost:9090
(如果 Prometheus 在同一台机器) 或http://<prometheus_server_ip>:9090
。 - Access: 选择 “Server (default)”。
- 其他设置通常保持默认即可。
- Name: 给这个数据源起一个名字,比如
- 保存并测试:
- 点击页面底部的 “Save & test” 按钮。
- 如果配置正确,你应该看到 “Data source is working” 的提示。如果测试失败,检查 Prometheus 服务是否运行、防火墙设置以及填写的 URL 是否正确。
现在,Grafana 已经能够从 Prometheus 中拉取到 Redis 的指标数据了。
步骤 5:导入或创建 Redis 监控 Dashboard
这是最关键的一步,我们将把采集到的数据通过图表展示出来。有两种主要方式:导入预制的 Dashboard 或自己从零开始构建。
5.1 导入预制 Dashboard (推荐)
这是最快的方式,Grafana 社区提供了大量高质量的预制 Dashboard。
-
查找 Redis Dashboard: 访问 Grafana Labs 的 Dashboard 库网站:https://grafana.com/grafana/dashboards/
在搜索框中输入 “Redis”。你会看到很多与 Redis 相关的 Dashboard。
选择一个评价高、下载量大且描述符合你需求的 Dashboard。常见的优秀 Redis Dashboard ID 有:- 12884: Redis Overview by @oliver006 (通常与 redis_exporter 配合得很好)
- 763: Redis Monitoring by @hwchiu
- 11835: Redis Sentinel/Cluster by @redis
- 13546: Redis Dashboard by @Anmol-Verma
记住你选择的 Dashboard 的 ID (页面标题下面的数字)。
-
在 Grafana 中导入 Dashboard:
- 点击左侧菜单栏的加号图标(+)。
- 选择 “Import”。
- 在 “Import via grafana.com” 部分,输入你在上一步找到的 Dashboard ID。
- 点击 “Load”。
- Grafana 会加载 Dashboard 的配置信息。在 “Options” 部分:
- Name: 可以修改 Dashboard 的名称。
- Folder: 选择一个文件夹来组织 Dashboard (可选)。
- Prometheus: 重要! 在这里的下拉菜单中选择你刚刚添加的 Prometheus 数据源(例如,你命名为
Prometheus_Redis
的那个数据源)。
- 点击 “Import”。
导入成功后,你就会看到一个包含各种 Redis 指标图表的 Dashboard 页面。如果一切顺利,这些图表应该已经开始显示数据了。
5.2 从零开始创建 Dashboard (高级)
如果你对 PromQL 比较熟悉,或者需要高度定制化的监控,可以自己创建 Dashboard。
-
创建新的 Dashboard:
- 点击左侧菜单栏的加号图标(+)。
- 选择 “New Dashboard”。
- 点击 “Add visualization”。
-
配置 Panel (图表):
- 在 Panel 编辑界面,首先在右上角选择你之前配置的 Prometheus 数据源。
- 在 “Query” 标签页,你会看到一个查询编辑器。在这里输入 PromQL 查询语句来获取你想要的指标数据。
- 例如,要显示当前连接的客户端数量,PromQL 查询可能是:
redis_connected_clients
。 - 要显示内存使用情况(字节),查询可能是:
redis_memory_used_bytes
。 - 要显示每秒处理的命令数(QPS),可以使用
rate()
函数处理累积计数器:rate(redis_commands_processed_total[1m])
(表示过去 1 分钟内平均每秒的命令数)。 - 要显示缓存命中率,可以使用
rate()
函数计算命中和未命中的比例:(rate(redis_keyspace_hits_total[1m]) / (rate(redis_keyspace_hits_total[1m]) + rate(redis_keyspace_misses_total[1m]))) * 100
。
-
设置 Panel 属性:
- 在 “Transform” 标签页,可以对数据进行一些转换(例如,计算百分比)。
- 在 “Visualize” 标签页,选择图表类型(Graph, Stat, Gauge, Table 等)。
- 在右侧的各个标签页(如 Graph 中的 “Axes”, “Legend”, “Tooltip”, “Display” 等),配置图表的样式、单位、标题、坐标轴等。例如,对于内存,可以将单位设置为 “bytes(SI)”。对于命中率,单位设置为 “percent(0-100)”。
- 在 “General” 标签页,设置 Panel 的标题和描述。
-
重复添加 Panel:
- 配置完一个 Panel 后,点击右上角的 “Apply”。
- 然后点击右上角的保存图标来保存整个 Dashboard,或者点击左上角的返回箭头,然后在 Dashboard 页面点击保存按钮。
- 点击 “Add panel” -> “Add visualization” 重复上述步骤添加其他重要的 Redis 指标图表。
通过这种方式,你可以完全控制 Dashboard 的内容和布局。这需要你对 PromQL 和 Redis 的各项指标有较深入的理解。
重要的 Redis 监控指标
无论你是导入还是自建 Dashboard,以下是一些非常重要的 Redis 监控指标,应该包含在你的 Dashboard 中:
- 内存使用 (
redis_memory_used_bytes
): 核心指标,监控 Redis 当前占用的内存量。需要关注其趋势,防止 OOM。 - 连接客户端数 (
redis_connected_clients
): 当前连接到 Redis 的客户端数量。连接数过多可能耗尽文件描述符或导致 Redis 负载过高。 - 命令处理数/QPS (
redis_commands_processed_total
): 累积的命令处理总数。通常使用rate()
函数计算其变化率来得到 QPS (每秒查询数)。反映 Redis 的繁忙程度。 - 缓存命中率 (
redis_keyspace_hits_total
,redis_keyspace_misses_total
): 反映从缓存中获取数据的效率。低命中率可能意味着缓存策略不佳或数据分布不均。 - 网络流量 (
redis_network_input_bytes_total
,redis_network_output_bytes_total
): 监控流入和流出 Redis 的网络字节数。使用rate()
函数计算其速率。高网络流量可能与大量数据传输、慢查询或客户端行为异常有关。 - 阻塞客户端数 (
redis_blocked_clients
): 因执行阻塞命令(如BLPOP
)而被阻塞的客户端数量。 - 持久化状态 (
redis_aof_rewrite_in_progress
,redis_rdb_bgsave_in_progress
,redis_last_save_time_seconds
等): 监控 AOF 或 RDB 持久化过程是否正常进行,以及上次保存数据的时间。 - 主从复制状态 (
redis_master_link_up
,redis_master_repl_offset
,redis_slave_repl_offset
): 如果是主从架构,监控主从连接是否正常、复制延迟等。 - 键数量 (
redis_keys
): 数据库中的键总数。键过多可能影响性能。 - 过期键数量 (
redis_expired_keys_total
): 累积的过期键数量。使用rate()
函数观察其变化率。 - 逐出键数量 (
redis_evicted_keys_total
): 当内存达到上限且设置了 maxmemory 策略时,被逐出的键数量。使用rate()
函数观察其变化率。 - 慢查询数量 (
redis_slowlog_len
): 慢查询日志的长度。如果这个值持续增加,说明有慢查询存在,需要检查。 - 拒绝连接数量 (
redis_rejected_connections_total
): 因连接数达到 maxclients 限制而被拒绝的连接数量。
一个好的 Dashboard 应该能够将这些关键指标以易于理解的方式呈现出来,比如使用折线图展示趋势,使用 Stat 或 Gauge 图显示当前值,使用饼图展示内存使用分布等。
高级配置与注意事项
- 防火墙: 确保 Prometheus 服务器能够访问
redis_exporter
的端口 (默认 9122),以及你可以从外部访问 Grafana 的端口 (默认 3000) 和 Prometheus 的端口 (默认 9090)。使用防火墙工具 (如ufw
或firewalld
) 仅开放必要的端口,并限制访问来源 IP,增强安全性。 - 安全性:
- 修改 Grafana 的默认
admin
密码。 - 配置 Grafana 使用 HTTPS。
- Prometheus 和 exporters 默认没有认证,考虑将其绑定到本地地址 (
127.0.0.1
),并通过安全的代理(如 Nginx 或 Apache)进行访问,或者使用基于 TLS 和基本认证的 Scraping (配置稍复杂)。 - 确保 Redis 本身也设置了密码,并且防火墙限制了访问来源。
- 修改 Grafana 的默认
- 监控多个 Redis 实例: 如果你有多个 Redis 实例需要监控,可以在 Prometheus 的
prometheus.yml
文件中,在redis
这个job
下的targets
列表中添加多个redis_exporter
的地址和端口。如果你的 Redis 实例都运行在同一台服务器上,并且每个实例都配置了独立的redis_exporter
监听不同端口,则在targets
中列出这些不同的localhost:<port>
地址。如果 Redis 实例分布在不同服务器上,则列出对应的server_ip:<port>
。 - Prometheus 存储: 默认情况下,Prometheus 的数据存储在
/var/lib/prometheus
。随着时间推移,数据量会增长。Prometheus 有自己的数据保留策略(--storage.tsdb.retention.time
或--storage.tsdb.retention.size
参数)。对于长期存储和分析,你可能需要考虑远程存储集成(如 Graphite, OpenTSDB, M3DB, Thanos, Cortex 等)。 - Grafana 持久化: Grafana 的配置(数据源、Dashboard 等)默认存储在 SQLite 数据库中(
/var/lib/grafana/grafana.db
)。为了可靠性和扩展性,生产环境推荐配置 Grafana 使用外部数据库,如 PostgreSQL 或 MySQL。 - 告警: 虽然本文侧重于可视化,但监控的另一个重要方面是告警。你可以配置 Prometheus 的 Alertmanager 来发送告警通知(邮件、微信、Slack 等),或者在 Grafana 中直接配置告警规则(Alerting 功能)。基于关键指标设置阈值,例如内存使用超过80%、连接数异常、主从复制延迟过高等。
- 优化性能: 如果监控的 Redis 实例数量庞大,或者单个 Redis 实例 QPS 非常高,Prometheus 抓取数据可能会带来一定的负载。
redis_exporter
会定期执行INFO
命令,这是一个 O(1) 的操作,通常开销不大。但如果 Redis 实例负载极高,或者网络不稳定,可能会影响抓取。确保监控系统本身有足够的资源。
总结
通过本文的详细步骤,我们成功地搭建了一套基于 Grafana、Prometheus 和 redis_exporter 的 Redis 监控系统。我们安装并配置了各个组件,使 Prometheus 能够从 redis_exporter 拉取 Redis 指标,并将 Prometheus 添加为 Grafana 的数据源。最后,我们学习了如何导入或创建 Redis 监控 Dashboard,将关键指标可视化呈现。
这套系统为你提供了一个强大、灵活且开源的解决方案,帮助你深入了解 Redis 的运行状态,及时发现并解决潜在问题,确保你的应用架构更加健壮和高效。
监控是一个持续优化的过程。一旦你有了基础 Dashboard,接下来可以根据实际需求添加更多的指标、细化图表、设置告警规则,并根据业务变化调整监控策略。祝你在 Redis 监控之路上一切顺利!