Prometheus Operator 通过serviceMonitor添加redis explorer

本文介绍如何使用Prometheus Operator通过ServiceMonitor实现自定义监控,包括部署Redis及其导出器、创建ServiceMonitor对象及告警规则等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Proms Operator 添加自定义监控可以通过如下两种方式实现,本文是 serviceMonitor 方式。

  • additional 方式
  • serviceMonitor方式

Prometheus Operator默认的监控指标并不能完全满足实际的监控需求,这时候就需要我们自己根据业务添加自定义监控。添加一个自定义监控的步骤如下:

  • 1、创建一个ServiceMonitor对象,用于Prometheus添加监控项
  • 2、为ServiceMonitor对象关联metrics数据接口的Service对象
  • 3、确保Services对象可以正确获取到metrics数据

官网

###
https://prometheus-operator.dev/docs/prologue/introduction/

## github
https://github.com/prometheus-operator/prometheus-operator

###
https://cloud.tencent.com/document/product/1416/55995

架构图原理

 其中Operator是核心部分,作为一个控制器而存在,Operator会其创建Prometheus、ServiceMonitor、AlertManager和PrometheusRule这4个CRD资源对象,然后一直监控并维持这4个CRD资源对象的状态。

  • Prometheus资源对象是作为Prometheus Service存在的
  • ServiceMonitor资源对象是专门的提供metrics数据接口的exporter的抽象,Prometheus就是通过ServiceMonitor提供的metrics数据接口去pull数据的
  • AlertManager资源对应alertmanager组件
  • PrometheusRule资源对象是被Prometheus实例使用的告警规则文件

简单来说CRD是对Kubernetes API的扩展,kubernetes中的每个资源都是一个API对象的集合,例如yaml文件中定义spec那样,都是对Kubernetes中资源对象的定义,所有的自定义资源可以跟Kubernetes中内建的资源一样使用kubectl。
 

Prometheus作为一个核心的控制器,它会创建Prometheus、ServiceMonitor、AlertManager以及我们的prometheus-rule这四个资源对象。

operator会一直监控并维持这四个资源对象的状态,其中创建Prometheus资源对象就是最为Prometheus Server进行监控,而ServiceMonitor就是我们用的exporter的各种抽象(exporter就是提供我们各种服务的metrics的工具)。

Prometheus就是通过ServiceMonitor提供的metrics数据接口把我们数据pull过来的。

现在我们监控prometheus不需要每个服务单独创建修改规则。通过直接管理Operator来进行集群的监控。一个ServiceMonitor可以通过我们的label标签去匹配集群内部的service,而我们的prometheus也可以通过label匹配多个ServiceMonitor

参考

##
https://blog.csdn.net/shigf_2015/article/details/110383821

##
https://blog.csdn.net/wc1695040842/article/details/109161855

添加Redis Explorer 实践

部署Redis

vim k8s-redis-and-exporter-deployment.yaml

---
apiVersion: v1
kind: Namespace
metadata:
  name: redis
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: redis
  name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9121"
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379
      - name: redis-exporter
        image: oliver006/redis_exporter:latest
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 9121

部署redis的同时,我们把redis_exporter以sidecar的形式和redis服务部署在用一个Pod
另外注意,我们添加了annotations:prometheus.io/scrape: "true"prometheus.io/port: "9121"

创建 Redis Service

apiVersion: v1
kind: Service
metadata:
  name: redis-svc
  namespace: redis
  labels:
    app: redis
spec:
  type: NodePort
  ports:
  - name: redis
    port: 6379
    targetPort: 6379
  - name: redis-exporter
    port: 9121
    targetPort: 9121
  selector:
    app: redis

检查下部署好的服务并验证metrics能够获取到数据

##
kubectl get po,ep,svc -n redis

##
curl 10.108.158.74:9121/metrics

创建 ServiceMonitor

现在 Prometheus 访问redis,接下来创建 ServiceMonitor 对象即可,ServiceMonitor 通过label标签和对应的 endpoint svc 进行关联。
vim proms-redis-serviceMonitor.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: redis-k8s
  namespace: redis  # 特别注意要在redis的命名空间上
  labels:
    app: redis
spec:
  jobLabel: redis
  endpoints:
  - port: redis-exporter
    interval: 30s
    scheme: http
  selector:
    matchLabels:
      app: redis
  namespaceSelector:
    matchNames:
    - redis

执行创建并查看 serviceMonitor

##
 kubectl get ServiceMonitor -n monitoring|grep redis

现在切换到PrometheusUI界面查看targets,会发现多了刚才创建的redis-k8s监控项。

添加告警规则

想自定义一个报警规则,只需要创建一个具有 prometheus=k8s role=alert-rules 标签的 PrometheusRule 对象就行了,比如现在我们添加一个redis是否可用的报警,我们可以通过redis_up 这个指标检查redis是否启动。

创建文件 prometheus-redisRules.yaml:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    prometheus: k8s
    role: alert-rules
  name: redis-rules
  namespace: redis
spec:
  groups:
  - name: redis
    rules:
    - alert: Redis 不可用
      annotations:
        summary: redis instance info
        description: If redis_up == 0, redis will be unavailable
      expr: |
        redis_up == 0
      for: 3m
      labels:
        severity: critical

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叱咤少帅(少帅)

如果文章对你有帮助就打赏下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值