【30天精通Prometheus:一站式监控实战指南】第8天:redis_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们👋

  欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀

  Prometheus是云原生和DevOps的核心监控工具,我们将从基础概念开始,逐步涵盖配置、查询、告警和可视化。💪

  在接下来的30天里,我们将解锁Prometheus的实战技巧,通过案例和分享,助你深入理解其工作原理。📆

  目标:30天后,你将熟练掌握Prometheus,为未来的项目挑战做好准备!💯

  这是一段精彩旅程,期待你的加入!🎉


一、redis_exporter概述📘

定义
  redis_exporter是一个开源的监控工具,专为收集和导出Redis数据库的性能指标而设计,以便进行有效的监控和分析。作为Prometheus监控生态系统的一部分,redis_exporter能够将捕获的数据转化为Prometheus可以识别的格式。

功能
  1.数据收集:redis_exporter能够连接到Redis数据库,并从中获取多种性能指标,包括但不限于命令处理时间、内存使用情况、客户端连接数、键空间状态等。

  2.数据导出:所收集的数据被格式化为Prometheus可识别的metrics格式,使得Prometheus可以轻松抓取并存储这些数据以供后续分析。

  3.兼容性:redis_exporter支持多种Redis版本,并能与Prometheus及其他监控解决方案无缝集成,提供全面的监控能力。

应用场景

  • IT运维和缓存管理:对于依赖Redis作为缓存层的大型企业或组织,redis_exporter是确保系统性能稳定的关键工具。它使IT运维团队能够实时监控Redis实例的健康状态和性能,从而预防潜在问题并优化系统性能。
  • 云服务与托管服务:云服务提供商可以利用redis_exporter为客户提供关于Redis服务的深入性能洞察,增强客户对服务质量和可靠性的信心。
  • 开发和测试环境:在软件开发和QA测试阶段,开发人员和测试工程师可以利用redis_exporter来监测Redis的性能表现,以确保应用与缓存层之间的交互效率,进而优化整体应用性能。

二、安装redis_exporter💾

注意事项和常见问题
  1.权限问题:在安装redis_exporter之前,需要确保当前用户有足够的权限来执行安装命令和访问必要的文件目录。在Unix-like系统中,可能需要使用sudo命令或以root用户身份执行安装。

  2.网络配置:redis_exporter默认会监听一个特定端口(例如:9121)。需要确保服务器的防火墙或网络安全组设置允许Prometheus服务器或其他监控工具访问该端口。

  3.服务管理:如果使用systemd等服务管理工具来管理redis_exporter,应确保服务配置文件(如/etc/systemd/system/redis_exporter.service)已正确设置,以便能够顺利启动、停止和重启服务。

  4.日志和错误排查:建议定期检查redis_exporter的日志文件,以便及时发现并解决问题。如果使用systemd,可以通过journalctl -u redis_exporter命令查看相关日志。

  5.版本兼容性:在安装前,请确认redis_exporter的版本与您的Redis数据库版本以及Prometheus等监控系统的版本相兼容。

  6.安装路径与文件权限:确保redis_exporter的安装路径具有适当的权限,以便服务能够正常访问和运行。同时,应检查所有配置文件(如包含Redis连接信息的配置文件)的路径和权限设置是否正确。

2.1 访问redis_exporter官方网站 🌐

2.2 选择适合的版本🔍

  • 在下载页面,你将看到不同操作系统的redis_exporter二进制包。根据你的操作系统选择适合的版本。例如,如果你使用的是Linux 64位系统,就选择redis_exporter-x.x.x.linux-amd64.tar.gz(其中x.x.x是版本号)。
redis_exporterversionredis version
1.59.02.x、3.x、4.x、5.x、6.x and 7.x+
1.58.02.x、3.x、4.x、5.x、6.x and 7.x+
1.57.02.x、3.x、4.x、5.x、6.x and 7.x+
1.56.02.x、3.x、4.x、5.x、6.x and 7.x+
1.55.02.x、3.x、4.x、5.x、6.x and 7.x+

2.3 下载redis_exporter⬇️

  • 点击所选版本的下载链接,将redis_exporter的二进制包下载到你的本地计算机。

2.4 解压安装包📂

  • 将下载的redis_exporter压缩包解压到你想要安装的目录。你可以使用命令行工具(如tar)来完成这个步骤。解压后,你将看到一个名为redis_exporter-x.x.x.linux-amd64的目录,其中包含postgres_exporter的二进制文件和其他相关文件。
tar -xzf redis_exporter-x.x.x.linux-amd64.tar.gz

2.5 运行redis_exporter🚀

/home/deploy/redis_exporter/redis_exporter -redis.addr 127.0.0.1:6379 -redis.password exporter -web.listen-address=0.0.0.0:9121

三、redis_exporter指标和配置详解📖

3.1 redis_exporter.service

连接与认证参数

  • -redis.addr string
       用于指定 Redis 实例的地址。例如,你可以输入 localhost:6379 或者某个 IP 地址和端口号来指定 Redis 服务器的位置。
  • -redis.password string
       Redis 实例设置了密码保护,可以使用这个参数来提供密码。例如,-redis.password yourpassword。
  • -redis.password-file string
       除了直接提供密码,你还可以将密码存储在一个文件中,并通过这个参数指定文件路径。这样做的好处是可以增加安全性,避免在命令行中直接暴露密码。
  • -redis.user string
       对于 Redis 6.0 及以上版本,支持基于用户名和密码的认证(ACL)。这个参数允许你指定用于连接 Redis 的用户名。
  • -connection-timeout string
       设置连接到 Redis 实例的超时时间。如果在这个时间内没有成功建立连接,redis_exporter 将报错。时间格式通常为“时间单位+数值”,例如“10s”表示10秒。
  • -ping-on-connect
       redis_exporter 在每次连接到 Redis 时都会发送一个 PING 命令来确认连接是否成功。这有助于检测“僵尸”连接。
  • -skip-tls-verification
       是否跳过TLS验证。当与 Redis 的连接是通过 TLS/SSL 加密时,这个选项允许你跳过 TLS 证书的验证。这个参数通常不推荐配置,因为它降低了安全性,但在某些测试或开发环境中可能是有用的。

导出与度量参数

  • -namespace string
       设置度量的命名空间。Prometheus 中的指标可以有一个前缀(或命名空间),这有助于在存在多个相同类型的 exporter 时区分它们的指标。例如,如果你有两个 Redis 实例,并且你想为每个实例设置不同的命名空间来区分它们的指标,这个选项就会很有用。
  • -export-client-list
       决定是否抓取与 Redis 客户端列表相关的特定指标。当这个选项被启用时,redis_exporter 会从 Redis 的 CLIENT LIST 命令中提取额外的信息,如每个客户端的地址、连接时长等,并将这些信息作为指标暴露给 Prometheus。
  • -export-client-port
       在导出客户端列表时,决定是否包含客户端的端口信息。如果启用了 --export-client-list,这个选项将决定是否在导出的客户端信息中包含每个客户端的端口号。
  • -include-config-metrics
       决定是否包含所有 Redis 配置设置作为度量。当这个选项被启用时,redis_exporter 会从 Redis 的 CONFIG GET 命令中获取所有的配置选项,并将它们作为指标暴露给 Prometheus。
  • -include-system-metrics
       决定是否包含系统度量,如系统的总内存使用情况。启用此选项后,redis_exporter 将包含一些与运行 Redis 服务器的系统相关的指标,例如系统的总内存大小。
  • -redis-only-metrics
       决定是否仅导出与 Redis 相关的度量,而不导出 Go 运行时度量。默认情况下,redis_exporter 可能还会暴露一些与 Go 运行时环境相关的指标(如内存使用情况、GC 次数等)。如果你只对 Redis 的指标感兴趣,并希望减少 Prometheus 中指标的数量,可以启用此选项来仅导出 Redis 相关的指标。

扫描与键检查参数

  • -check-key-groups string
       允许用户通过 Lua 正则表达式指定哪些键应该被分组并监控。接受一个或多个 Lua 正则表达式,用于匹配 Redis 键名。匹配的键将被分组,并且可以为每组键收集和报告聚合指标。这对于监控具有相似命名模式的键组特别有用。
  • -check-keys string
       指定要导出值和长度/大小的键的模式列表。接受一个或多个模式(可以是正则表达式),用于匹配需要监控具体值和大小的 Redis 键。匹配到的键将导出其值和大小作为指标。
  • -check-keys-batch-size int
       设置在每次检查过程中大致要处理的键的数量。由于检查大量的键可能会对 Redis 性能产生影响,因此这个参数允许用户限制每次检查时处理的键的数量。这有助于分散负载,减少对 Redis 服务器的冲击。
  • -check-single-keys string
       指定要单独监控的特定键的列表。与 --check-keys 类似,但此参数用于指定单个、具体的键,而不是通过模式匹配。这对于需要特别关注某些特定键的情况很有用。
  • -check-single-streams string
       指定要单独监控的 Redis 流的列表。允许用户指定一个或多个特定的 Redis 流,以便收集和报告与这些流相关的指标,如流的长度、待处理的消息数等。
  • -check-streams string
       通过模式匹配来指定要监控的 Redis 流。与 --check-single-streams 类似,但这个参数是通过模式(可以是正则表达式)来匹配需要监控的流。这对于监控具有相似命名模式的多个流特别有用。
  • -count-keys string
       指定要计数的键的模式列表。允许用户通过模式匹配来指定哪些键应该被计数。这对于了解符合特定模式的键的数量非常有用,而不需要获取每个键的具体值或大小。

脚本与安全性参数

  • -script string
       允许用户指定一个或多个 Redis Lua 脚本的路径,这些脚本用于收集额外的度量信息。Redis 支持通过 Lua 脚本来扩展其功能,用户可以编写自定义的 Lua 脚本来检索 Redis 数据或执行复杂的操作。通过 --script 参数,redis_exporter 可以执行这些 Lua 脚本,并将脚本的输出作为额外的度量指标暴露给 Prometheus。
  • -redact-config-metrics
       决定是否对可能包含敏感信息的 Redis 配置设置进行编辑或隐藏。当启用这个选项时,redis_exporter 在暴露 Redis 配置设置作为度量指标之前,会先对这些设置进行检查和编辑,以确保不会泄露任何敏感信息。例如,Redis 的配置中可能包含密码、密钥或其他不应公开的信息。通过启用 --redact-config-metrics,redis_exporter 可以帮助保护这些信息不被意外暴露。

Web接口与遥测参数

  • -web.listen-address string
       redis_exporter 的 Web 接口和遥测数据的监听地址。定义了 redis_exporter 应该在哪个网络地址上监听传入的连接请求。通常,这个地址可以是一个具体的 IP 地址和端口组合,如 0.0.0.0:9121,表示在所有可用的网络接口上的 9121 端口监听。如果你只想在本地接口上监听,可以使用 127.0.0.1:9121。
  • -web.telemetry-path string
       设置暴露 Prometheus 度量数据的 HTTP 路径。默认情况下,Prometheus exporter 通常在根路径 / 上暴露度量数据。但是,如果你的环境中需要将度量数据暴露在一个特定的子路径下,你可以使用这个参数来设置。例如,设置为 -web.telemetry-path /redis_metrics 将会使得度量数据在 /redis_metrics 路径下可用。
  • -tls-server-*
       与 redis_exporter Web 接口使用的 TLS(传输层安全性)配置有关。TLS 用于加密网络通信,以确保数据的机密性和完整性。–tls-server-* 参数允许你配置与 TLS 相关的各种设置,如私钥、证书等,以确保 redis_exporter 的 Web 接口通过 HTTPS 安全地暴露度量数据。具体的参数可能包括 --tls-server-key-file(指定私钥文件的路径)、-tls-server-cert-file(指定证书文件的路径)等。通过这些参数,你可以为 redis_exporter 启用 HTTPS,并增强数据传输的安全性。

其他参数

  • -config-command string
       指定用于获取 Redis 配置的命令字符串。Redis 的 CONFIG GET 命令用于获取 Redis 服务器的配置参数。通过这个参数,您可以自定义或限制 redis_exporter 在检索配置信息时所使用的命令。例如,如果您只想检索特定的配置选项,可以使用这个参数来指定。
  • -disable-exporting-key-values
       决定是否禁用从 Redis 中导出键和值的功能。默认情况下,redis_exporter 可能会导出 Redis 中的键和对应的值作为度量信息。如果出于安全或性能的考虑,您不希望导出这些键值对,可以通过设置这个参数为 true 来禁用这个功能。
  • -is-cluster
       指示 redis_exporter 是否正在监控一个 Redis 集群。Redis 支持集群模式,允许多个 Redis 节点共同工作以提供高可用性和可扩展性。当设置为 true 时,redis_exporter 将以集群模式运行,并适当地收集和处理集群相关的度量信息。
  • -is-tile38
      指示 redis_exporter 是否应抓取 Tile38 特定的度量。Tile38 是一个地理空间数据库,兼容 Redis 协议。如果设置为 true,redis_exporter 将尝试收集和暴露与 Tile38 相关的特定度量信息。
  • -max-distinct-key-groups int
       设置要作为不同度量呈现的最具内存利用率的唯一键组的最大数量。当使用 --check-key-groups 参数对键进行分组时,这个参数限制了要跟踪和暴露度量信息的唯一键组的数量。这个参数有助于控制内存使用和性能指标的数量,特别是在有大量键组的情况下。
  • -set-client-name
       是否将客户端名称设置为redis_exporter。决定 redis_exporter 是否应将其客户端名称设置为 redis_exporter。当连接到 Redis 服务器时,客户端可以设置一个名称来标识自己。如果设置为 true,redis_exporter 将在连接时将其客户端名称设置为 redis_exporter,这有助于在 Redis 的客户端列表中识别和跟踪 redis_exporter 的连接。

四、实战演练:生产环境搭建指南🔨

4.1 创建普通用户管理redis_exporter👤

useradd deploy

4.2 解压redis_exporter.tar.gz📦

注意:
  我的是x86,所以使用redis_exporter-v1.59.0.linux-amd64.tar.gz,您可以使用uname -a命令查看系统架构

tar xvf redis_exporter-v1.59.0.linux-amd64.tar.gz -C /home/deploy/

4.3 将redis_exporter集成到Prometheus配置中✂️

  将redis_exporter集成到Prometheus配置中,确保数据能够正常采集。编辑Prometheus的配置文件(通常是prometheus.yml),在scrape_configs部分添加redis_exporter的配置。告诉Prometheus将采集localhost:9121的数据。

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "redis_exporter"
    static_configs:
      - targets: ["localhost:9121"]

4.4 更改redis_exporter软件包名称✂️

mv redis_exporter-v1.59.0.linux-amd64 /home/deploy/redis_exporter

4.5 编辑redis_exporter.service文件📝

cat > /etc/systemd/system/redis_exporter.service <<EOF
[Unit]
Description=Redis Exporter
After=network.target

[Service]
Type=simple
User=deploy
Group=deploy
ExecStart=/home/deploy/redis_exporter/redis_exporter \
-redis.addr 127.0.0.1:6379 \
-ping-on-connect \
-export-client-list \
-web.listen-address=0.0.0.0:9121
ExecReload=/bin/kill -HUP
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

4.6 启动redis_exporter.service🔌

sudo systemctl daemon-reload

sudo systemctl enable --now redis_exporter.service

4.7 查看服务是否正常启动🔍

# 查看service服务是否启动
sudo systemctl status redis_exporter.service

# 查看端口是否存在
sudo ss -ntulp | grep 9121

五、基于云原生的部署方案 🚀

5.1 使用Docker部署redis_exporter🐳

5.1.1 获取Prometheus Docker镜像 📸

  • 从docker-hub下载镜像
docker pull oliver006/redis_exporter:v1.60.0

docker tag oliver006/redis_exporter:1.60.0 redis_exporter:v1.60.0
  • 从阿里云下载镜像(如果访问不到docker-hub)
// 如果访问不到docker-hub的可以访问如下地址
docker pull registry.cn-beijing.aliyuncs.com/insights-ops/redis_exporter:v1.60.0

docker tag registry.cn-beijing.aliyuncs.com/insights-ops/redis_exporter:v1.60.0 redis_exporter:v1.60.0
  • 从百度网盘下载镜像
docker load -i redis_exporter-v1.60.0.tar

docker tag oliver006/redis_exporter:v1.60.0 redis_exporter:v1.60.0

5.1.2 运行redis_exporter容器 🏃

docker run -itd --name redis_exporter -p 9121:9121 redis_exporter:v1.60.0

5.1.3 验证Docker部署 ✅

# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep redis_exporter

# 端口监听
ss -ntulp | grep 9121 

5.2 利用Docker-Compose简化部署 📘

5.2.1 编写docker-compose.yml配置文件 📜

---
version: '3'  
  
services:  
  redis_exporter:  
    image: redis_exporter:v1.60.0  
    container_name: redis_exporter  
    ports:  
      - "9121:9121"  
    restart: always

5.2.2 使用Docker-Compose启动服务 🚀

docker-compose up -d

5.2.3 验证Docker部署 ✅

# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep redis_exporter

# 端口监听
ss -ntulp | grep 9121 

5.3 在Docker Swarm中部署redis_exporter🐝

5.3.1 创建Docker Compose文件

创建一个 docker-compose.yml 文件来定义 redis_exporter 服务。以下是一个示例配置文件:

mkdir docker/docker-swarm/docker-swarm-redis -p

vi docker/docker-swarm/docker-swarm-redis/docker-compose.yml
version: '3.7'

services:
  redis-exporter:
    image: oliver006/redis_exporter:v1.60.0  # 使用最新的版本
    ports:
      - "9121:9121"
    environment:
      - REDIS_ADDR=redis-service:6379  # 替换为实际的 Redis 服务地址
      - REDIS_PASSWORD=abAc!123 # 如果 Redis 设置了密码,请替换为实际密码
    networks:
      - monitoring
    deploy:
      restart_policy:
        condition: on-failure

networks:
  monitoring:
    external: true

5.3.2 部署服务到Docker Swarm

使用 docker stack deploy 命令将服务部署到 Docker Swarm。

docker pull oliver006/redis_exporter:v1.60.0

docker stack deploy -c docker/docker-swarm/docker-swarm-redis/docker-compose.yml monitoring

5.3.3 验证部署

docker service ls

在这里插入图片描述

5.4 在Kubernetes(K8s)上部署redis_exporter🚀

5.4.1 部署 mysqld_exporter

创建一个名为redis_exporter-Deployment.yaml的文件来定义redis_exporter的Deployment服务。

mkdir k8s/redis_exporter/ -p

vi k8s/redis_exporter/redis_exporter-Deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-exporter
  namespace: monitoring  # 根据需要调整命名空间
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-exporter
  template:
    metadata:
      labels:
        app: redis-exporter
    spec:
      containers:
      - name: redis-exporter
        image: oliver006/redis_exporter:v1.60.0  # 使用最新的版本
        args:
          - --redis.addr=redis-service.default.svc.cluster.local:6379  # 替换为实际的 Redis 服务地址
          - --redis.password=abAc!123 # 如果 Redis 设置了密码,请替换为实际密码
        ports:
        - containerPort: 9121
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
  name: redis-exporter
  namespace: monitoring  # 根据需要调整命名空间
  labels:
    app: redis-exporter
spec:
  type: ClusterIP
  ports:
  - port: 9121
    targetPort: 9121
    protocol: TCP
    name: http
  selector:
    app: redis-exporter

使用命令将其应用到Kubernetes集群中:

kubectl apply -f k8s/redis_exporter/redis_exporter-Deployment.yaml

5.4.2 验证部署

要验证mysqld_exporter是否正确部署并运行,可以使用以下命令查看Pod状态:

kubectl get pods -n monitoring -l app=redis-exporter

相关资料下载地址📚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜提yBei冰美式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值