prometheus监控redis

一、prometheus监控redis

prometheus监控redis需要使用redis_exporter组件,本文包含redis_exporter的安装、prometheus配置、grafana配置、告警规则文件配置。

外发告警配置(邮件告警、企业微信告警)不在本文描述,可参考prometheus监控node_exporter中告警信息配置。

1.1 redis安装配置

本次redis版本为redis4.0.9,采用编译安装

安装编译环境

bash 复制代码
yum -y install make gcc

下载解压redis包

bash 复制代码
wget http://download.redis.io/releases/redis-4.0.9.tar.gz
tar -xf redis-4.0.9.tar.gz 

编译安装

bash 复制代码
mv redis-4.0.9 /usr/local/redis/
cd /usr/local/redis/
make

配置redis服务

bash 复制代码
vim /usr/lib/systemd/system/redis.service
[Unit]
Description=Redis Service
After=network.target

[Service]
User=redis
Group=redis
Type=simple
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

服务自启设置

bash 复制代码
systemctl daemon-reload
systemctl start redis
systemctl start redis.service

1.2 redis_exporter下载安装

reids_exporter用于采集redis服务的监控数据,下载连接:reids_exporter

redis_exporter安装

bash 复制代码
[root@localhost redis]# tar -xf redis_exporter-v1.80.1.linux-amd64.tar.gz 

[root@localhost redis]# cd redis_exporter-v1.80.1.linux-amd64/
[root@localhost redis_exporter-v1.80.1.linux-amd64]# ls
LICENSE  README.md  redis_exporter
[root@localhost redis_exporter-v1.80.1.linux-amd64]# ./redis_exporter 
INFO[0000] Redis Metrics Exporter v1.80.1    build date: 2025-11-22-15:33:33    sha1: b0a03b20062314a8ac2918f5c377ebaf44cc8bd8    Go: go1.25.4    GOOS: linux    GOARCH: amd64 
INFO[0000] Setting log level to "info"                  
INFO[0000] Providing metrics at :9121/metrics           

访问9121端口查看,可以看到metrics

配置reids_exporter服务

bash 复制代码
[root@localhost redis]# mv redis_exporter-v1.80.1.linux-amd64 /usr/local/redis_exporter

[root@localhost redis]# cat /usr/lib/systemd/system/redis_exporter.service 
[Unit]
Description=Redis Service
After=network.target

[Service]
User=redis
Group=redis
ExecStart=/usr/local/redis_exporter/redis_exporter
PrivateTmp=true

[Install]
WantedBy=multi-user.target


[root@localhost redis]# systemctl daemon-reload
[root@localhost redis]# systemctl start redis_exporter.service 

1.3 prometheus配置

prometheus.yml文件配置

bash 复制代码
# 在prometheus配置文件中增加redis_exporter的配置
# 监控redis的数据采集组件
  - job_name: "redis"
    static_configs:
      - targets: ["192.168.56.112:9121"]

重启prometheus,可以看到prometheus连接redis_exporter成功

rules/redis_alerts.yml文件配置

bash 复制代码
groups:
  - name: redis_alerts
    rules:

      # Redis 服务宕机告警
      - alert: RedisDown
        expr: up{job="redis"} == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Redis 服务在 {{ $labels.instance }} 上不可用。"
          description: "Redis 服务已经没有响应超过 5 分钟,可能发生故障。"

      # Redis 内存使用率过高告警
      - alert: RedisMemoryUsageHigh
        expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Redis 在 {{ $labels.instance }} 上的内存使用超过 85%。"
          description: "Redis 实例的内存使用量超过了 85%,可能会导致内存耗尽。"

      # Redis 内存超出最大限制告警
      - alert: RedisMemoryLimitExceeded
        expr: redis_memory_used_bytes > redis_memory_max_bytes
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Redis 在 {{ $labels.instance }} 上的内存使用超过最大限制。"
          description: "Redis 的内存使用量已经超过了配置的最大内存限制,可能会导致数据驱逐或服务不稳定。"

      # Redis 连接数过多告警
      - alert: RedisTooManyConnections
        expr: redis_connected_clients > 1000
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Redis 在 {{ $labels.instance }} 上的活跃连接数过多。"
          description: "Redis 实例的连接数超过了 1000,可能需要检查客户端连接,或考虑扩展 Redis 实例。"

      # Redis 慢查询告警
      - alert: RedisSlowQueries
        expr: rate(redis_commands_processed_total{command="slowlog"}[5m]) > 0
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Redis 在 {{ $labels.instance }} 上检测到慢查询。"
          description: "Redis 正在处理慢查询,可能表示性能问题或配置不当。"

      # Redis 键空间命中率低告警
      - alert: RedisKeyspaceHitsLow
        expr: redis_keyspace_hits_total / (redis_keyspace_hits_total + redis_keyspace_misses_total) < 0.9
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Redis 在 {{ $labels.instance }} 上的键空间命中率低于 90%。"
          description: "Redis 的键空间命中率低于 90%,表明缓存未能有效使用,可能导致更多的磁盘读取操作,影响性能。"

      # Redis 键空间的 key 数量过高告警
      - alert: RedisKeyspaceSizeHigh
        expr: redis_db_keys > 1000000
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Redis 在 {{ $labels.instance }} 上的键空间大小过大。"
          description: "Redis 中的键数量超过 100 万。需要审查 Redis 数据库的大小或进行清理操作。"

      # Redis CPU 使用率高告警(适用于 Redis 专用服务器)
      - alert: RedisHighCpuUsage
        expr: rate(process_cpu_seconds_total[5m]) > 0.75
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Redis 在 {{ $labels.instance }} 上的 CPU 使用超过 75%。"
          description: "Redis 实例的 CPU 使用率超过了 75%。可能是由于大量请求,或者 Redis 配置不合理。"

      # Redis 持久化操作时间过长告警
      - alert: RedisRdbBgsaveDurationHigh
        expr: redis_rdb_current_bgsave_duration_sec > 30
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Redis 背景保存 (BGSAVE) 操作在 {{ $labels.instance }} 上执行时间过长。"
          description: "Redis 背景保存 (BGSAVE) 操作已经运行超过 30 秒,可能影响 Redis 性能。"

      # Redis AOF 持久化操作时间过长告警
      - alert: RedisAofRewriteDurationHigh
        expr: redis_aof_current_rewrite_duration_sec > 30
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Redis AOF 重写操作在 {{ $labels.instance }} 上执行时间过长。"
          description: "Redis AOF 重写操作已经运行超过 30 秒,可能影响 Redis 可用性和性能。"

      # Redis 命令执行时间过长告警
      - alert: RedisCommandSlow
        expr: rate(redis_commands_duration_seconds_total[5m]) > 0.05
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Redis 命令在 {{ $labels.instance }} 上执行时间过长。"
          description: "Redis 命令执行时间超出了预期,可能存在性能瓶颈。"

配置完成重启prometheus,由于redis没有配置最大内存,默认为0,会触发相关报警。

邮箱接收到告警信息

1.4 grafana配置

在这里使用grafana官方的redis模板,ID为17057

导入后发现获取不到CPU使用率与内存使用率

解决方法如下:

CPU使用率获取失败

将原有的redis_cpu_util * on (iid) group_right redis_up{instance=~"$instance"}替换为rate(process_cpu_seconds_total{job="redis", instance=~"$instance"}[1m])

内存使用率获取失败

在redis.conf配置文件中启用maxmemory参数并设置合适大小

重启redis服务后即可获取内存使用率

相关推荐
白帽子凯哥哥2 小时前
Misc题目中图片隐写和流量分析的详细工具使用技巧
linux·运维·web安全·网络安全·docker·渗透测试
star-keke2 小时前
Python pip安装依赖redis被自动降级的问题
数据库·redis·pip
lzjava20242 小时前
Python中的模块和包
linux·开发语言·python
DX_水位流量监测2 小时前
城市易涝点水位雨量监测设备技术体系与实践应用
大数据·运维·服务器·网络·人工智能
一颗小树x2 小时前
NVIDIA Jetson Orin 安装 Docker
运维·docker·容器·安装·jetson orin
大山同学2 小时前
薄膜透光度原理
linux·运维·人工智能
lifewange2 小时前
Linux 日志查看核心命令(动态跟踪 + 文件查阅,全覆盖工作常用)
linux·运维·服务器
dlhto2 小时前
Kiro Remote SSH 无法连接远程服务器问题排查与解决
运维·服务器·ssh
JiMoKuangXiangQu2 小时前
Linux 网络:RPS 简介
linux·网络·rps 和 rfs