Redis集群监控配置-Helm部署方案
一、背景简介
生产环境的Redis监控告警一直存在准确性问题,通过深入排查发现redis-exporter采集方式不正确,导致监控指标偏差和告警误报。为了解决这些问题,采用标准化的Helm部署方式来实现Redis集群监控采集。
本方案通过Helm部署redis-exporter实现Redis集群监控采集,确保监控数据的准确性和可靠性。
二、部署文件准备
2.1. 必需文件清单
文件类型 | 文件名称 | 说明 |
---|---|---|
Helm Charts | prometheus-redis-exporter-6.9.0.tgz |
prometheus-redis-exporter chart部署包 |
配置文件 | redis-exporter-values.yaml |
redis-exporter配置文件 |
2.2. 环境要求
- Kubernetes集群环境
- Helm 3.x已安装配置
- Prometheus Operator已部署
- Redis集群已正常运行
- 具备集群管理权限
三、配置步骤
3.1. Redis密钥创建
Redis密钥用于安全存储Redis集群的认证信息,避免明文密码泄露。
(1)创建Secret命令
kubectl create secret generic app-redis-cluster-secret \
--from-literal=redis-password='your-redis-password' \
-n monitoring
(2)参数说明
参数 | 示例值 | 说明 |
---|---|---|
Secret名称 | app-redis-cluster-secret |
Redis密钥标识名称 |
密码键名 | redis-password |
密码在Secret中的键名 |
密码值 | your-redis-password |
Redis集群实际密码 |
命名空间 | monitoring |
Secret存储的命名空间 |
(3)验证Secret创建
# 检查Secret是否创建成功
kubectl get secret app-redis-cluster-secret -n monitoring
# 查看Secret详细信息(不显示密码内容)
kubectl describe secret app-redis-cluster-secret -n monitoring
3.2. 配置文件修改
修改redis-exporter-values.yaml
配置文件中的关键配置项:
(1)核心配置参数
配置项 | 示例值 | 说明 |
---|---|---|
service.labels.platform |
app-platform |
平台标识,如:platform-a、platform-b、platform-c |
serviceMonitor.targets |
见下方示例 | Redis集群所有节点配置 |
serviceMonitor.interval |
60s |
监控采集周期,建议60s |
auth.secret.name |
app-redis-cluster-secret |
步骤3.1创建的密钥名称 |
(2)完整配置示例
service:
type: ClusterIP
port: 9121
portName: redis-exporter
annotations: {}
labels:
platform: "app-platform" # 修改为对应平台标识
serviceMonitor:
# 启用ServiceMonitor
enabled: true
multipleTarget: true
targets:
# Redis集群节点配置 - 需配置所有节点
- url: "172.16.1.15:6383"
name: "app-redis-cluster-node-6383"
- url: "172.16.1.15:6384"
name: "app-redis-cluster-node-6384"
- url: "172.16.1.15:6385"
name: "app-redis-cluster-node-6385"
additionalMetricsRelabels: {}
additionalRelabeling: []
# ServiceMonitor部署命名空间
namespace: monitoring
# Prometheus采集间隔(重要配置)
interval: 60s # 从默认15s调整为60s
auth:
# 启用密码认证
enabled: true
# 使用已存在的Secret
secret:
name: "app-redis-cluster-secret"
key: "redis-password"
# 当不使用Secret时的密码配置(留空)
redisPassword: ""
(3)配置要点说明
3.3. 平台标识配置
根据不同的生产环境,配置相应的平台标识:
环境类型 | platform配置值 | 说明 |
---|---|---|
应用平台A | platform-a |
应用平台A环境 |
应用平台B | platform-b |
应用平台B环境 |
应用平台C | platform-c |
应用平台C环境 |
数据平台 | data-platform |
数据平台环境 |
测试环境 | test-env |
测试环境 |
四、部署实施
4.1. Helm发布名称规范
4.2. 部署命令
在具备Helm环境的生产服务器上执行部署:
# 部署Redis监控
helm install app-prometheus-redis-exporter \
prometheus-redis-exporter-6.9.0.tgz \
--version 6.9.0 \
-n monitoring \
-f redis-exporter-values.yaml
多环境部署示例
# 平台A环境
helm install platform-a-prometheus-redis-exporter \
prometheus-redis-exporter-6.9.0.tgz \
--version 6.9.0 \
-n monitoring \
-f platform-a-redis-exporter-values.yaml
# 平台B环境
helm install platform-b-prometheus-redis-exporter \
prometheus-redis-exporter-6.9.0.tgz \
--version 6.9.0 \
-n monitoring \
-f platform-b-redis-exporter-values.yaml
4.3. 部署验证
(1)检查Pod状态
# 查看Redis-exporter Pod状态
kubectl get pods -n monitoring | grep redis-exporter
# 查看具体Pod详情
kubectl describe pod <redis-exporter-pod-name> -n monitoring
(2)验证Service和ServiceMonitor
# 查看Service
kubectl get service -n monitoring | grep redis-exporter
# 查看ServiceMonitor
kubectl get servicemonitor -n monitoring | grep redis-exporter
(3)验证指标采集
# 端口转发测试
kubectl port-forward service/app-prometheus-redis-exporter 9121:9121 -n monitoring
# 访问指标端点
curl http://localhost:9121/metrics
4.4. 验证Redis连接
# 查看exporter日志
kubectl logs -f deployment/app-prometheus-redis-exporter -n monitoring
# 检查是否有连接错误
kubectl logs deployment/app-prometheus-redis-exporter -n monitoring | grep -i error
五、监控指标说明
5.1. 核心Redis指标
5.2. 告警规则配置
groups:
- name: redis_alerts
rules:
- alert: RedisDown
expr: redis_up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Redis实例不可用"
description: "{{ $labels.instance }} Redis实例已下线"
- alert: RedisMemoryHigh
expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.9
for: 2m
labels:
severity: warning
annotations:
summary: "Redis内存使用率过高"
description: "{{ $labels.instance }} 内存使用率超过90%"
- alert: RedisConnectionsHigh
expr: redis_connected_clients > 1000
for: 2m
labels:
severity: warning
annotations:
summary: "Redis连接数过高"
description: "{{ $labels.instance }} 连接数超过1000"
- alert: RedisClusterSlotsMissing
expr: redis_cluster_slots_assigned < redis_cluster_slots_ok
for: 1m
labels:
severity: critical
annotations:
summary: "Redis集群槽位异常"
description: "{{ $labels.instance }} 集群槽位分配异常"
六、Grafana监控配置
6.1. 官方Dashboard
Redis-exporter提供了官方的Grafana Dashboard配置:
6.2. 自定义监控面板
{
"dashboard": {
"title": "Redis集群监控",
"panels": [
{
"title": "Redis连接数",
"type": "graph",
"targets": [
{
"expr": "redis_connected_clients{platform=\"$platform\"}",
"legendFormat": "{{instance}} - 连接数"
}
]
},
{
"title": "内存使用率",
"type": "graph",
"targets": [
{
"expr": "redis_memory_used_bytes{platform=\"$platform\"} / redis_memory_max_bytes{platform=\"$platform\"} * 100",
"legendFormat": "{{instance}} - 内存使用率%"
}
]
}
]
}
}
七、配置管理
7.1. 添加新的Redis节点
(1)更新配置文件
# 获取当前配置
helm get values app-prometheus-redis-exporter -n monitoring > current-values.yaml
# 编辑配置添加新节点
vim current-values.yaml
(2)在targets中添加新节点
targets:
- url: "172.16.1.15:6386" # 新节点
name: "app-redis-cluster-node-6386"
(3)更新部署
# 更新Helm部署
helm upgrade app-prometheus-redis-exporter \
prometheus-redis-exporter-6.9.0.tgz \
--version 6.9.0 \
-n monitoring \
-f current-values.yaml
7.2. 修改监控间隔
# 修改interval配置
sed -i 's/interval: 60s/interval: 30s/g' current-values.yaml
# 应用更新
helm upgrade app-prometheus-redis-exporter \
prometheus-redis-exporter-6.9.0.tgz \
--version 6.9.0 \
-n monitoring \
-f current-values.yaml
7.3. 完全卸载
# 卸载Helm部署
helm uninstall app-prometheus-redis-exporter -n monitoring
# 清理Secret(如果需要)
kubectl delete secret app-redis-cluster-secret -n monitoring
八、故障排查
8.1. 常见问题
8.2. 日志排查
# 查看exporter日志
kubectl logs -f deployment/app-prometheus-redis-exporter -n monitoring
# 查看最近的错误日志
kubectl logs deployment/app-prometheus-redis-exporter -n monitoring --tail=100 | grep -i error
# 检查ServiceMonitor状态
kubectl describe servicemonitor app-prometheus-redis-exporter -n monitoring
8.3. 连接测试
# 测试Redis连接
redis-cli -h 172.16.1.15 -p 6383 -a your-password ping
# 检查集群状态
redis-cli -h 172.16.1.15 -p 6383 -a your-password cluster nodes
总结
通过Helm部署Redis集群监控方案解决了以下关键问题:
- 准确性提升:修复了原有采集方式的问题,确保监控数据准确性
- 标准化部署:统一的Helm Chart管理,简化部署和维护流程
- 安全管理:通过Kubernetes Secret安全存储认证信息
- 灵活配置:支持多集群、多节点的灵活配置管理
- 性能优化:合理的采集间隔配置,降低对Redis的影响
本方案为Redis集群监控提供了可靠的基础设施,确保了生产环境监控的准确性和稳定性。
参考文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 逐光の博客!
评论