在前面,我们单纯手工管理Prometheus还是复杂一些,因为它有很多东西需要我们去维护,特别是当有很多指标的时候需要我们去手工抓取和配置。

前面我们用自定义的方式来对 Kubernetes 集群进行监控,基本上也能够完成监控报警的需求了。但实际上对上 Kubernetes 来说,还有更简单方式来监控报警,那就是 Prometheus Operator。Prometheus Operator 为监控 Kubernetes 资源和 Prometheus 实例的管理提供了简单的定义,简化在 Kubernetes 上部署、管理和运行 Prometheus 和 Alertmanager 集群。(在部署Prometheus的实例的时候不需要像之前一样挨个去写Prometheus的资源对象,只需要去定义CRD就能够帮我跑这样一个实例)

这里使用的是另外一个项目Kube-prometheus。

operator相对于是我们的控制器,CRD+控制器,operator里面会去定义相关的CRD,然后还包括控制器的实现。

上面这些都可以通过CRD对象去定义。在真正使用的时候会使用kube-prometheus这个项目

它里面将关于k8s集群监控的一些样例全部放在了这个项目里面,所以一般使用这个项目就可以了。

介绍


Prometheus Operator 为 Kubernetes 提供了对 Prometheus 机器相关监控组件的本地部署和管理方案,该项目的目的是为了简化和自动化基于 Prometheus 的监控栈配置,主要包括以下几个功能:

  • Kubernetes 自定义资源:使用 Kubernetes CRD 来部署和管理 Prometheus、Alertmanager 和相关组件。
  • 简化的部署配置:直接通过 Kubernetes 资源清单配置 Prometheus,比如版本、持久化、副本、保留策略等等配置。
  • Prometheus 监控目标配置:基于熟知的 Kubernetes 标签查询自动生成监控目标配置,无需学习 Prometheus 特地的配置。

首先我们先来了解下 Prometheus Operator 的架构图:(operator本身就是CRD+控制器,里面会去定义一些自定义的资源对象)

上图是 Prometheus-Operator 官方提供的架构图,各组件以不同的方式运行在 Kubernetes 集群中,其中 Operator 是最核心的部分,作为一个控制器,他会去创建 Prometheus、ServiceMonitor、AlertManager 以及 PrometheusRule 等 CRD 资源对象,然后会一直 Watch 并维持这些资源对象的状态。

在最新版本的 Operator 中提供了一下几个 CRD 资源对象:

  • Prometheus(和我们之前的Prometheus不一样,之前的Prometheus是deployment部署的应用,这个地方是对象)
  • Alertmanager
  • ServiceMonitor(关联一些对应的service,service后面就是endpoint,它会将具有监控服务的关联到servicemonitor这边来,当你去创建,修改,删除的时候,operator就会watch到,watch到之后就会将目标重新更新到Prometheus里面去,这样就可以对数据抓取,监控)
  • PodMonitor(有些pod未必有对应的service,比如Job和cronjob这些,如果你想监控job管理的pod那么你可以使用这个)
  • Probe(黑盒监控)
  • ThanosRuler
  • PrometheusRule(报警规则)
  • AlertmanagerConfig

之前都是用配置文件来配置,现在都是通过资源对象。

Prometheus


该 CRD 声明定义了 Prometheus 期望在 Kubernetes 集群中运行的配置,提供了配置选项来配置副本、持久化、报警实例等。

对于每个 Prometheus CRD 资源,Operator 都会以 StatefulSet 形式在相同的命名空间下部署对应配置的资源,Prometheus Pod 的配置是通过一个包含 Prometheus 配置的名为 <prometheus-name> 的 Secret 对象声明挂载的。(它的配置是以secret形式自动生成挂载进去的)

该 CRD 根据标签选择来指定部署的 Prometheus 实例应该覆盖哪些 ServiceMonitors(能够监听哪些servicemonitor),然后 Operator 会根据包含的 ServiceMonitors 生成配置,并在包含配置的 Secret 中进行更新。(如果没有生效,那么很有可能Prometheus没有和servicemonitor关联上)

如果未提供对 ServiceMonitor 的选择,则 Operator 会将 Secret 的管理留给用户,这样就可以提供自定义配置,同时还能享受 Operator 管理 Operator 的设置能力。

Alertmanager


该 CRD 定义了在 Kubernetes 集群中运行的 Alertmanager 的配置,同样提供了多种配置,包括持久化存储。

对于每个 Alertmanager 资源,Operator 都会在相同的命名空间中部署一个对应配置的 StatefulSet,Alertmanager Pods 被配置为包含一个名为 <alertmanager-name> 的 Secret,该 Secret 以 alertmanager.yaml 为 key 的方式保存使用的配置文件。

当有两个或更多配置的副本时,Operator 会在高可用模式下运行 Alertmanager 实例。

ThanosRuler


该 CRD 定义了一个 Thanos Ruler 组件的配置,以方便在 Kubernetes 集群中运行。通过 Thanos Ruler,可以跨多个 Prometheus 实例处理记录和警报规则。

一个 ThanosRuler 实例至少需要一个 queryEndpoint,它指向 Thanos Queriers 或 Prometheus 实例的位置。queryEndpoints 用于配置 Thanos 运行时的 --query 参数,更多信息也可以在 Thanos 文档中找到。

ServiceMonitor


该 CRD 定义了如何监控一组动态的服务,使用标签选择来定义哪些 Service 被选择进行监控。这可以让团队制定一个如何暴露监控指标的规范,然后按照这些规范自动发现新的服务,而无需重新配置。

为了让 Prometheus 监控 Kubernetes 内的任何应用,需要存在一个 Endpoints 对象,Endpoints 对象本质上是 IP 地址的列表,通常 Endpoints 对象是由 Service 对象来自动填充的,Service 对象通过标签选择器匹配 Pod,并将其添加到 Endpoints 对象中。一个 Service 可以暴露一个或多个端口,这些端口由多个 Endpoints 列表支持,这些端点一般情况下都是指向一个 Pod。

Prometheus Operator 引入的这个 ServiceMonitor 对象就会发现这些 Endpoints 对象,并配置 Prometheus 监控这些 Pod。ServiceMonitorSpec 的 endpoints 部分就是用于配置这些 Endpoints 的哪些端口将被 scrape 指标的。

注意:endpoints(小写)是 ServiceMonitor CRD 中的字段,而 Endpoints(大写)是 Kubernetes 的一种对象。

ServiceMonitors 以及被发现的目标都可以来自任何命名空间,这对于允许跨命名空间监控的场景非常重要。使用 PrometheusSpec 的 ServiceMonitorNamespaceSelector,可以限制各自的 Prometheus 服务器选择的 ServiceMonitors 的命名空间。使用 ServiceMonitorSpec 的 namespaceSelector,可以限制 Endpoints 对象被允许从哪些命名空间中发现,要在所有命名空间中发现目标,namespaceSelector 必须为空:

spec:namespaceSelector:any: true

PodMonitor


该 CRD 用于定义如何监控一组动态 pods,使用标签选择来定义哪些 pods 被选择进行监控。同样团队中可以制定一些规范来暴露监控的指标。

Pod 是一个或多个容器的集合,可以在一些端口上暴露 Prometheus 指标。

由 Prometheus Operator 引入的 PodMonitor 对象会发现这些 Pod,并为 Prometheus 服务器生成相关配置,以便监控它们。

PodMonitorSpec 中的 PodMetricsEndpoints 部分,用于配置 Pod 的哪些端口将被 scrape 指标,以及使用哪些参数。

PodMonitors 和发现的目标可以来自任何命名空间,这同样对于允许跨命名空间的监控用例是很重要的。使用 PodMonitorSpec 的 namespaceSelector,可以限制 Pod 被允许发现的命名空间,要在所有命名空间中发现目标,namespaceSelector 必须为空:

spec:namespaceSelector:any: true

PodMonitor 和 ServieMonitor 最大的区别就是不需要有对应的 Service。

Probe


该 CRD 用于定义如何监控一组 Ingress 和静态目标。除了 target 之外,Probe 对象还需要一个 prober,它是监控的目标并为 Prometheus 提供指标的服务。例如可以通过使用 blackbox-exporter 来提供这个服务。

PrometheusRule


用于配置 Prometheus 的 Rule 规则文件,包括 recording rules 和 alerting,可以自动被 Prometheus 加载。(以前我们创建了之后,需要重新加载Prometheus,现在直接使用这个对象就可以)

AlertmanagerConfig


在以前的版本中要配置 Alertmanager 都是通过 Configmap 来完成的,在 v0.43 版本后新增该 CRD,可以将 Alertmanager 的配置分割成不同的子对象进行配置,允许将报警路由到自定义 Receiver 上,并配置抑制规则。

AlertmanagerConfig 可以在命名空间级别上定义,为 Alertmanager 提供一个聚合的配置。这里提供了一个如何使用它的例子。不过需要注意这个 CRD 还不稳定。

这样我们要在集群中监控什么数据,就变成了直接去操作 Kubernetes 集群的资源对象了,是这样比之前手动的方式就方便很多了。(之前都是去管理configmap,管理我们配置,现在直接管理我们的crd对象)

Prometheus Operator概述相关推荐

  1. 在Kubernetes上使用Prometheus Operator监视应用程序

    您可以使Prometheus配置了解您的应用程序在其中运行的Kubernetes环境.在先前的博客文章中 ,我已经描述了如何手动执行该操作. Prometheus Operator是Kubernete ...

  2. Hands-on Lab (15) - 使用Prometheus Operator监控应用

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在OpenShift 4.8环境中验证 文章目录 监控OpenShift集群 监控应用 部署被监控的应用 通过Operator ...

  3. Prometheus Operator + blackbox_exporter 监控Web页面

    背景 目前生产环境使用Zabbix自带的web监控模块对所有子优鸟页面进行监控,由于目前Zabbix服务器为单节点,经常出现取不到web监控数据的情况.现将web监控迁移到Prometheus上. 但 ...

  4. Kubernetes更优雅的监控工具Prometheus Operator

    Kubernetes更优雅的监控工具Prometheus Operator [TOC] 1. Kubernetes Operator 介绍 在 Kubernetes 的支持下,管理和伸缩 Web 应用 ...

  5. Prometheus Operator 配置PrometheusRule告警规则

    PrometheusRule 用于配置 Prometheus 的 Rule 规则文件,包括 recording rules 和 alerting,可以自动被 Prometheus 加载. 配置 Pro ...

  6. Prometheus Operator 部署

    安装 为了使用 Prometheus-Operator,这里我们直接使用 kube-prometheus 这个项目来进行安装(提供了很多的内置规则,可以直接拿来使用),该项目和 Prometheus- ...

  7. k8s部署Kube Prometheus(Prometheus Operator)

    摘要 本文通过Prometheus-operator框架一键化安装prometheus.alertmanage.granfana,并配置企业微信api以及告警推送,搭建 prometheus 的前提环 ...

  8. Prometheus Operator(五) 修改数据存储时间

    Prometheus Operator(五) 修改数据存储时间 前面说了prometheus operator持久化的问题,但是还有一个问题很多人都忽略了,那就是prometheus operator ...

  9. Prometheus(一)——概述、监控体系、生态组件、部署

    目录 前言:zabbix与prometheus区别 一.Prometheus概述 1.1  Prometheus具有以下特性 1.2  Prometheus核心组件 二.运维监控平台设计思路 三.pr ...

最新文章

  1. 计算机基础知识掌握欠缺,《计算机基础知识》实验教学改革探讨.pdf
  2. Android API中文系列总结
  3. JAVA IO修改文本内容
  4. c++动态绑定和动态绑定
  5. QT的QCullFace类的使用
  6. 从Maven中央仓库网站下载jar包的两种方式,将会伴随java后端开发者的整个职业生涯
  7. 后疫情时代,那些迎来爆发机会的产业
  8. CCF NOI1029 信息加密
  9. 解决chrome/Edge提示您的连接不是私密连接的方法
  10. 怎么调出全局搜索_局部静态变量只能初始化一次?它是怎么实现的
  11. Oracle v$sql,v$sqlarea,v$sqltext区别
  12. phonegap文件上传(java_php),Android应用开发之使用PhoneGap实现位置上报功能
  13. 2、认识常见网络设备
  14. 图像识别并用机械手进行抓取
  15. Mac:如何配置java和maven环境变量
  16. linux用sed替换字符,Linux中使用sed命令替换字符串小结
  17. 【软考信息系统项目管理师】必背重点之信息化和信息系统
  18. 赛博朋克2077 夜曲余烬电梯无法进入+保镖堵门bug解决方法
  19. Oracle数据库表空间数据文件最大容量以及存满时处理方法
  20. opencv实现魔幻笔效果

热门文章

  1. Linux:apt命令
  2. 大揭秘!Python处理办公自动化的10大场景!
  3. 中国就业薪酬最高的十所大学
  4. 起来,起来........
  5. Flash/Flex/AIR:Flex简介
  6. Zinnia库的学习和使用过程
  7. 为openjweb横空出世贺七律一首
  8. 夜间模式的开启与关闭,父模板的制作(2017.11.2)
  9. 家庭媒体中心解决方案(一、简介)
  10. modtran matlab,大气辐射传输模型(6S,MODTRAN)