Prometheus数据模型与查询语言:构建高效监控系统的关键

🐇明明跟你说过:个人主页

🏅个人专栏:《Prometheus:监控的神》 🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Prometheus诞生史

二、Prometheus的数据模型与查询语言

1、数据模型

2、Prometheus Query Language(PromQL)

三、Prometheus的监控原理

1、Pull vs Push模式

2、时间序列数据的收集与存储

3、数据的聚合与计算


一、引言

1、Prometheus诞生史

Prometheus 是由 SoundCloud 开发的,最初于 2012 年发布。它起源于 SoundCloud 的监控需求,他们需要一种能够有效处理大规模、动态变化的系统和服务监控的解决方案。由于市场上缺乏满足其需求的现有解决方案,SoundCloud 决定开发自己的监控工具。

在开发过程中,SoundCloud 的工程师们将注意力集中在设计一个易于操作、高度可扩展且具有强大查询功能的监控系统上。他们创建了 Prometheus 的核心组件,并在实际生产环境中进行了测试和验证。

随着时间的推移,Prometheus 在 SoundCloud 内部得到了广泛应用,并逐渐成为了他们的核心监控平台。随着对 Prometheus 的需求不断增加,SoundCloud 决定将其开源,以便其他组织也能够受益于该技术。

2015 年,Prometheus 成为了 Cloud Native Computing Foundation(CNCF)的一部分,并得到了更广泛的社区支持和贡献。自此以后,Prometheus 继续迅速发展,成为了云原生生态系统中最受欢迎和广泛使用的监控工具之一。其强大的功能、灵活的架构以及活跃的社区支持使其成为了许多组织在容器化和微服务架构中的首选监控解决方案之一。

二、Prometheus的数据模型与查询语言

1、数据模型

Prometheus 的数据模型是其核心功能之一,它定义了 Prometheus 收集和存储数据的方式。以下是 Prometheus 数据模型的主要组成部分:

1. 时间序列(Time Series):

  • 时间序列是 Prometheus 中的基本数据单元,它由一个唯一的指标名称(metric name)和一组键值对标签(key-value pairs labels)组成。时间序列表示了一段时间内某个指标的值随时间变化的情况。例如,返回状态码为 200 的请求数量随时间的变化。

2. 指标(Metrics):

  • 指标是 Prometheus 收集的数据,通常表示系统的某种状态或行为。每个指标都有一个唯一的名称,并且可以与一个或多个标签关联。Prometheus 内置了一些常见的指标,如 CPU 使用率、内存使用率等,同时也支持用户自定义的指标。

3. 标签(Labels):

  • 标签是用于区分时间序列的附加信息,它们以键值对的形式与指标关联。标签可以用来标识时间序列的来源、实例、环境等属性,从而更灵活地进行数据查询和分析。

4. 采样(Sampling):

  • Prometheus 使用采样(sampling)的方式来存储时间序列数据。它在每个时间点对时间序列进行采样,记录指标的值。默认情况下,Prometheus 每秒钟对每个时间序列进行一次采样,但可以通过配置进行调整。

5. 度量类型(Metric Types):

  • Prometheus 支持四种主要的度量类型:Counter、Gauge、Histogram 和 Summary。这些度量类型对应不同类型的指标数据,例如计数器、仪表盘、直方图和摘要。

6. 标签匹配(Label Matching):

  • 在 PromQL(Prometheus 查询语言)中,可以使用标签匹配来选择特定的时间序列进行查询和分析。标签匹配允许用户根据指标名称和标签值进行灵活的数据过滤和筛选

2、Prometheus Query Language(PromQL)

Prometheus Query Language(PromQL)是用于查询和分析 Prometheus 数据的查询语言。它提供了丰富的功能和灵活的语法,使用户能够执行各种复杂的数据查询、聚合和计算操作。以下是 PromQL 的主要特点和用法:

1. 基本查询:

  • 使用基本查询语法可以获取指定时间范围内的时间序列数据。例如,http_requests_total 可以获取所有 http_requests_total 指标的时间序列数据。

2. 标签过滤:

  • 可以使用标签过滤功能根据指标名称和标签值筛选特定的时间序列数据。例如,http_requests_total{method="GET"} 可以获取 HTTP GET 请求的时间序列数据。

3. 聚合操作:

  • PromQL 支持多种聚合操作,如求和(sum)、计数(count)、平均值(avg)、最大值(max)、最小值(min)等。这些聚合操作可以对时间序列数据进行汇总和统计。例如,sum(http_requests_total) 可以计算所有时间序列的请求总数。

4. 函数操作:

  • PromQL 提供了丰富的内置函数,用于对时间序列数据进行处理和计算。这些函数包括数学函数、字符串函数、时间函数等。例如,rate() 函数用于计算时间序列数据的速率。

5. 向量操作:

  • PromQL 中的向量操作允许对多个时间序列进行操作和计算。可以对多个时间序列进行聚合、筛选、组合等操作。例如,可以通过 sum(rate(http_requests_total[5m])) 计算最近 5 分钟的 HTTP 请求速率总和。

6. 子查询:

  • PromQL 支持嵌套子查询,可以在一个查询中使用另一个查询的结果。这样可以实现更复杂的数据分析和计算操作。例如,可以通过子查询计算两个指标的差异。

7. 图表展示:

  • PromQL 查询结果可以通过图表展示工具(如 Grafana)进行可视化展示,以便用户更直观地理解和分析监控数据。

三、Prometheus的监控原理

1、Pull vs Push模式

Prometheus的Pull模式与Push模式在数据收集方式、使用场景、优势以及挑战等方面存在显著的差异。

  • Pull模式是指Prometheus定期从静态配置的监控目标或者基于服务发现自动配置的目标中拉取数据。在这种模式下,Prometheus服务器主动向目标发出请求,获取所需的监控数据。每个被监控的主机可以通过专用的exporter程序提供输出监控数据的接口,Prometheus服务器则通过HTTP协议周期性地从这些接口中采集数据。Pull模式的特点是有拉取间隔,不能及时获取数值的变化,因此需要进一步的数据处理。然而,它在告警时可以按照策略分片,仅拉取需要的数据,并且支持聚合场景。此外,在云原生环境中,Pull模式更有优势,因为它可以通过服务发现对所有需要进行监控的节点进行统一的数据拉取。
  • Push模式则是指由被监控的服务主动将数据推送到指定的接收端。在这种模式下,每个被监控的服务都需要部署一个上报数据的客户端,并配置监控服务器的信息。Pushgateway就是这样一个中间组件,它允许被监控的服务将数据推送到其中,然后Prometheus再从Pushgateway中拉取这些数据。然而,这种方式会加大部署的难度,因为需要在每个被监控的服务中都进行配置。

Pull模式更适合大规模、动态变化的云原生环境,而Push模式可能在某些特定场景下更为适用。在选择使用哪种模式时,需要根据实际的监控需求和场景进行权衡。

2、时间序列数据的收集与存储

时间序列数据的收集与存储是监控系统中的关键部分,它涉及到从不同数据源采集数据,并将其有效地存储以供后续查询和分析。

在监控系统中,Prometheus 是一种常见的时间序列数据库,其收集和存储时间序列数据的过程如下:

1. 数据收集:

  • Pull 模式:Prometheus 使用 Pull 模式从各个被监控的目标(如应用程序、服务、系统)定期拉取指标数据。被监控的目标必须提供一个 HTTP 服务,用于响应 Prometheus 的拉取请求并提供指标数据。
  • Push 模式:某些情况下,被监控的目标无法提供 HTTP 服务,或者需要更加灵活的数据采集方式。这时可以采用 PushGateway 等工具,由被监控的目标将数据推送到 PushGateway,再由 Prometheus 从 PushGateway 拉取数据。

2. 数据存储:

  • 本地存储:Prometheus 使用一种高效的时间序列存储引擎,将收集到的时间序列数据存储在本地磁盘上。这种存储引擎使用一种紧凑且高效的格式来存储数据,以便于快速的查询和检索。
  • 远程存储:对于长期存储或者大规模数据的需求,可以将时间序列数据远程存储到其他存储系统中,如云存储服务、分布式文件系统等。Prometheus 提供了远程存储适配器(Remote Write),可以将数据推送到远程存储系统,以便于长期存储和分析。

3. 数据保留策略:

  • Prometheus 允许配置数据的保留策略,以控制数据的存储周期和存储量。可以设置数据的保留时间、存储容量等参数,以满足不同的需求。

3、数据的聚合与计算

数据的聚合与计算在监控系统中是非常重要的,它们帮助用户从海量的时间序列数据中提取有价值的信息和见解。在 Prometheus 中,数据的聚合与计算通常通过 PromQL(Prometheus 查询语言)来实现,主要包括以下几个方面:

1. 数据聚合:

  • 聚合函数:PromQL 提供了各种聚合函数,如 sum、avg、max、min 等,用于对多个时间序列数据进行聚合计算。
  • 标签匹配:可以使用标签匹配功能,根据标签对时间序列进行筛选和分组,然后对每组数据进行聚合计算。

2. 数据计算:

  • 算术运算:PromQL 支持常见的算术运算符,如加法、减法、乘法、除法等,用于对时间序列数据进行基本的数值计算。
  • 函数操作:PromQL 提供了丰富的函数库,包括数学函数、逻辑函数、字符串函数等,用户可以利用这些函数对时间序列数据进行复杂的计算和处理。
  • 比较操作:可以使用比较运算符(如等于、大于、小于等)对时间序列数据进行比较,以实现条件判断和筛选。

3. 数据转换:

  • 滑动窗口计算:Prometheus 支持滑动窗口计算,可以通过类似 rate、increase 等函数对时间序列数据进行滑动窗口的计算,以获取时间序列数据的增长率、速率等信息。
  • 时间戳处理:PromQL 提供了一些函数用于处理时间戳数据,如 timestamp、time、timefmt 等,可以对时间戳进行格式化、转换、截取等操作。

4. 数据可视化:

  • Grafana 等监控可视化工具提供了丰富的图表和面板,用户可以通过配置 PromQL 查询来实现各种复杂的数据可视化需求,从而直观地展示监控数据的趋势、变化和关联性。

通过数据的聚合与计算,用户可以从海量的时间序列数据中提取出有用的统计信息、趋势分析、异常检测等,帮助用户更好地理解系统和应用的运行情况,及时发现和解决问题,提升系统的稳定性和性能。 PromQL 提供了强大的功能和灵活的语法,使得用户能够轻松地实现各种复杂的数据分析和计算任务。

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Prometheus的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

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

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

相关文章

中电金信:向“新”而行——探索融合架构的项目管理在保险行业的应用

近年来,险企在政策推动、市场牵引、自身发展、新技术应用日趋成熟等内外部因素的驱动下,积极投身到数字化转型的浪潮中。在拜访各类保险客户和合作项目的过程中,我们发现不少险企在数字化转型中或多或少都面临着战略如何落地、技术如何承接和…

wlan二层直连组网实验(ensp)

目录 1. VLAN 端口类型及参数设计2. IP 地址规划3. WLAN数据规划(1) DHCP服务器配置(2) AC 源接口地址、认证方式配置(3) AP 组的创建(4) 创建域管理模板、国家码认证(5) 创建安全模板(6) 创建SSID模板(7) 创建VAP模板(8) AP组绑定模板(9) 查看: 1. VLAN 端口类型及…

快手面试算法真题

按照html中的标签层数遍历节点名。 例如&#xff1a;html代码如下&#xff1a;(上面的数字表示层数) <!-- 1 --><div class"div1"><!-- 2 --><span class"span1"></span><!-- 2 --><p class"p1"><…

43. UE5 RPG 实现敌人血量显示条

在上一篇文章中&#xff0c;我们实现了火球术伤害功能&#xff0c;在火球击中敌方目标&#xff0c;可以降低敌人20的血量&#xff0c;这个值现在是固定的&#xff0c;后面我们会修改火球的伤害设置。接着&#xff0c;我们也测试了功能是实现的&#xff0c;但是在正常的游玩过程…

untiy avpro播放超过8K视频的解决方案

安转LAV Filters解码器&#xff0c;然后指定Avpro使用这个解码器播放即可 第一步 安装解码器 下载链接 第二步 AVPro设置 MediaPlayer脚本中一共两处

网络安全实训Day17and18

写在前面 第17和18天都讲的sql注入&#xff0c;故合并 ​​​​​​ 网络空间安全实训-渗透测试 Web渗透 定义 针对Web站点的渗透攻击&#xff0c;以获取网站控制权限为目的 Web渗透的特点 Web技术学习门槛低&#xff0c;更容易实现 Web的普及性决定了Web渗透更容易找到目…

C++之,static成员函数,友元函数以及内部类

个人主页&#xff1a;救赎小恶魔 欢迎大家来到小恶魔频道 好久不见&#xff0c;甚是想念 今天我们要深入讲述类与对象的初始化列表以及隐式类型转换 目录 引言&#xff1a; static成员函数 1. 概念 2.特性 友元 1.友元函数 2 友元类 内部类 匿名对象 引言&#xff…

杰发科技AC7840——ADC简介(1)_双路ADC同时使用

0. 简介 1. 特性 2. 双路ADC Sample里面没有双路的&#xff0c;以为那个规则组只有一个通道&#xff0c;看了外设寄存器才发现&#xff0c;原来他的通道是双路的。 注意1: ADC硬件引脚的配置 注意2: 规则组长度设置和 RSEQ序列号和CH通道号组合应该就对应了转换顺序&#xff0…

C语言Linux vim shell命令

无论是在插入模式或者是其他模式下对于文件的修改都是对于内存缓冲区进行修改&#xff0c;只有当点击w进行保存以后才会将数据写入到一个新的文件中的&#xff0c;将源文件删除&#xff0c;并且新文件改为文件的名字 1. actionmotion dG删到文件尾 ggdG先到开头再删除到末尾…

html+css+js+jquery实现在网页端将手动输入用户的信息转化成表格

1.实现的效果图 2.css代码 ​<style>*{background-color: antiquewhite;}#ss{font-size:20px;text-align: center;}#inputForm { margin-bottom: 20px; } #userTable { width: 100%; border-collapse: collapse; } #userTable th, #userTable td { border: 1px …

【uniapp/ucharts】采用 uniapp 框架的 h5 应用使用 ucharts(没有 uni_modules)

这种情况无法直接从 dcloud 平台上一键下载导入&#xff0c;所以应该在官网推荐的 git 仓库去单独下载&#xff1a; https://gitee.com/uCharts/uCharts/tree/master/uni-app/uCharts-%E7%BB%84%E4%BB%B6/qiun-data-charts(%E9%9D%9Euni_modules) 下载的文件是如图所示的路径&…

攻防世界 easyphp

本题主要利用的知识点是php绕过 一、PHP代码分析 首先先看一下代码 我们需要利用get方式上传3个参数a,b,c&#xff0c;这3个分别需要满足不同的条件: a&#xff1a;设置a值&#xff1b;值大于6000000&#xff1b;长度不超过3&#xff1b; b&#xff1a;设置b值&#xff1b;MD…

【Qt】信号与槽

1 &#x1f351;信号和槽概述&#x1f351; 在 Qt 中&#xff0c;用户和控件的每次交互过程称为⼀个事件。⽐如 “⽤⼾点击按钮” 是⼀个事件&#xff0c;“⽤⼾关闭窗⼝” 也是⼀个事件。每个事件都会发出⼀个信号&#xff0c;例如⽤⼾点击按钮会发出 “按钮被点击” 的信号&…

websocket爬虫

人群看板需求分析 先找到策略中心具体的数据。对应数据库中的数据 看看接口是否需要被逆向 点开消费者细分&#xff0c;可以找到人群包&#xff08;人群名称&#xff09; 点击查看透视 label字段分类: 在这里插入图片描述 预测年龄&#xff1a;tagTitle 苹果id&#x…

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面&#xff0c;同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具&#xff1a;uniapp开发小程序 1.3原型图 功能&#xff1a;.点击体验官带看跳转小程序的体验官带看页面 功能&#xff1a;点击立即咨询唤起小程序弹窗打电话 2.…

RPA机器人怎么操作知乎好物推荐自动点击【添加】商品按钮?

先看需要实现的效果&#xff08;启动机器人-点击收益&#xff08;打开商品卡片列表&#xff09;-点击添加&#xff08;自动添加商品卡片到文章&#xff09;&#xff09;&#xff1a; 学员提问&#xff1a; 知乎上点击好物推荐【添加】商品按钮&#xff0c;iframe的元素是动态的…

表情识别 | 卷积神经网络(CNN)人脸表情识别(Matlab)

表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09; 目录 表情识别 | 卷积神经网络(CNN)人脸表情识别&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab使用卷积神经网络(CNN)&#xff0c;进行人脸表情情绪识别…

数据结构(九)---并查集

目录 1.集合 2.集合的相关操作 (1)查(Find)&#xff1a; •Find操作的优化 (2)并(Union)&#xff1a; •Union操作的优化 1.集合 数据元素之间的逻辑关系可以为集合&#xff0c;树形关系&#xff0c;线性关系&#xff0c;图关系。对于集合而言&#xff0c;一个集合可以划…

【嵌入式AI部署神经网络】STM32CubeIDE上部署神经网络之指纹识别(Pytorch)——篇一|环境搭建与模型初步部署篇

前言:本篇主要讲解搭建所需环境,以及基于pytorch框架在stm32cubeide上部署神经网络,部署神经网络到STM32单片机,本篇实现初步部署模型,没有加入训练集与验证集,将在第二篇加入。篇二详细讲解STM32CubeIDE上部署神经网络之指纹识别(Pytorch)的数据准备和模型训练过程等,…

Chrome 网络调试程序 谷歌网络调试 network

目录 1.网络面板总览2.概况了解3.Waterfall接口排队等待时间4.关注请求接口的Size,可能是占据内存溢出的接口5.过滤器一栏 fetch/xhr 什么意思6. Stalled 什么意思7.Queueing 什么意思8.Queueing和Stalled之间什么关系9.为什么会有阻塞状态10.Time列是pending 什么意思 1.网络面…