Grafana Redis 监控 Dashboard 搭建教程 – wiki基地


搭建属于你自己的 Redis 监控中心:Grafana + Prometheus + redis_exporter 深度教程

序言:为什么需要监控 Redis?

在现代应用架构中,Redis 作为一款高性能的内存数据结构存储系统,常被用作数据库、缓存和消息代理。它的速度和灵活性使其成为许多关键业务的核心组件。然而,正如任何重要的系统一样,Redis 也需要细致的监控。

没有有效的监控,你可能会遇到以下问题:

  1. 性能瓶颈难以发现: Redis 内存使用过高导致 OOM、连接数过多耗尽资源、命令执行缓慢(如 O(N) 操作)、高并发下的 QPS 压力。
  2. 潜在的故障风险: 主从同步延迟、持久化失败、节点不可用等问题可能导致数据丢失或服务中断。
  3. 资源规划不当: 不清楚 Redis 的实际负载,无法合理分配内存、CPU、网络资源,导致资源浪费或不足。
  4. 问题排查效率低下: 发生故障时,没有历史数据和实时指标,只能“盲人摸象”,延长故障恢复时间。

通过构建一个强大的监控系统,我们可以实时了解 Redis 的运行状况、发现潜在问题、优化性能并进行容量规划。本文将详细介绍如何使用 Grafana 作为可视化平台,Prometheus 作为时间序列数据库,以及 redis_exporter 作为指标采集器,从零开始搭建一套完整的 Redis 监控系统。

核心组件介绍

在深入搭建过程之前,我们先了解一下这三个核心组件的作用:

  1. redis_exporter: 这是一个专门为 Redis 设计的 Prometheus exporter。它连接到 Redis 实例,通过执行 INFO 等命令获取各种内部指标(如内存使用、连接数、命令统计、持久化状态、主从同步信息等),并将这些指标转换成 Prometheus 可以理解和抓取的格式。
  2. Prometheus: 一个开源的系统监控和告警工具包。Prometheus 通过 HTTP 协议“拉取”(scrape)各个 exporter(包括 redis_exporter)暴露的指标数据,并将其存储在自己的时间序列数据库中。它还提供了强大的查询语言 PromQL,用于分析这些指标。
  3. Grafana: 一个开源的数据可视化和分析平台。Grafana 可以连接到各种数据源(如 Prometheus、InfluxDB、Elasticsearch 等),通过灵活的面板(Panel)和仪表盘(Dashboard)将数据转化为直观的图表和图形,帮助用户理解系统的运行状况。

这三个组件协同工作,构成了一个高效、灵活且广泛应用的监控解决方案:redis_exporter 采集数据 -> Prometheus 存储和查询数据 -> Grafana 可视化数据。

环境准备

在开始搭建之前,请确保你拥有以下环境和条件:

  1. 一台或多台运行 Redis 的服务器: 这是我们监控的目标。假设 Redis 已经在运行,并且你可以访问它的 IP 地址和端口(通常是 6379)。如果 Redis 设置了密码,需要记下密码。
  2. 一台用于安装 Prometheus 和 Grafana 的服务器: 最好是一台独立的服务器,或者与 Redis 服务器不同,以避免监控系统本身影响 Redis 性能。这台服务器需要能够访问 Redis 服务器的网络。
  3. 操作系统: 建议使用 Linux 发行版,如 CentOS 7/8, Ubuntu LTS 版本。本文的命令将主要基于 systemd 系统,适用于大多数现代 Linux 发行版。
  4. 用户权限: 拥有 root 或 sudo 用户权限,以便安装软件、创建文件和管理服务。
  5. 网络连通性: 确保安装 Prometheus 和 Grafana 的服务器可以访问 Redis 服务器的 6379 端口(如果自定义了端口,则是对应端口),以及可以访问互联网以下载所需的软件。同时,需要规划好 Prometheus (默认 9090) 和 Grafana (默认 3000) 的访问端口,并确保防火墙允许外部访问这些端口(如果需要从外部访问监控面板)。
  6. 基础知识: 对 Linux 命令行、基本网络概念(IP地址、端口)、文本编辑器(vi/nano)有基本了解。

我们将在这台用于安装 Prometheus 和 Grafana 的服务器上进行大部分操作。

搭建步骤详解

我们将按照以下顺序逐步进行:

  1. 安装和配置 redis_exporter
  2. 安装和配置 Prometheus
  3. 安装和配置 Grafana
  4. 在 Grafana 中添加 Prometheus 数据源
  5. 导入或创建 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.addrredis.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://:9122/metrics # 如果从其他机器访问
“`

你应该看到大量的以 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: [“:9122″] # 替换为 redis_exporter 所在的服务器 IP 和端口
# 如果 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.ymltargets 的 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 指标。

  1. 登录 Grafana: 使用默认凭据 admin/admin 登录。系统会提示你修改密码。
  2. 添加数据源:
    • 点击左侧菜单栏的齿轮图标(Configuration)。
    • 选择 “Data sources”。
    • 点击 “Add data source” 按钮。
    • 在数据源类型列表中选择 “Prometheus”。
  3. 配置数据源:
    • Name: 给这个数据源起一个名字,比如 PrometheusPrometheus_Redis
    • URL: 输入 Prometheus 服务器的地址和端口,例如 http://localhost:9090 (如果 Prometheus 在同一台机器) 或 http://<prometheus_server_ip>:9090
    • Access: 选择 “Server (default)”。
    • 其他设置通常保持默认即可。
  4. 保存并测试:
    • 点击页面底部的 “Save & test” 按钮。
    • 如果配置正确,你应该看到 “Data source is working” 的提示。如果测试失败,检查 Prometheus 服务是否运行、防火墙设置以及填写的 URL 是否正确。

现在,Grafana 已经能够从 Prometheus 中拉取到 Redis 的指标数据了。

步骤 5:导入或创建 Redis 监控 Dashboard

这是最关键的一步,我们将把采集到的数据通过图表展示出来。有两种主要方式:导入预制的 Dashboard 或自己从零开始构建。

5.1 导入预制 Dashboard (推荐)

这是最快的方式,Grafana 社区提供了大量高质量的预制 Dashboard。

  1. 查找 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 (页面标题下面的数字)。
  2. 在 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。

  1. 创建新的 Dashboard:

    • 点击左侧菜单栏的加号图标(+)。
    • 选择 “New Dashboard”。
    • 点击 “Add visualization”。
  2. 配置 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
  3. 设置 Panel 属性:

    • 在 “Transform” 标签页,可以对数据进行一些转换(例如,计算百分比)。
    • 在 “Visualize” 标签页,选择图表类型(Graph, Stat, Gauge, Table 等)。
    • 在右侧的各个标签页(如 Graph 中的 “Axes”, “Legend”, “Tooltip”, “Display” 等),配置图表的样式、单位、标题、坐标轴等。例如,对于内存,可以将单位设置为 “bytes(SI)”。对于命中率,单位设置为 “percent(0-100)”。
    • 在 “General” 标签页,设置 Panel 的标题和描述。
  4. 重复添加 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)。使用防火墙工具 (如 ufwfirewalld) 仅开放必要的端口,并限制访问来源 IP,增强安全性。
  • 安全性:
    • 修改 Grafana 的默认 admin 密码。
    • 配置 Grafana 使用 HTTPS。
    • Prometheus 和 exporters 默认没有认证,考虑将其绑定到本地地址 (127.0.0.1),并通过安全的代理(如 Nginx 或 Apache)进行访问,或者使用基于 TLS 和基本认证的 Scraping (配置稍复杂)。
    • 确保 Redis 本身也设置了密码,并且防火墙限制了访问来源。
  • 监控多个 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 监控之路上一切顺利!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部