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

news2024/10/5 19:12:32

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

🏅个人专栏:《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.coloradmin.cn/o/1627667.html

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

相关文章

零基础HTML教程(31)--HTML5多媒体

文章目录 1. 背景2. audio音频3. video视频4. audio与video常用属性5. 小结 1. 背景 在H5之前,我们要在网页上播放音频、视频,需要借助第三方插件。 这些插件里面最火的就是Flash了,使用它有几个问题: 首先要单独安装Flash&…

物资管理的挑战与机遇:利用技术提升效率与可持续性

引言 物资管理在企业运营中扮演着至关重要的角色。有效的物资管理不仅能够确保企业正常生产和运营所需的物资供应,还能够最大程度地优化资源利用、降低成本、提高效率,从而增强企业的竞争力和可持续发展能力。然而,在当今复杂的全球供应链环境…

WebSocket的原理、作用、API、常见注解和生命周期的简单介绍,附带SpringBoot示例

文章目录 原理作用客户端 API服务端 API生命周期常见注解SpringBoot示例 WebSocket是一种 通信协议 ,它在 客户端和服务器之间建立了一个双向通信的网络连接 。WebSocket是一种基于TCP连接上进行 全双工通信 的 协议 。 WebSocket允许客户端和服务器在 单个TCP连接上…

逆数对(树状数组的方法)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 5 4 5 1 3 2 输出 7 思路: 根据题意,求逆序对总数。 逆序对含义:如果数组中的两个不同位置,前面的数字比后面的数字严格大&…

websocket爬虫

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

【源码】2024最新在线客服系统优化版/客服金额结算+后台翻译+可对接自己平台客户

【源码说明】 测试环境:宝塔、Linux系统、PHP7.2、MySQL5.6,根目录public,伪静态thinkPHP,【不要开启ssl,用http就行】 config/database.php 修改数据库信息 public/index.php 修改域名信息 cgwl_pusher/config.php …

Leetcode662_二叉树最大宽度

1.leetcode原题链接:. - 力扣(LeetCode) 2.题目描述 给你一棵二叉树的根节点 root ,返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点(即&#xff0…

Angular创建项目

Angular创建项目 文章目录 Angular创建项目1. 创建项目1.1 直接安装1.2 跳过npm i安装 2. 运行程序 1. 创建项目 ng new 项目名称 1.1 直接安装 ng new angulardemo --同时会安装依赖包,执行的命令就是npm i 1.2 跳过npm i安装 ng new angulardemo --skip-inst…

关于权限的设计

首先系统权限,每个账号登录后,都需要知道这个账号允许访问哪些api,哪些数据权限(一般是指其他账号的一些数据) 这里就需要通过角色来关联。 --1.角色绑定菜单,每个菜单设计的时候包含了这个菜单会用到的所…

MySql基础二之【MySql增删改查操作】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言MYSQL数据的插入操作MYSQL数据的修改操作MYSQL数据的删除操作MYSQL数据的…

【八大排序(二)】选择排序与堆排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多排序知识 目录 1.前言2.选择排序2.1基本思想2.2画图理解2.3单向选择排序代码实现2.4双向选择排序代码…

创建Spring Boot项目

选择Maven Archetype,之后再Archetype选择webapp 两个都打勾 这是当前的打勾 这个是以后都默认勾上 打开对应的路径,用vscode打开settings.xml 加入国内源 阿里云 若没有此文件可上网查找 若jar包出现问题,可在repostitory文件内全删除 之后在Maven刷…

小程序评分/关键词/UV优化助力小程序登顶

随着小程序市场的日益繁荣,小程序搜索排名优化成为了众多开发者关注的焦点。小程序搜索排名被很多因素影响着,关键词、评分还有uv(授权)等。在本文小柚和各位老板分享如何有效优化小程序搜索排名的经验。 一、关键词策略 关键词是…

《2024年绿色发展报告》:算力与电力矛盾愈加突出!

2024年4月22日,第55个世界地球日,超聚变发布《2024年绿色发展报告》,向社会展示超聚变面对宏观形势变化、产业趋势变化,推进绿色发展、科技向绿的探索与实践成果。 2023年,算力产业发生了深刻变化。大模型带来AI算力需…

Unity Timeline学习笔记(4) - 自定义轨道OnCreateClip和CreateTrackMixer用法上的区分

前面我们第二篇文章Unity Timeline学习笔记(2) - PlayableTrack是一个初步的PlayableTrack使用方法,有时候可能会个性化定制专属轨道。 OnCreateClip的例子 下面我们做一个例子: 首先是轨道 //FeatureTrack.cs using System.ComponentModel; using U…

【python技术】使用akshare、pandas、mplfinance绘制红绿色K线图简单示例

python中的mplfinance库是基于matplotlib库开发的一个专门用于绘制股票数据的图表的第三方库,它提供了一系列函数和类,用于绘制各种类型的股票图表,包括K线图、成交量图和技术指标图等。 这里简单写个示例,我用的mac系统,字体采用STHeiti。…

前端提高篇(二十四)JS进阶18对象属性的高级用法

x:1, y:2, } Object.defineProperty(obj1, ‘z’,{ value:3, writable:true, enumerable:true, configurable:true, }) for (var i in obj1){ console.log(i ’ : ’ obj1[i]); } 运行效果: 不可枚举时: var obj1 { x:1, y:2, } Obj…

笔记:编写程序,分别采用面向对象和 pyplot 快捷函数的方式绘制正弦曲线 和余弦曲线。 提示:使用 sin()或 cos()函数生成正弦值或余弦值。

文章目录 前言一、面向对象和 pyplot 快捷函数的方式是什么?二、编写代码面向对象的方法:使用 pyplot 快捷函数的方法: 总结 前言 本文将探讨如何使用编程语言编写程序,通过两种不同的方法绘制正弦曲线和余弦曲线。我们将分别采用…

DRF JWT认证进阶

JWT认证进阶 【0】准备工作 (1)模型准备 模型准备(继承django的auth_user表) from django.db import models from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):mobile models.CharField(ma…

论文解读-面向高效生成大语言模型服务:从算法到系统综述

一、简要介绍 在快速发展的人工智能(AI)领域中,生成式大型语言模型(llm)站在了最前沿,彻底改变了论文与数据交互的方式。然而,部署这些模型的计算强度和内存消耗在服务效率方面带来了重大挑战&a…