prometheus 监控 redis ¶
监控方案一:部署 redis-exporter 及 serviceMonitor 监控 redis ¶
1. 部署 redis-exporter ¶
1. 编写 redis-exporter 的资源清单文件 redis-exporter.yaml
apiVersion: apps/v1 # 版本
kind: Deployment # 资源
metadata:
labels:
app: redis-exporter # 标签
name: redis-exporter # deployment 的名称
namespace: monitoring # 命名空间
spec:
replicas: 1 # 副本
selector:
matchLabels:
k8s-app: redis-exporter # pod 标签
strategy: {}
template:
metadata:
labels:
k8s-app: redis-exporter # pod 标签
spec:
containers:
- image: oliver006/redis_exporter:latest
name: redis-exporter
args: ["-redis.addr", "redis://redis-headless.redisns.svc.cluster.local:6379", "-redis.password", "root"]
ports:
- containerPort: 9121 # 默认暴露的端口号
name: http
---
apiVersion: v1
kind: Service
metadata:
name: redis-exporter
namespace: monitoring
labels:
k8s-app: redis-exporter
spec:
ports:
- port: 9121
protocol: TCP
name: http
selector:
k8s-app: redis-exporter
type: ClusterIP
2. 创建 redis-exporter 资源
kubectl apply -f redis-exporter.yaml
3. 查看 redis 的 IP
kubectl get svc redis-exporter -n monitoring | awk '{if(NR>1) print $3}'
4. 访问 redis 的 metrics 接口
curl -s 10.96.145.112:9121/metrics | tail -1
2. 部署 serviceMonitor ¶
1. 编写 serviceMonitor 的资源清单文件 serviceMonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: redis-exporter
namespace: monitoring
labels:
k8s-app: redis-exporter
spec:
endpoints:
- interval: 10s
port: http # 这个是 port 对应的 Service.spec.ports.name
scheme: http
jobLabel: k8s-app
selector:
matchLabels:
k8s-app: redis-exporter # 和 svc 的 lables 保持一致
namespaceSelector:
matchNames:
- monitoring # svc 的命名空间
2. 创建 serviceMonitor 资源
kubectl apply -f serviceMonitor.yaml
3. 查看 serviceMonitor 资源
kubectl get servicemonitor -n monitoring
1. prometheus 查看 ¶
2. grafana 配置 ¶
监控方案二:使用 helm 部署 prometheus redis exporter 监控 redis ¶
1. 监控手动部署的 redis ¶
1. redis 部署 ¶
1. 编写 redis.yaml 资源清单
apiVersion: v1
kind: Namespace
metadata:
labels:
kubernetes.io/metadata.name: redis
name: redis
---
apiVersion: v1
kind: ConfigMap
metadata:
name: redis
namespace: redis
data:
redis.conf: |+
requirepass redis@passwd
maxmemory 268435456
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: redis
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
annotations:
version/date: "20220720"
version/author: "fc"
spec:
containers:
- name: redis
image: redis
imagePullPolicy: Always
command: ["redis-server","/etc/redis/redis.conf"]
ports:
- containerPort: 6379
volumeMounts:
- name: redis-config
mountPath: /etc/redis/redis.conf
subPath: redis.conf
volumes:
- name: redis-config
configMap:
name: redis
items:
- key: redis.conf
path: redis.conf
---
kind: Service
apiVersion: v1
metadata:
name: redis
namespace: redis
spec:
selector:
app: redis
ports:
- port: 6379
targetPort: 6379
2. 创建 redis 资源
kubectl apply -f redis.yaml
3. 查看 redis 所有的资源
kubectl get all -n redis
2. 部署 prometheus-redis-exporter ¶
1. 下载并解压 prometheus-redis-exporter 资源
helm fetch prometheus-community/prometheus-redis-exporter
2. 解压
tar -xf prometheus-redis-exporter-6.2.0.tgz && cd prometheus-redis-exporter
3. 修改 values.yaml 文件
36 service:
37 type: ClusterIP
38 port: 9121
39 portName: redis-exporter
40 annotations: # 删除默认的 {}
41 prometheus.io/path: /metrics # 添加此参数
42 prometheus.io/port: "9121" # 添加此参数
43 prometheus.io/scrape: "true" # 添加此参数
...
110 serviceMonitor:
111 # When set true then use a ServiceMonitor to configure scraping
112 enabled: true # 默认为 false,修改为 true
113 multipleTarget: false
114 targets: # 删除默认的 []
115 # for every targets, url and name must be set,
116 # an individual additionalRelabeling can be set for every target
117 - url: "redis://redis.redis.svc.cluster.local:6379" # 添加上面的 redis 访问地址
118 name: "my-redis" # 按照实际情况取名
...
auth:
198 # Use password authentication
199 enabled: true # 开启
200 # Use existing secret (ignores redisPassword)
201 secret:
202 name: ""
203 key: ""
204 # Redis password (when not stored in a secret)
205 redisPassword: "redis@passwd" # 设置 redis 访问密码
4. 创建资源
helm install redis-monitor ./ -f values.yaml -n monitoring
1. prometheus 查看 ¶
2. 监控 helm 部署的 redis 集群 ¶
1. helm 实现 redis 集群部署 ¶
1. 添加并更新 repo
helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update
2. 查看仓库
helm search repo redis
3. 安装 Helm release 指定名称为 redis
helm install redis bitnami/redis --set global.storageClass=nfs-client --set global.redis.password=root --set architecture=standalone --version 19.1.0 -n redisns --create-namespace --debug
4. 记录连接信息
host: redis-headless.redisns.svc.cluster.local
port: 6379
passwd: root
5. 查看 redisns 中所有的资源
kubectl get all -n redisns
2. 部署 prometheus-redis-exporter ¶
1. 查看 helm 部署的 redis 服务
kubectl get svc -n redisns
2. 下载并解压 prometheus-redis-exporter
helm fetch prometheus-community/prometheus-redis-exporter
3. 解压
tar -xf prometheus-redis-exporter-6.2.0.tgz && cd prometheus-redis-exporter
4. 修改 values.yaml 文件
36 service:
37 type: ClusterIP
38 port: 9121
39 portName: redis-exporter
40 annotations: # 删除默认的 {}
41 prometheus.io/path: /metrics # 添加此参数
42 prometheus.io/port: "9121" # 添加此参数
43 prometheus.io/scrape: "true" # 添加此参数
...
110 serviceMonitor:
111 # When set true then use a ServiceMonitor to configure scraping
112 enabled: true # 默认为 false,修改为 true
113 multipleTarget: false
114 targets: # 删除默认的 []
115 # for every targets, url and name must be set,
116 # an individual additionalRelabeling can be set for every target
117 - url: "redis://redis-headless.redisns.svc.cluster.local:6379" # 添加上面的 redis 访问地址
118 name: "my-redis"
...
auth:
198 # Use password authentication
199 enabled: false
200 # Use existing secret (ignores redisPassword)
201 secret:
202 name: ""
203 key: ""
204 # Redis password (when not stored in a secret)
205 redisPassword: "root" # 设置 redis 访问密码
5. 安装 prometheus-redis-exporter
helm install redis-monitor-1 ./ -f values.yaml -n monitoring