将 Redis 的访问凭据保存到 Secret
为 redis-exporter 创建 secret
1 2 3 4 5 6 7 8
| apiVersion: v1 kind: Secret metadata: name: redis-secret namespace: tools type: Opaque data: password: 123456
|
使用 StatefulSet 创建 redis-exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| apiVersion: apps/v1 kind: StatefulSet metadata: labels: app.kubernetes.io/name: redis-exporter app.kubernetes.io/component: prometheus-exporter name: redis-exporter namespace: tools spec: podManagementPolicy: OrderedReady replicas: 0 revisionHistoryLimit: 10 selector: matchLabels: app.kubernetes.io/name: redis-exporter app.kubernetes.io/component: prometheus-exporter serviceName: "" template: metadata: labels: app.kubernetes.io/name: redis-exporter app.kubernetes.io/component: prometheus-exporter spec: containers: - env: - name: TZ value: Asia/Shanghai - name: REDIS_ADDR value: 127.0.0.1:51000 - name: REDIS_PASSWORD valueFrom: secretKeyRef: key: password name: redis-secret image: ccr.ccs.tencentyun.com/rig-agent/redis-exporter:v1.32.0 imagePullPolicy: IfNotPresent name: redis-exporter ports: - containerPort: 9121 name: metric-port protocol: TCP resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi securityContext: privileged: false terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst imagePullSecrets: - name: qcloudregistrykey restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 updateStrategy: rollingUpdate: partition: 0 type: RollingUpdate
|
确认 redis-exporter 的端点访问正常:http://127.0.0.1:9121/metrics

创建 Service 绑定 redis-exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| apiVersion: v1 kind: Service metadata: annotations: prometheus.io/port: "9121" prometheus.io/redis-exporter-prometheus-enabled: "true" name: redis-exporter namespace: tools spec: clusterIP: none ports: - name: tcp-9121-9121 port: 9121 protocol: TCP targetPort: 9121 selector: app.kubernetes.io/name: redis-exporter app.kubernetes.io/component: prometheus-exporter sessionAffinity: None type: ClusterIP
|
加入 Prometheus 监控配置
基于 K8s 服务发现机制解析 redis-exporter 的 endpoints,从而获得所有 Pod 的实例信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| global: scrape_interval: 15s evaluation_interval: 15s
- job_name: "redis-exporter" scrape_interval: 5s kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_redis_exporter_prometheus_enabled] action: keep regex: true - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] action: replace target_label: __scheme__ regex: (https?) - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] action: replace target_label: __address__ regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 - action: labelmap regex: __meta_kubernetes_service_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: namespace - source_labels: [__meta_kubernetes_service_name] action: replace target_label: service_name
|
确认 Prometheus 的目标 Redis 节点状态为 UP

从 Grafana 导入 Redis 监控面板
Grafana Labs 11692
效果如下
