Prometheus 监控平台组件深度讲解

Prometheus 的重要性和流行度已经无需多言。直入主题,本文对 Prometheus 监控平台的各个组件做深度讲解,希望能帮助读者更好地理解 Prometheus。

监控系统的核心逻辑

对于一套监控系统而言,核心就是采集数据并存储,然后做告警判定、数据展示分析,这个 专栏文章 详细讲解了这个数据流架构,整个流程图如下:

监控系统的核心逻辑

Prometheus 有多个组件(或者说多个进程),协同工作。下面我们逐个组件做一概述:

  • GitHub - prometheus/prometheus: The Prometheus monitoring system and time series database.:这是 prometheus 进程的代码仓库,功能包括抓取远端监控指标、存储时序数据、暴露查询接口支持数据查询、支持告警规则配置并做告警判定
  • GitHub - prometheus/alertmanager: Prometheus Alertmanager:这是 alertmanager 进程的代码仓库,功能包括接收 prometheus 产生的告警事件,对事件做去重、分组、路由、通知等操作

我把监控系统的流程图给变换一下颜色:

20240510095340

  • prometheus 进程承接了图中蓝色功能,即:采集器、时序库、告警判定引擎
  • alertmanager 进程负责告警事件分发,即图中红色部分
  • 数据展示分析,橙色部分,Prometheus 做的比较少,Prometheus 确实有一个简单的 Web UI,不过比较简陋,一般使用更为强大的 Grafana 来做数据展示分析

大家可能还听过各类 Exporter,难道这些 Exporter 就没有一席之地了么?Exporter 也是很重要的,可以看做是一个适配器,把监控目标的指标暴露出来,让 Prometheus 来抓取。或者把 Exporter 看做是采集器的一部分也行,无伤大雅,理解整个数据流就可以,无需在词汇上纠结。

想象一下,假设你有一个 Application,一个 Go 程序或者 Java Spring Boot 程序,Application 把自身的运行状态指标通过 /metrics 接口暴露出来,Prometheus 直接抓取即可,这里不需要什么 Exporter。但是一些成熟的数据库、中间件,比如 MySQL,Redis,这些软件没有直接暴露 Prometheus 格式的指标,Prometheus 没法直接来抓取,怎么办呢?当然,可以完善 Prometheus 的抓取器,让他不仅可以抓取 HTTP 协议的 /metrics 数据,也可以抓取 MySQL、Redis 等的数据,但是这样的话,Prometheus 代码会变得臃肿,不利于维护。所以,Prometheus 采用了 Exporter 的设计,Exporter 就是一个适配器,使用 Exporter 去抓取这些监控目标的指标,然后暴露为 Prometheus 格式的指标,Prometheus 再去抓取这些 Exporter 暴露的指标。这样做的好处是,Prometheus 代码保持简洁,Exporter 代码可以独立维护,提升整体可维护性。而且 Exporter 可以发动全网力量,让大家共建,一举多得。

但是,Exporter 会有很多不同的进程,水平参差不齐,从部署的角度可能略麻烦,所以市面上也有一些开源项目,把众多 Exporter 整合在一起变成一个进程,比如 Grafana-agent、Cprobe,当然,还有大名鼎鼎的 OpenTelemetry 也是这个思路。

了解了上述知识,我们再来看 Prometheus 官网的架构图。

Prometheus 架构

20240510102052

  • Prometheus Server:是 prometheus 进程的一部分功能,负责数据的抓取、存储、HTTP 接口查询
    • Retrieval:数据抓取,从监控目标那里拉取监控指标,Prometheus 定义了一个标准协议,只要监控目标支持这个协议,Prometheus 就可以抓取
    • TSDB:时序库,Prometheus 会把抓取到的监控指标存储在本地,单点的。如果想要高可用,可以使用 Thanos、VictoriaMetrics 等
    • HTTP server:Prometheus 会暴露 HTTP 接口,供外部查询监控指标
  • Service Discovery:服务发现,是 prometheus 进程的一部分功能,Prometheus 会定期去服务发现组件那里拉取监控目标的列表,省去了手动配置的繁琐,当然,前提是这些监控目标得注册到服务发现组件上
    • Kubernetes SD:基于 Kubernetes 的服务发现机制,比如通过 apiserver 拉取 pod 列表、service 列表作为监控目标
    • File SD:基于文件的服务发现机制,从配置文件中读取监控目标列表
    • HTTP SD:基于 HTTP 的服务发现机制,从 HTTP 接口中读取监控目标列表
    • Consul SD:基于 Consul 的服务发现机制,从 Consul 中读取监控目标列表
    • 等等
  • Pushgateway:是一个单独的进程,用于接收短生命周期的监控指标,比如批处理任务的监控指标,因为批处理任务通常不会暴露 HTTP 接口,Prometheus 就没法拉取了,所以批处理任务需要主动推送监控指标到 Pushgateway,Prometheus 再去拉取 Pushgateway 的监控指标
  • Alertmanager:负责接收 prometheus 产生的告警事件,对事件做去重、分组、路由、通知等操作。如果想要更高阶的收敛、降噪、排班、认领、升级等功能,可以把 Alertmanager 和一些第三方工具结合使用,比如 PagerDuty、FlashDuty、OpsGenie 等
  • Prometheus web UI:prometheus 进程启动之后,会暴露一个简单的 Web UI,可以查看监控指标,但是功能比较简陋,一般使用 Grafana 来做数据展示分析
  • Grafana:是一个独立的进程,不属于 Prometheus 项目的一部分,不过可以和 Prometheus 整合。用于数据展示分析,功能非常强大,支持多种数据源,比如 Prometheus、Elasticsearch、Loki 等,支持多种图表类型,比如折线图、柱状图、饼图、热力图等

Prometheus 架构的问题

主要问题的容量扩展问题。Prometheus 一个进程干了很多事情,部署非常简单,弊端就是单点没法扩展,比如告警引擎是单点、存储是单点、采集是单点,如果体量很大或者对稳定性要求比较高,就需要通过其他手段来解决了。

比如 VictoriaMetrics 项目,就是完全兼容 Prometheus 生态的协议和接口,但是提供了分布式能力。存储使用 vmstorage 进程,查询使用 vmselect 进程,数据接收使用 vminsert,告警使用 vmalert,数据抓取使用 vmagent,组件确实多了,但是每个组件都可以部署多个实例组成集群,提升了整体的可用性和容量。VictoriaMetrics 项目的架构图如下:

或者还有一个办法,就是直接部署多套 Prometheus,比如 DBA 自己用一个 Prometheus,Hadoop 团队自己用一个 Prometheus,这样可以解决容量问题,没法解决数据单点存储问题。如何解决单点问题?双写!比如 DBA 团队,部署两个 Prometheus,采集相同的数据,两个 Prometheus 数据相同,规则相同,告警也会产生两份,可以通过 Alertmanager 做告警去重,这样就解决了单点问题。

Prometheus 规则管理问题

最后一个问题,简单聊聊 Prometheus 的规则管理问题。Prometheus 的规则是通过配置文件定义的,这个配置文件是一个 yaml 文件,里面定义了监控规则、告警规则等。如果一个公司有很多套 Prometheus,规则分散在多个 yaml 中不方便管理,希望能有一套易用的、权限隔离的 UI,把监控能力开放给全公司各个团队并让他们自服务,别啥事都来找监控团队,这个时候就需要一个规则管理系统,比如夜莺(Nightingale)。如果有这方面的痛点可以去了解一下,如果 Prometheus 自身的玩法就感觉够用了,那更好,不用再引入新的组件。

小结

文本详细介绍了 Prometheus 监控平台的各个组件,希望能帮助读者更好地理解 Prometheus。使用任何一个开源项目,都要了解其原理,这样才能了解其最佳实践,出了问题也能有排查思路。切莫只是解决一些表面问题,得过且过,这样是不会有长进的,35岁之后,容易被干。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt模型视图代理之QTableView应用的简单介绍

往期回顾 Qt绘图与图形视图之绘制带三角形箭头的窗口的简单介绍-CSDN博客 Qt绘图与图形视图之Graphics View坐标系的简单介绍-CSDN博客 Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍-CSDN博客 Qt模型视图代理之QTableView应用的简单介绍 一、最终效果 二、设计思路 这里…

数据结构——快速排序

基本思想: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,…

IT服务台的优势

我们谈谈IT服务台的一些好处,以更好地了解其重要性。IT 服务台为所有利益相关者(技术人员和最终用户)提供服务带来了效率。例如,三层 IT 服务台可以在第 0 层拥有自助服务门户,在第 1、2 和 3 层拥有技术人员&#xff…

1_1. Linux简介

1_1. Linux简介 文章目录 1_1. Linux简介1. 我们用linux来干嘛2. 计算机组成3. 操作系统4. Linux哲学思想5. Linux目录6. Linux分区类型 1. 我们用linux来干嘛 1. 大家都知道linux是一个操作系统,它是一个基础的软件,操作系统是硬件与应用程序的中间层。…

发布GPT-5的方式可能会与以往不同;开源vocode使用 AI 自动拨打电话;开源gpt智能对话客服工具;AI自动写提示词

✨ 1: vocode 用AI通过声音与用户进行实时交流 Vocode是一个旨在帮助开发者快速构建基于声音的大型语言模型(LLM)应用程序的开源库。简单来说,如果你想要开发一个能够通过声音与用户进行实时交流的应用,比如电话机器人、语音助手…

weditor安装的时候产生的问题

先放出来github的地址https://github.com/alibaba/web-editor,这个上面给了两种安装方式一种是: pip3 install -U weditor 这种方式会报错误, 具体原因我也不知道。那就采用第二种方式 git clone https://github.com/openatx/weditor pip3…

mysql执行流程

MySQL 架构与SQL执行流程 MySQL主要而分为server层和存储引擎层两部分 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等)&#…

AI宝库:全球精选AI工具网站一网打尽,创新智慧触手可及

​🌈 个人主页:danci_ 🔥 精选专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 探秘AI之巅,一键解锁未来工具!立即点击,开启智能新纪元&#…

天猫最热销的三款随身WiFi,哪一款直播最好用?2024公认最好的随身WiFi,天猫上的随身wifi是正规产品吗

近期有小伙伴问我:“小编、小编我要当户外博主了,想买一个随身WiFi,但是天猫榜单前三的随身WiFi自己都没有听说过,到底入手哪个比较好?”三款随身WiFi呢,分别是格行随身WiFi、迅优随身WiFi、小米随身WiFi&a…

2024年电工杯数学建模B题思路 中国电机工程学会杯建模思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

6 7 8 9 11 12 15 17 18 20 22cm散热风扇防护网风扇金属网罩

品牌:威驰 颜色分类:60mm/6cm金属网,80mm/8cm金属网,92mm/9.2cm金属网,110mm/11cm金属网,120mm/12cm金属网,150mm/15cm金属网,172mm/17.2cm金属网,200mm/20cm金属网,280mm/28cm金属网 1产品参数,防护网罩60 80 90 110 120 125 145 150 180…

Python专题:八、列表(2)

Python的内置数据类型——列表 定义一个列表a,直接遍历,列表元素 for in循环,通过索引遍历列表 range(参数一,参数二) range(len(a))range(0,len(a)) in 关键字判断元素是否在列表…

Debian12 Linux lsof 查询端口 并杀进程 sh文件编写过程记录

目录 一、需求描述 二、需求处理思路 1、根据关键字查询进程号 2、根据端口查询进程号 3、根据进程号杀进程 三、编写shell 脚本 总结 一、需求描述 在linux环境上,已知某个进程的运行关键字以及运行端口,要求根据已知信息查杀对应进程。要求编写…

Codigger:Vim的革新者,提升开发体验和功能性

深知Vim在编程和文本编辑领域的卓越地位,因此,在设计和开发过程中,Codigger始终将保留Vim的核心功能和高度定制能力作为首要任务。然而,Vim的复杂性和高度定制性也让很多新用户望而却步。为了降低这种使用门槛,Codigge…

Python起风了钢琴曲

写在前面 那年夏天,有《纸短情长》,有《稻香》,有《可不可以》,有《体面》,还有《起风了》……本期小编给大家分享Python弹奏的《起风了》钢琴曲,一起来看看吧! 《起风了》 《起风了》是一首深…

【工具篇】-Powershell

什么是powershell? Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能。本文来介绍一下它的打开方法和常用的命令 什么是“.NET”? 什么是".NET"?htt…

2. 感知机算法和简单 Python 实现

目录 1. 感知机介绍 1.1 背景 1.2 定义 1.2.1 权重 1.2.2 阈值 1.2.3 偏置 1.3 逻辑处理:与门、非门、或门 2. 感知机实现 2.1 与门的 Python 实现 2.2 非门的 Python 实现 2.3 或门的 Python 实现 1. 感知机介绍 1.1 背景 感知机1957年由 Rosenblatt 提…

09 - 函数调用

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 函数定义及调用1.1 自定义函数的语法1.2 make 解释器中的预定义函数1.2.1 预定义函数的调用1.2.2 问题1.2.3 本质分析 2. 示例代码 1. 函数定义及调用 makefile 中支持函数的概念 make 解释器提供了一系列的函数供 makefile 调…

资深测试必备技能!TestNG自动化测试框架实战详解

1、TestNG导言 在软件测试工作中,自动测试框架是不可或缺的,之前有Junit和Nunit框架,后有TestNG。TestNG不但吸取了Junit和Nunit框架的思想,而且创造了更强大的功能,它不但是单元测试框架,同时也是集成自动…

Nginx反向代理配置

一、介绍 Nginx 的反向代理功能在现代网络架构中扮演着至关重要的角色。首先,它充当了客户端与后端服务器之间的中介。当客户端发送请求时,这些请求先到达 Nginx 服务器,Nginx 会根据预先设定的规则和配置,将请求准确地转发到相应…