36.5 自定义指标接入prometheus-operator

server/2024/12/22 14:12:21/

prometheusoperator_0">prometheus-operator优势总结

  • 自定义的采集配置接入更方便,只要定义serviceMonitor即可
  • 采集的参数修改也很方便,对比之前只能由prometheus管理员修改job段配置
  • 告警配置也是

prometheusoperator_6">prometheus-operator劣势总结

  • 数据的长期存储没有解决
  • 高可用性和扩展性没解决

什么是 Kubernetes Operator?

  • Operator 是特定于 Kubernetes 的应用程序 (pod),可自动配置、管理和优化其他 Kubernetes 部署。它们作为自定义控制器实现。
  • Kubernetes 操作员封装了部署和扩展应用程序的专有技术,并直接执行与 API 通信的算法决策。

Kubernetes Operator 能做什么:

基本上,任何可以由人工管理员表示为代码的内容都可以在 Kubernetes Operator 内实现自动化。

  • 根据 Kubernetes 集群的规格,为您的部署安装并提供合理的初始配置和大小调整。
  • 执行部署和 Pod 的实时重新加载,以适应任何用户请求的参数修改(热配置重新加载)。
  • 根据性能指标自动扩大或缩小。
  • 执行备份、完整性检查或任何其他维护任务。

Prometheus Operator

  • Prometheus Operator提供k8s service 和 deployment 监控的定义,并且管理普罗米修斯实例的部署

Prometheus Operator具体能做什么

  • 执行完整 Kubernetes-Prometheus 堆栈的初始安装和配置

    • Prometheus servers
    • Alertmanager
    • Grafana
    • Host node_exporter
    • kube-state-metrics
  • 使用ServiceMonitor实体定义监控指标endpoint,并自动配置到prometheus

  • 使用 Operator CRD 和 ConfigMap 自定义和扩展服务,使我们的配置完全可移植且具有声明性

Operator 定义了下面的CRD

  • Prometheus,它定义了所需的 Prometheus 部署。Operator 始终确保与资源定义匹配的部署正在运行。
  • ServiceMonitor,它以声明方式指定应如何监视服务组。Operator 根据定义自动生成 Prometheus 抓取配置。
  • PrometheusRule,它定义了所需的 Prometheus 规则文件,该文件可由包含 Prometheus 警报和记录规则的 Prometheus 实例加载。
  • Alertmanager,它定义了所需的 Alertmanager 部署。Operator 始终确保与资源定义匹配的部署正在运行。
  • Operator 存储库中的kube-prometheus目录包含默认服务和配置,因此您不仅可以获得 Prometheus Operator 本身,还可以获得完整的设置,您可以从一开始就开始使用和自定义。

prometheusprometheusoperator_49">kube-prometheusprometheus-operator的关系

  • Operator 项目中的kube-prometheus目录包含默认服务和配置
  • 从中不仅可以获得 Prometheus Operator 本身,还可以获得完整的设置,您可以从一开始就开始使用和自定义。

架构图

在这里插入图片描述

ServiceMonitor作用

在这里插入图片描述

  • ServiceMonitor 描述了 Prometheus 监视的目标集
  • 如果存在与 ServiceMonitor 条件匹配的新指标端点,则此目标将自动添加到选择该 ServiceMonitor 的所有 Prometheus 服务器。
  • ServiceMonitor 的目标是 Kubernetes 服务,而不是 pod 直接公开的端点
  • 按命名空间、标签等过滤端点
  • 定义不同的抓取端口
  • 定义所有额外的抓取参数,如抓取间隔、使用的协议、TLS 凭证、重新标记策略等。

使用serviceMonitor采集我们自定义的指标

部署之前的ink8s-pod-metrics 在第19章中

编写 myPod_serviceMonitor

  • endpoints代表最后采集的targets
    • interval采集间隔
    • port 采集端口
    • scheme采集协议
  • jobLabel: app.kubernetes.io/name 的意思是最后job标签使用这个标签的value
  • namespaceSelector代表过滤哪个ns下的svc
  • selector代表svc的标签选择器
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:labels:app.kubernetes.io/name: ink8s-pod-metricsname: ink8s-pod-metricsnamespace: monitoring
spec:endpoints:- interval: 15sport: https-selfscheme: httpjobLabel: app.kubernetes.io/namenamespaceSelector:matchNames:- defaultselector:matchLabels:app.kubernetes.io/name: ink8s-pod-metrics

编写 myPod_svc

  • 在default ns下的svc
  • 打上标签app.kubernetes.io/name: ink8s-pod-metrics 和上面的serviceMonitor对应
  • 端口和容器端口对应上,端口名字和上面的serviceMonitor对应
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/name: ink8s-pod-metricsname: ink8s-pod-metricsnamespace: default
spec:clusterIP: Noneports:- name: https-selfport: 8080targetPort: 8080selector:app: ink8s-pod-metrics

部署

 kubectl apply -f .

检查target页面和discovery页面结果

  • target页面的截图
    在这里插入图片描述

  • discovery的结果
    在这里插入图片描述

  • graph查询的结果
    在这里插入图片描述

使用PrometheusRule添加自定义指标的告警规则

yaml

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:labels:app.kubernetes.io/name: ink8s-pod-metricsprometheus: k8srole: alert-rulesname: ink8s-pod-metrics-k8s-prometheus-rulesnamespace: monitoring
spec:groups:- name: ink8s-pod-metrics-k8s-prometheus-rules01rules:- alert: pod_control_plane_pod_detail01annotations:description: Prometheus {{$labels.namespace}}/{{$labels.pod}} has failed to reload its configuration.runbook_url: https://github.com/prometheus-operator/kube-prometheus/wiki/prometheusbadconfigsummary: testexpr: |ink8s_pod_metrics_get_pod_control_plane_pod_detail > 0for: 1mlabels:severity: critical
  ruleSelector:matchLabels:prometheus: k8srole: alert-rules

应用

rule规则页面查看效果

在这里插入图片描述

  • firing的结果
    在这里插入图片描述

prometheusoperator_203">prometheus-operator优势总结

  • 自定义的采集配置接入更方便,只要定义serviceMonitor即可
  • 采集的参数修改也很方便,对比之前只能由prometheus管理员修改job段配置
  • 告警配置也是

prometheusoperator_209">prometheus-operator劣势总结

  • 数据的长期存储没有解决
  • 高可用性和扩展性没解决

http://www.ppmy.cn/server/152245.html

相关文章

Linux文件属性 --- 查看修改日期、时间、时区,查看日历

1.查看日期 使用date 命令可以显示或设置系统的时间或日期 ,下面为比较常用的参数列举。 date [参数] [日期格式] 写法功能描述date显示当前时间date %Y显示当前年份date %m显示当前月份date %d显示当前天数%H小时(00~23)%I小时(…

Unity Runtime控制编辑器的一些操作

运行时修改Game窗口尺寸 //设置竖屏 public void ChangePortrait() {Assembly assembly typeof(UnityEditor.EditorWindow).Assembly;Type type assembly.GetType("UnityEditor.GameView");var gameView UnityEditor.EditorWindow.GetWindow(type);//可以反射出其他…

蓝桥杯 2024 国 B【选数概率】(AC)

题目描述 一个数组中有 a a a 个 1 1 1, b b b 个 2 2 2, c c c 个 3 3 3。设 P i , j P_{i,j} Pi,j​ 表示在数组中随机选取两个数,其中一个数为 i i i,另一个数为 j j j 的概率。比如 P 1 , 2 a b C ( a b c , 2 ) …

使用JUnit进行集成测试

在软件开发中,集成测试是一个非常重要的环节。 它可以确保不同模块之间的协作正确性,同时也可以发现系统的潜在问题。 JUnit是一个流行的Java测试框架,它可以帮助我们编写和运行各种类型的测试,包括单元测试和集成测试。 本文将…

如何高效调试复杂布局?Layout Inspector 的 Toggle Deep Inspect 完全解析

Layout Inspector 是 Android Studio 提供的一个强大工具,用于分析和调试 Android 应用的 UI 布局。前置条件是app是debug调试状态,它允许你在应用运行时实时查看布局层次结构、UI 元素的属性,并帮助你诊断 UI 渲染问题。 Toggle Deep Inspe…

Hadoop HA高可用搭建

Hadoop HA高可用搭建 原理说明 这个步骤不用做,目前大数据虚拟机已经配置好了! echo DNS18.8.8.8 >> /etc/sysconfig/network-scripts/ifcfg-ens33 systemctl restart networkping www.baidu.com安装软件 node1/node2/node3: yum …

论文解读之Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(CoT)

最近以及本篇博客将记录博主最近接触的提升LLM的较新方法,总结其核心以备面试及其他场景回顾时所需。 一、简介 CoT的核心在于在prompt中使得模型将较大的问题输入拆解逐步的思维链的输出方案,属于prompt中的技巧,可以提升LLM在复杂问题上的…