prometheus 原理(架构,promql表达式,描点原理)

大家好,我是蓝胖子,提到监控指标,不得不说prometheus,今天这篇文章我会对prometheus 的架构设计,promql表达式原理和监控图表的绘图原理进行详细的解释。来让大家对prometheus的理解更加深刻。

架构设计

先来看看,prometheus的架构设计,明白指标的采集方式,存储方式,查询方式。

指标采集方式

指标的采集方式有两种,推(push)和拉(pull)。

prometheus提供了各种exporter,暴露了指标路由,prometheus server可以从指标路由获取该exporter的指标。这边是拉模式。

推送模式是进程主动将指标推送给prometheus服务器,但是在架构设计上并不是直接推送的,如下,是prometheus官网的架构图。推送的指标是推送给了pushgateway,然后prometheus server 从推送网关上面拉取指标信息。像短时定时任务我们可以采用推送模式,推送定时任务相关的指标。

Pasted image 20240228165123.png

存储方式

prometheus 对于指标的存储也是分为了两种,本地远程

prometheus内部提供了TSDB作为对时序数据的存储,同时它也提供了远程写接口,能够将数据写入远端服务器,例如clickhouse,influxdb等。

如果本地存储已经不能满足你的需求😌,那就用remote write吧,选用聚合性能更加的clickhouse或其他列式数据库。

查询方式

prometheus 查询方式除了读取本地的TSDB数据库,也可以配置remote read,远程读,这样能直接从远端读取时序数据。

远程读写的方式相当于prometheus帮助我们对接了远程存储器的存储和查询协议,而我们只用和prometheus打交通即可。

promql 表达式原理

接着介绍下,使用prometheus 时,用到的promql语句,我们通过promql语句从prometheus中对指标进行查询和聚合。

在promql表达式中有四种数据类型

  • Instant vector - 瞬时向量,指的是有相同时间戳的时间序列,因为在同一时刻会有多个指标的样本值产生,所以这里时间序列是多个。
  • Range vector - 范围向量,和瞬时向量不同,这里的时间序列筛选的范围不再是单个的时间戳,而是一个时间范围,指代的是在某个时间范围内的时间序列。
  • Scalar - 数值类型,浮点型
  • String - 字符串类型

我们来看下prometheus 中对函数的描述来更加形象化的理解这几张表达式的数据类型。

floor()

floor(v instant-vector) rounds the sample values of all elements in v down to the nearest integer.

可以看到floor 的参数要求传递的是瞬时向量,接着对于传递的瞬时向量中的每个指标都会执行floor 向下取最接近的整数 这样的逻辑。floor函数返回的结果是瞬时向量,也就是相同时间戳,每个时间序列会有一个向下取整后的value值。

rate()

rate(v range-vector) calculates the per-second average rate of increase of the time series in the range vector.

再来看下对rate函数的描述,rate函数要求传递的参数是范围向量,在promql语句中范围向量的写法是在指标后跟上[],例如 http_requests_total{job=“api-server”}[5m]代表指标名http_requests_total 中job标签是 api-server 的过去5分钟中内的样本。

rate函数的返回是瞬时向量Instant vector

❗️❗️❗️在使用promql表达式画图时,要注意,promql表达式只有最后的结果是即时向量才可以画图。

既然讲到了画图,我们就顺势将prometheus的画图描点的原理介绍下。

描点原理

我们在绘图的时候通常是选择一段时间范围,那么prometheus在收到这个时间范围的时候,如何根据请求的promql语句来绘制图表呢?

prometheus会将整个时间段按step或者也可以叫做interval得到不同的时间戳,这个参数也是用户在绘图的时候传递的。

基于每个时间戳得到每个时间序列的一个描点,得到描点的逻辑则是通过时间戳和promql表达式得到相同时间戳的时间序列值也就是瞬时向量。

最后我再介绍下grafna在绘图的时候两个关于时间范围的选项,作为科普。

grafana 描点选项配置

当前时间为now,假设为11点半点

relative time 选择 1h,那么界面展示的数据为10点半到11点半的数据。

Pasted image 20240227112910.png

选择timeshift则是将面板的结束时间从11点半变为10点半,面板还是按默认的时间间隔显示数据

Pasted image 20240227113008.png

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

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

相关文章

【REST2SQL】12 REST2SQL增加Token生成和验证

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

【Echarts】曲线图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…

个人博客系列-后端项目-RBAC角色管理(6)

修改上一篇文章创建的用户表 ## 用户表 from django.contrib.auth.hashers import make_password, check_password from django.contrib.auth.models import AbstractBaseUserclass User(AbstractBaseUser):username models.CharField(max_length255, uniqueTrue, verbose_na…

Go语言框架路由Controller控制器设计思路gin路由根据控制器目录分层生成路由地址

Controller设计好处 框架设计用controller分请求路由层级,应用从app目录开始对应请求url路由地址,这样设计师方便开发时候通过请求地址层级快速定位接口方法对应的代码位置。 例如api接口请求路径为:​​http://localhost:8110/​​busines…

C#,老鼠迷宫问题的回溯法求解(Rat in a Maze)算法与源代码

1 老鼠迷宫问题 迷宫中的老鼠,作为另一个可以使用回溯解决的示例问题。 迷宫以块的NN二进制矩阵给出,其中源块是最左上方的块,即迷宫[0][0],目标块是最右下方的块,即迷宫[N-1][N-1]。老鼠从源头开始,必须到达目的地。老鼠只能朝两个方向移动:向前和向下。 在迷宫矩阵…

如何在Linux使用docker安装Plik并实现无公网ip上传下载内网存储的文件资源

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默&…

数据结构小记【Python/C++版】——散列表篇

一,基础概念 散列表,英文名是hash table,又叫哈希表。 散列表通常使用顺序表来存储集合元素,集合元素以一种很分散的分布方式存储在顺序表中。 散列表是一个键值对(key-item)的组合,由键(key)和元素值(item)组成。键…

Go语言数据结构(二)堆/优先队列

文章目录 1. container中定义的heap2. heap的使用示例3. 刷lc应用堆的示例 更多内容以及其他Go常用数据结构的实现在这里,感谢Star:https://github.com/acezsq/Data_Structure_Golang 1. container中定义的heap 在golang中的"container/heap"…

Java详解:单列 | 双列集合 | Collections类

○ 前言: 在开发实践中,我们需要一些能够动态增长长度的容器来保存我们的数据,java中为了解决数据存储单一的情况,java中就提供了不同结构的集合类,可以让我们根据不同的场景进行数据存储的选择,如Java中提…

985硕的4家大厂实习与校招经历专题分享(part1)

先简单介绍一下我的个人经历: 985硕士24届毕业生,实验室方向:CV深度学习 就业:工程-java后端 关注大模型相关技术发展 校招offer: 阿里巴巴 字节跳动 等10 研究生期间独立发了一篇二区SCI 实习经历:字节 阿里 京东 B站 (只看大厂…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-4、线条平滑曲面(修改颜色)去除无效点

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

深入解析Java内存模型

一、背景 并发编程本质问题是:CPU、内存以及IO三者之间的速度差异。CPU速度快于内存、内存访问速度又远远快于IO,根据木桶理论,程序性能取决于最慢的操作,即IO操作。这样会出现CPU和内存交互时,CPU性能无法被充分利用…

QT 配置https 5.12.2 64位kitsMINGW_64

将 D:\QT5.12.2\Tools\mingw730_64\opt\bin 中的libeay32.dll 和 ssleay32.dll 复制到D:\QT5.12。2\5.12.2\msvc2017_64\bin中 尝试了各种各样的方法,直接这一步就解决了

Python批量提取Word文档表格数据

在大数据处理与信息抽取领域中,Word文档是各类机构和个人普遍采用的一种信息存储格式,其中包含了大量的结构化和半结构化数据,如各类报告、调查问卷结果、项目计划等。这些文档中的表格往往承载了关键的数据信息,如统计数据、项目…

555经典电路

1、555介绍: 555 定时器是一种模拟和数字功能相结合的中规模集成器件。一般用双极性工艺制作的称为 555,用 CMOS 工艺制作的称为 7555,除单定时器外,还有对应的双定时器 556/7556。555 定时器的电源电压范围宽,可在 4…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理(Wireshark抓包分析)

继续蓝牙系列的研究。 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的。这个main函数做了某些初始化之后,最终会调用到应用程序提供的btst…

Qt Creator常见问题解决方法

Qt Creator源文件重命名的正确方法 光改文件名是不够的,还要在.pro文件中的SOURCES中把名字改成之后的。 中文乱码(字符集设置) 菜单栏-工具-选项-设置为utf-8

DHCP中继实验(华为)

思科设备参考:DHCP中继实验(思科) 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP…

表单进阶(3)-上传文件和隐藏字段

上传文件&#xff1a;<input type"file"> 隐藏字段&#xff1a;<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled&#xff1a;<button disabled"disabled">注册</bu…

Vue2利用创建a标签实现下载本地静态文件到本地电脑上的功能

最近PC项目遇到一个需求&#xff0c;那就是需要前端下载前端代码包里的前端文件到本地&#xff0c;并且可以给下载下来的文件名指定任意的文件名&#xff0c;如下图所示&#xff0c;在前端代码里public里的statics里有个静态文件zswj.pem&#xff0c;页面上有个下载按钮&#x…