redis-集成prometheus监控(k8s)

一. 简介: 

   关于redis的简介和部署,可以参考单独的文章redis-sentinel基础概念及部署-CSDN博客,这里就不细说了。这里只讲讲如何在k8s中部署export并基于prometheus做redis的指标采集。

二. 实现方式:

    首先我们需要先部署exporter采集器,提供给prometheus调用 ,这里我们选择在k8s中部署,好处是: k8s有健康检测机制,不需要独立维护exporter的故障问题。这里采用deployment的方式:

# Source: prometheus-redis-exporter/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-exporter
  namespace: monitoring
  labels:
    app.kubernetes.io/name: redis-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: redis-exporter
  template:
    metadata:
      labels:
        app.kubernetes.io/name: redis-exporter
    spec:
      serviceAccountName: default
      securityContext:
        {}
      containers:
        - name: redisn-exporter
          securityContext:
            {}
          image: "oliver006/redis_exporter:latest"
          imagePullPolicy: IfNotPresent
          args:
            - "-redis.password=xxxxx"  #这里配置了密码,如没有配置,忽略
          env:
          ports:
            - containerPort: 9121
          livenessProbe:
            httpGet:
              path: /
              port: 9121
          readinessProbe:
            httpGet:
              path: /
              port: 9121

配置svc:

---
apiVersion: v1
kind: Service
metadata:
  name: redis-exporter
  namespace: monitoring
  labels:
    app.kubernetes.io/name: redis-exporter
spec:
  type: ClusterIP
  ports:
    - port: 9121
      targetPort: 9121
      protocol: TCP
      name: redis-exporter
  selector:
    app.kubernetes.io/name: redis-exporter     

配置prometheus的指标采集:

 这里采用了,单exporter采集多redis实例的方式,具体可以根据实际情况,定制:可参考:https://github.com/oliver006/redis_exporter

接下来,就可以验证指标了:

可发现,状态OK

三. grafana中绘制dashboard看板:

    也可以通过网络上的开源模版,直接导入:

配置完成!

  ---------------------------------------------------------------------------------------

                         深耕运维行业多年,擅长运维体系建设,方案落地。欢迎交流!

                                                     “V-x”: ywjw996

                                                     《 运维经纬 》

<think>嗯,用户想了解Redis性能指标监控的方法和工具。这个问题很有实际意义,毕竟Redis作为关键组件,性能监控直接影响系统稳定性。 用户可能是个运维工程师或者开发人员,正在搭建Redis监控体系。从问题措辞看,用户对Redis有一定了解,但需要系统性的监控方案。用户没有具体说明环境规模,但既然提到"中间件",估计是生产环境应用。 我手头有丰富的参考资料,需要整合成实用方案。引用[2]提到两种监控方式:info命令和redis-stat工具,这可以作为基础框架。引用[4]和[5]详细列出了性能指标分类,包括Performance、Memory等维度,这些需要重点展开。 工具选择上,除了redis-stat,还应该补充更现代的方案。引用[3]提到的redis-benchmark适合压测,而Prometheus+Grafana这种组合更适合企业级监控。用户可能还需要知道开源工具和商业方案的差异。 具体实施路径很重要,应该分步骤说明:从基础命令到图形化工具,再到自动化监控。引用[5]提到的慢查询分析和内存优化技巧特别实用,比如bigkey处理和内存碎片整理,这些故障排查经验用户肯定会需要。 考虑到用户后续可能深入某些点,准备三个相关问题比较合适:工具选型对比、性能优化专项、容器化监控挑战。这样既覆盖技术深度,也符合运维场景演进趋势。 最后检查下技术细节:所有Redis命令格式要准确,info命令的输出字段要验证,比如used_memory_human这种易错点。工具名称大小写也要规范,比如RedisInsight的首字母大写。</think>以下是Redis性能指标监控的完整方案,涵盖核心指标、监控方法及工具详解: --- ### **一、Redis核心性能指标分类** 根据引用[4][5],Redis性能指标分为五类: 1. **Performance(性能)** - 响应延迟:`redis-cli --latency` 测量基准延迟(通常<1ms)[^5] - 吞吐量:OPS(每秒操作数),通过`redis-benchmark`压测获取 - 连接数:`connected_clients`(当前客户端连接数) - 拒绝连接数:`rejected_connections`(超过`maxclients`限制时触发) 2. **Memory(内存)** - 使用量:`used_memory`(实际内存占用) - 内存碎片率:`mem_fragmentation_ratio`(>1.5需告警)[^5] - 过期Key数量:`expired_keys`(每秒淘汰的过期Key数) - BigKey风险:单个Key过大(如>10KB)影响性能 3. **Basic Activity(基础活动)** - 每秒命令数:`instantaneous_ops_per_sec` - Key命中率:`keyspace_hits/(keyspace_hits+keyspace_misses)`(建议>90%) - 主从同步状态:`master_link_status`(从库视角) 4. **Persistence(持久化)** - RDB/AOF状态:`rdb_last_bgsave_status`/`aof_last_bgrewrite_status`(`ok`为正常) - AOF缓冲区延迟:`aof_delayed_fsync`(>0需检查磁盘IO) 5. **Error(错误)** - 主从断开次数:`master_link_down_since_seconds` - 拒绝连接数:`rejected_connections` --- ### **二、监控方法与工具** #### **1. 原生命令工具** - **`INFO`命令** 获取所有指标:`redis-cli info`(按模块筛选,如`info memory`)[^2] ```bash # 查看内存碎片率 redis-cli info memory | grep mem_fragmentation_ratio ``` - **`redis-benchmark`性能压测** 模拟并发请求(引用[3]): ```bash redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000 ``` - **慢查询监控** 配置阈值(单位微秒): ```config slowlog-log-slower-than 10000 # 记录>10ms的查询 slowlog-max-len 128 # 保存最多128条慢日志 ``` 查看日志:`redis-cli slowlog get` [^5] #### **2. 轻量级工具** - **`redis-stat`**(基于Ruby) 实时命令行监控(引用[2][4]): ```bash redis-stat --server 127.0.0.1:6379 1 # 每秒刷新 ``` ![redis-stat输出示例](https://example.com/redis-stat.png)(显示OPS、内存、延迟等) - **`redis-cli --latency`** 测量网络延迟基线(引用[5]): ```bash redis-cli --latency -h 127.0.0.1 ``` #### **3. 企业级监控方案** - **Prometheus + Grafana** - 部署`redis_exporter`采集指标 - Grafana模板ID:**763**(官方Redis仪表盘) ![Grafana监控面板](https://grafana.com/static/img/grafana_redis_dashboard.png) - **RedisInsight(官方GUI工具)** 可视化慢查询、内存分析、BigKey检测(支持离线RDB分析) - **ELK Stack** 收集Redis日志,通过Kibana分析错误模式 --- ### **三、性能问题排查流程**(引用[5]) 1. **延迟突增** - 检查`slowlog`确认慢命令(如`KEYS *`、全表扫描) - 监控`blocked_clients`(是否因`BLPOP`等命令阻塞) 2. **内存异常** - 碎片率>1.5:执行`memory purge`(需Redis 4+)或重启 - Swap使用:通过`redis-cli info | grep process_id`获取PID,检查`cat /proc/<pid>/smaps | grep Swap` 3. **持久化故障** - AOF重写卡顿:优化`aof-rewrite-incremental-fsync`(增量同步) - RBG失败:检查`rdb_bgsave_in_progress`及磁盘空间 --- ### **四、优化建议** 1. **避免BigKey** ```bash redis-cli --bigkeys # 扫描大Key(引用[5]) ``` 2. **网络调优** - 绑定CPU:`taskset`绑定Redis进程到固定核心 - 禁用透明大页:`echo never > /sys/kernel/mm/transparent_hugepage/enabled` 3. **内存配置** - 设置`maxmemory`并启用淘汰策略(如`allkeys-lru`) - 监控`evicted_keys`(因内存不足被淘汰的Key数) --- ### **监控工具对比** | 工具 | 适用场景 | 优势 | 局限 | |---------------|-------------------|--------------------------|-------------------| | `redis-stat` | 命令行实时监控 | 轻量级,快速部署 | 无历史数据存储 | | Prometheus | 企业级监控 | 告警集成,长期趋势分析 | 需维护组件栈 | | RedisInsight | 开发调试 | 官方支持,可视化分析 | 非实时监控 | --- **相关问题** 1. Redis内存碎片率超过阈值时如何自动化处理? 2. Prometheus监控Redis时如何配置关键告警规则(如主从断开)? 3. 容器化环境中(如K8s)如何实现Redis性能指标的动态采集? > 引用文献: > [^1]: Redis性能压测、监控工具及优化方案(性能压测方法) > [^2]: redis-stat工具实现命令行监控(基础活动指标) > [^4]: Redis性能指标分类(Performance/Memory等维度) > [^5]: 慢查询分析及延迟优化方案(包含BigKey处理)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值