• Prometheus Operator 自定义监控添加redis explorer


    前言

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

    • additional 方式
    • serviceMonitor方式

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

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

    官网

    1. ###
    2. https://prometheus-operator.dev/docs/prologue/introduction/
    3. ## github
    4. https://github.com/prometheus-operator/prometheus-operator
    5. ###
    6. 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

    参考

    1. ##
    2. https://blog.csdn.net/shigf_2015/article/details/110383821
    3. ##
    4. https://blog.csdn.net/wc1695040842/article/details/109161855

    添加Redis Explorer 实践

    部署Redis

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

    1. ---
    2. apiVersion: v1
    3. kind: Namespace
    4. metadata:
    5. name: redis
    6. ---
    7. apiVersion: apps/v1
    8. kind: Deployment
    9. metadata:
    10. namespace: redis
    11. name: redis
    12. spec:
    13. replicas: 1
    14. selector:
    15. matchLabels:
    16. app: redis
    17. template:
    18. metadata:
    19. annotations:
    20. prometheus.io/scrape: "true"
    21. prometheus.io/port: "9121"
    22. labels:
    23. app: redis
    24. spec:
    25. containers:
    26. - name: redis
    27. image: redis
    28. resources:
    29. requests:
    30. cpu: 100m
    31. memory: 100Mi
    32. ports:
    33. - containerPort: 6379
    34. - name: redis-exporter
    35. image: oliver006/redis_exporter:latest
    36. resources:
    37. requests:
    38. cpu: 100m
    39. memory: 100Mi
    40. ports:
    41. - containerPort: 9121

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

    创建 Redis Service

    1. apiVersion: v1
    2. kind: Service
    3. metadata:
    4. name: redis-svc
    5. namespace: redis
    6. labels:
    7. app: redis
    8. spec:
    9. type: NodePort
    10. ports:
    11. - name: redis
    12. port: 6379
    13. targetPort: 6379
    14. - name: redis-exporter
    15. port: 9121
    16. targetPort: 9121
    17. selector:
    18. app: redis

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

    1. ##
    2. kubectl get po,ep,svc -n redis
    3. ##
    4. curl 10.108.158.74:9121/metrics

    创建 ServiceMonitor

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

    1. apiVersion: monitoring.coreos.com/v1
    2. kind: ServiceMonitor
    3. metadata:
    4. name: redis-k8s
    5. namespace: redis # 特别注意要在redis的命名空间上
    6. labels:
    7. app: redis
    8. spec:
    9. jobLabel: redis
    10. endpoints:
    11. - port: redis-exporter
    12. interval: 30s
    13. scheme: http
    14. selector:
    15. matchLabels:
    16. app: redis
    17. namespaceSelector:
    18. matchNames:
    19. - redis

    执行创建并查看 serviceMonitor

    1. ##
    2. kubectl get ServiceMonitor -n monitoring|grep redis

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

    添加告警规则

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

    创建文件 prometheus-redisRules.yaml:

    1. apiVersion: monitoring.coreos.com/v1
    2. kind: PrometheusRule
    3. metadata:
    4. labels:
    5. prometheus: k8s
    6. role: alert-rules
    7. name: redis-rules
    8. namespace: redis
    9. spec:
    10. groups:
    11. - name: redis
    12. rules:
    13. - alert: Redis 不可用
    14. annotations:
    15. summary: redis instance info
    16. description: If redis_up == 0, redis will be unavailable
    17. expr: |
    18. redis_up == 0
    19. for: 3m
    20. labels:
    21. severity: critical

  • 相关阅读:
    代码随想录二刷 day04 | 链表之 24两两交换链表中的节点 19删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
    记录一次win10系统27寸屏幕字体模糊的优化
    Qt之postEvent
    【iOS】折叠cell
    Flutter 精品项目大全之 蛋糕店在线商城项目支持定义tabbar(教程含源码)
    【三维点云】2-三维点云表征
    2022年最新前端面试题,持续更新
    集成 push kit 签名配置报6003/收不到华为推送
    golang流程控制
    GFS分布式文件系统
  • 原文地址:https://blog.csdn.net/knight_zhou/article/details/126241171