Prometheus架构详解

news2024/9/21 17:05:46

1 Prometheus简介

Prometheus 是一个开源的系统监控报警工具套件,它最初由SoundCloud开发,并于2016年成为CNCF(云原生计算基金会)托管的第二个项目(第一个是kubernetes)。Prometheus 以其简单高效的方式收集指标而闻名,能更好地与容器平台、云平台配合,这使得它在现代云原生环境中非常受欢迎。Prometheus 被广泛应用于各种场景中,包括但不限于:

  • 应用性能监控:监控应用程序的健康状态和性能指标。
  • 基础设施监控:监控服务器、存储设备、网络设备等基础设施的状态。
  • 业务监控:监控业务层面的关键性能指标(KPIs)。

Prometheus的主要优势如下:

  • 独立性:Prometheus 服务器本身是一个独立的二进制文件,易于部署和管理。
  • 多维度数据模型:数据以多维键值对的形式存储,便于灵活查询。
  • 无中介:Prometheus 通过HTTP协议直接抓取被监控系统的度量信息,不需要中间代理。
  • 丰富的数据存储:Prometheus 内置的时间序列数据库(TSDB)能够高效存储大量的时间序列数据。
  • 强大的查询语言:PromQL 提供了强大的查询功能,支持复杂的聚合操作。
  • 灵活的告警机制:通过Alertmanager 可以配置复杂的告警规则并处理告警消息。
  • 插件化设计:支持各种Exporter,能够轻松集成到现有系统中。

2 架构

Prometheus的架构设计旨在提供一个简单、高效且可扩展的监控解决方案,核心组件包括Prometheus Server、Exporters、PushGateway、Service Discovery、Alertmanager以及数据可视化工具(如Grafana)等。其整体架构如下图所示:
在这里插入图片描述

  1. 客户端

    • Short-lived jobs:对于那些生命周期较短的任务,可能在Prometheus来pull之前就消失了。Prometheus提供了PushGateway机制。客户端(或服务端)安装官方的PushGateway,这些任务可以将它们的监控数据组织成Key-Value形式并推送到PushGateway,然后Prometheus Server会定期从PushGateway拉取数据。这里需要注意的是PushGateway不一定要安装在被监控端,也可以安装在服务端,甚至是一台不相关的主机上,换句话来说,它只是一个中间转发的媒介,确保即使是在任务结束之后,Prometheus也能获取到必要的监控数据。
    • Jobs supported by Prometheus:Prometheus支持多种服务(如cAdvisor, Kubernetes, Etcd, Gokit等)直接向Prometheus暴露监控数据。这些服务通常被称为“Jobs”,它们通过内置的端点直接与Prometheus交互,无需额外的中间层。
    • Exporter:Exporter是Prometheus生态系统中的重要组成部分。它们通常作为中间层运行在被监控系统旁边,负责从不同的后端系统中提取度量数据,并将其转换为Prometheus可以理解的格式。这样,即使原有的监控目标不直接支持 Prometheus,也可以通过 Prometheus 提供的 Client Library 编写该监控目标的监控采集程序。例如,可以通过 Node Exporter 来监控 Linux 或 Windows 主机的硬件资源使用情况。常用的 Exporter 包括 Mysql Exporter、JMX Exporter、Consul Exporter 等。
  2. Prometheus Server

    Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

    • 数据获取 (Data Retrieval):Prometheus Server 可以通过静态配置的方式来管理其监控的目标,同时也支持结合 Service Discovery 动态地发现和管理监控目标。这种方式允许 Prometheus Server 在网络中自动识别服务实例,并从这些实例中拉取监控数据。
    • 数据存储 (Data Storage):Prometheus Server 内置了时序数据库功能,能够将采集到的监控数据按时间序列的形式存储在本地磁盘上。此外,Prometheus 社区也提供了与外部时序数据库集成的方案,以满足特定场景下的存储需求。
    • 数据查询 (Data Querying):Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。
  3. Server discovery

    Prometheus为了适应动态变化的环境,提供了服务发现机制来自动管理监控目标列表。在现代云原生环境中,资源使用方式通常是按需的,这意味着没有固定的监控目标,所有的监控对象(包括基础设施、应用和服务)都在动态变化。对于 Prometheus 这一类基于 Pull 模式的监控系统,显然无法继续使用static_configs的方式静态地定义监控目标。因此,Prometheus 引入了一个中间的代理人(即服务注册中心),这个代理人掌握着当前所有监控目标的访问信息,Prometheus 只需要向这个代理人询问有哪些监控目标即可。这种模式被称为服务发现。

    Prometheus 支持多种服务发现机制,包括但不限于以下几种:

    • Consul:Consul 是一种服务网格工具,可以用来发现和监控服务。Prometheus 可以集成 Consul 来动态发现服务实例,在微服务架构的应用程序中,Consul 常被用作服务发现注册软件,Prometheus 与其集成从而动态发现需要监控的应用服务实例。
    • DNS SD:DNS 服务发现是一种基于 DNS 的服务发现机制,适用于那些使用 DNS 解析服务位置的环境。
    • Kubernetes SD:在 Kubernetes 这类容器管理平台中,Kubernetes 掌握并管理着所有的容器以及服务信息,Prometheus 只需要与 Kubernetes 打交道就可以找到所有需要监控的容器以及服务对象。
    • EC2 SD:在 AWS 的 EC2 环境中,Prometheus 可以使用 EC2 服务发现来自动发现和监控运行中的实例。
  4. AlertManager

    AlertManager 是 Prometheus 架构中的另一个关键组件,负责处理来自 Prometheus Server 的警报。支持基于PromQL创建告警规则,当 Prometheus Server 检测到告警规则被触发时,会产生警报,并将这些警报发送给 AlertManager。AlertManager 负责汇总、去重、抑制和路由这些警报,确保警报信息能够及时、准确地通知到相关人员或系统。

    • 汇总与去重:AlertManager 会汇总来自多个 Prometheus Server 的警报,并去除重复的警报,以减少无效的通知。
    • 抑制 (Silencing):管理员可以设置抑制规则,临时屏蔽特定的警报,避免在维护窗口期间产生不必要的警报。
    • 路由 (Routing):AlertManager 支持基于警报标签的路由策略,可以根据预定义的规则将警报发送给不同的接收者或接收组,确保警报能够发送给最合适的人或系统进行处理。
    • 通知 (Notification):AlertManager 支持多种通知方式,包括电子邮件、PagerDuty、OpsGenie、WeChat Work 等,也可以通过Webhook自定义告警处理方式,以便快速响应警报。

    Prometheus 自带的 AlertManager 模块可以与诸如 PagerDuty 这样的商业化服务集成,实现警报和邮件的发送功能。然而,在国内使用 AlertManager 结合 PagerDuty 可能会遇到一些不便。因此,通常的做法是将Prometheus的数据集成到 Grafana 中进行展示,并在 Grafana 中配置警报,以实现更简便的本地化警报管理。

  5. 监控数据可视化

    监控数据可视化是监控系统不可或缺的一部分,它帮助用户直观地理解系统的健康状况和性能表现。Prometheus Web UI是Prometheus内置的一个可视化管理界面,通过Prometheus UI用户能够轻松的了解Prometheus当前的配置,监控任务运行状态等。但在生态系统中常用的数据可视化工具是 Grafana,它是一个开源的度量仪表板和可视化工具,支持多种数据源,包括 Prometheus,使得用户可以轻松地创建图表和仪表板来展示监控数据。Grafana 不仅限于数据展示,还可以配置警报。用户可以在 Grafana 中设置基于 Prometheus 数据的警报规则,当监控数据达到预设的阈值时,可以触发警报。Grafana 可以通过多种渠道发送警报通知,包括邮件、短信、Webhook 等,确保问题能够被及时发现并处理。

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

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

相关文章

MySQL练手题--日期连续类型(困难)

一、准备工作 Create table If Not Exists Failed (fail_date date); Create table If Not Exists Succeeded (success_date date); Truncate table Failed; insert into Failed (fail_date) values (2018-12-28); insert into Failed (fail_date) values (2018-12-29); inser…

【复现】Grounding DINO使用记录

推理 问题 1. ModuleNotFoundError: No module named groundingdino 解决: 运行 python setup.py install 编译groundingdino库。或者直接引入环境变量: linux: export PYTHONPATH$PYTHONPATH:/data/groundingdino windows&#xff1…

力扣最热一百题——除自身以外数组的乘积

目录 题目链接:238. 除自身以外数组的乘积 - 力扣(LeetCode) 题目描述 示例 提示: 解法一:左右数组(小型动态规划) 实现思路 Java写法: 运行时间 C写法: 运行时…

Acwing Hash表

哈希表的作用:把一个比较大的空间,通过一个函数映射到一个比较小的空间 一般做哈希运算时,取一个质数作为模,会使得冲突的概率降低。 哈希表的冲突解决方法: 拉链法开放寻址法 下面详细介绍这两种方法的原理及其实现…

Java+Spring Cloud +UniApp 智慧工地源码,用户PC端、移动端数据同步,支持多端展示

数字化给各行各业所带来的改变,在早些年间突出自动这一流程。但随着科技的发展,让人们也愈发了解可视化操作所带来的优势。智慧工地的诞生,相当于为建筑施工带来了一套较为完整的数字化流程,能够完善施工环节中的各部分内容。接下…

C++【类和对象】(一)

文章目录 前言1.类的定义1.1类定义格式1.2 访问限定符1.3 类域 2. 实例化2.1 实例化的概念2.2 对象大小 3.this指针结语 前言 在前文我们讲解了C基础语法知识。本文将会讲解C的类和对象。 1.类的定义 1.1类定义格式 class name {};class为定义类的关键字&#x…

8586 括号匹配检验

### 思路 1. **初始化栈**:创建一个空栈用于存储左括号。 2. **遍历字符串**:逐个字符检查: - 如果是左括号(( 或 [),则入栈。 - 如果是右括号() 或 ]),则检查栈是…

【医学半监督】对比互补掩蔽的自监督预训练半监督心脏图像分割

SELF-SUPERVISED PRE-TRAINING BASED ON CONTRASTIVE COMPLEMENTARY MASKING FOR SEMI-SUPERVISED CARDIAC IMAGE SEGMENTATION 2024 IEEE International Symposium on Biomedical Imaging (ISBI) 摘要: 心脏结构分割对心脏病诊断非常重要,而使用大量注释的深度学习在这项任…

记录|C#的资源路径设置的资料整理

目录 前言一、在这里插入图片描述 https://bbs.csdn.net/topics/360001606 二、三、添加到资源文件中四、获得图片的三种路径方法五、给资源文件添加文件夹更新时间 前言 参考文章: 原本以为C# winform中进行图片等文件的路径的读取是直接可以按照资源文件中显示的来…

AI对汽车行业的冲击和比亚迪新能源汽车市场占比

人工智能(AI)对汽车行业的冲击正在迅速改变该行业的面貌,从智能驾驶到生产自动化,再到个性化的消费者体验,AI带来的技术革新在各个层面影响着汽车产业。与此同时,新能源汽车市场,特别是以比亚迪…

剑指offer JZ54 二叉搜索树的第k个节点

描述: 给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。 1.返回第k小的节点值即可 2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-1 3.保证n个节点的值不一样 如…

2024 研究生数学建模竞赛(B题)建模秘籍|WLAN组网中网络吞吐量建模|文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用特征重要性分析,自适应回归,机器学习算法等强大工具,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模…

使用丹摩DAMODEL平台进行ChatGLM-6B-部署与使用

实例创建 1.先进入官网https://doc.damodel.com 进行注册,新用户可以免费送代金券,实名注册后一共可以得到50块钱,现在4090还搞活动,1.5左右一个钟。 2.创建后进入DAMODEL控制台创建实例: 如下: 这里创建…

在vue中:style 的几种使用方式

在日常开发中:style的使用也是比较常见的&#xff1a; 亲测有效 1.最通用的写法 <p :style"{fontFamily:arr.conFontFamily,color:arr.conFontColor,backgroundColor:arr.conBgColor}">{{con.title}}</p> 2.三元表达式 <a :style"{height:…

Hive企业级调优[4]——HQL语法优化之分组聚合优化

HQL语法优化之分组聚合优化 优化说明 在 Hive 中&#xff0c;未经优化的分组聚合通常通过一个 MapReduce Job 实现。Map 端负责读取数据&#xff0c;并按分组字段进行分区&#xff0c;通过 Shuffle 将数据发送至 Reduce 端&#xff0c;在 Reduce 端完成最终的聚合运算。 Hiv…

进程和线程问题解答

线程和进程的概念、区别 进程是操作系统进行资源分配的基本单位&#xff0c;拥有独立的地址空间&#xff0c;包括代码、数据、堆、栈等。进程间的切换开销较大。 线程是进程中的一个执行单元&#xff0c;是系统中最小的执行单位&#xff0c;共享进程的资源&#xff0c;如代码…

利士策分享,中日核污染水排海问题共识背后的深思

利士策分享&#xff0c;中日核污染水排海问题共识背后的深思 近日&#xff0c;中日两国在应对福岛第一核电站核污染水排放问题上达成了重要共识&#xff0c;这一进展无疑值得肯定。 然而&#xff0c;这背后所引发的关于金钱、责任与利益的讨论&#xff0c;却值得我们深入探究。…

使用宝塔部署项目在win上

项目部署 注意&#xff1a; 前后端部署项目&#xff0c;需要两个域名&#xff08;二级域名&#xff0c;就是主域名结尾的域名&#xff0c;需要在主域名下添加就可以了&#xff09;&#xff0c;前端一个&#xff0c;后端一个 思路&#xff1a;访问域名就会浏览器会加载前端的代…

什么是3D展厅?有何优势?怎么制作3D展厅?

一、什么是3D展厅&#xff1f; 3D展厅是一种利用三维技术构建的虚拟展示空间。它借助虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;等现代科技手段&#xff0c;将真实的展示空间数字化&#xff0c;呈现出逼真、立体、沉浸的展示效果。通过3D展厅&a…

剪映草稿批量自动化导出教程实操演示

如何批量自动导出草稿&#xff1f;今天我来实操演示。首先打开谷歌剪映助手 如果没有安装谷哥剪映助手的可以自行搜索下载&#xff0c;打开后找到批量导出多个草稿自动化导出。接着在右侧输入你要导出草稿的数量&#xff0c;其他的选项根据需求自行选择&#xff0c;最后点击立即…