【云原生监控系列第二篇】Prometheus进阶——PromQL数据类型

简介: 【云原生监控系列第二篇】Prometheus进阶——PromQL数据类型

一、PromQL简介


PromQL(Prometheus Query Language)是Prometheus内置的数据查询语言。支持用户进行实时的数据查询及聚合操作。


Prometheus基于指标名称(metrics name)以及附属的标签集(labelset)唯一定义一条时间序列


指标名称代表着监控目标上某类可测量属性的基本特征标识

标签则是这个基本特征上再次细分的多个可测量维度




指标名称相同,但是标签不同也是不同的时间序列


基于PromQL表达式,用户可以针对指定的特征及其细分的纬度进行过滤、聚合、统计等运算从而产生期望的计算结果


PromQL 使用表达式(expression)来表述查询需求

根据其使用的指标和标签,以及时间范围,表达式的查询请求可灵活地覆盖在一个或多个时间序列的一定范围内的样本之上,甚至是只包含单个时间序列的单个样本


二、Prometheus 数据模型


2.1 简介

Prometheus 中,每个时间序列都由指标名称(Metric Name)和标签(Label)来唯一标识格式为:{=,…}


指标名称:通常用于描述系统上要测定的某个特征


例如,prometheus_http_requests_total表示接收到的HTTP请求总数


标签:键值型数据,附加在指标名称之上,从而让指标能够支持多纬度特征;可选项


例如,prometheus_http_requests_total{code=“200”}和prometheushttp_requests_total{code=“302”}代表着两个不同的时间序列


双下划线的标签(例如address)是Prometheus系统默认标签,是不会显示在/metrics页面里面的;


系统默认标签在target页面中也是不显示的,需要鼠标放到Labels字段上才会显示。


常见的系统默认标签:


__address:当前target 实例的套接字地址:


__scheme:采集当前target 上指标数据时使用的协议(http或https)


__metrics_path:采集当前target 上的指标数据时使用URI路径,默认为/metrics


___param:传递的URL参数中第一个名称为的参数的值


__name:此标签是标识指标名称的预留标签,能够使用标签选择器对指标名称进行过滤



2.2 指标名称及标签使用注意事项

指标名称和标签的特定组合代表着一个时间序列;指标名称相同,但标签不同的组合分别代表着不同的时间序列;不同的指标名称自然更是代表着不同的时间序列


PromQL支持基于定义的指标维度进行过滤和聚合;更改任何标签值,包括添加或删除标签,都会创建一个新的时间序列;应该尽可能地保持标签的稳定性,否则,则很可能创建新的时间序列,更甚者会生成一个动态的数据环境,并使得监控的数据源难以跟踪,从而导致建立在该指标之上的图形、告警及记录规则变得无效


2.3 样本数据格式

Prometheus 的每个数据样本由两部分组成


毫秒精度的时间戳

float64格式的数据


三、PromQL 的数据类型


瞬时向量 (Instant vector): 特定或全部的时间序列集合上,具有相同时间戳的一组样本值

区间向量 (Range vector): 特定或全部的时间序列集合上,在指定的同一时间范围内的所有样本值

标量数据 (Scalar): 一个浮点型的数据值

字符串 (String): 一个字符串,支持使用单引号、双引号进行引用


3.1 时间序列选择器(Time series Selectors)

PromQL 的查询操作可能需要针对若干个时间序列上的样本数据进行,挑选出目标时间序列是构建表达式时最为关键的一步;


用户可使用向量选择器表达式来挑选出给定指标名称下的所有时间序列或部分时间序列的即时样本值或至过去某个时间范围内的样本值,前者称为瞬时向量选择器,后者称为区间向量选择器。


3.1.1 瞬时向量选择器(Instant Vector Selectors)

瞬时向量选择器可以返回0个、1个或多个时间序列上在给定时间戳(instant)上的各自的一个样本。


瞬时向量选择器由两部分组成:


指标名称:用于限定特定指标下的时间序列,即负责过滤指标;可选

标签选择器:用于过滤时间序列上的标签;定义在 {} 之中;可选

定义瞬时向量选择器时,以上两个部分应该至少给出一个;因此存在以下三种组合:


仅给定指标名称,或在标签名称上使用了空值的标签选择器:返回给定的指标下的所有时间序列各自的即时样本

例如,prometheus_http_requests_total 和 prometheus_http_requests_total{} 的功能相同,都是用于返回这个指标下各时间序列的即时样本(所有)

仅给定标签选择器:返回所有符合给定的标签选择器的所有时间序列上的即时样本

例如,{code=“200”, job=“prometheus”} ,这样的时间序列可能会有着不同的指标名称

指标名称和标签选择器的组合:返回给定的指标下的,且符合给定的标签过滤器的所有时间序列上的即时样本

例如,prometheus_http_requests_total{code=“200”, job=“prometheus”},用于返回这个指标 code 为 200, 并且 job 为 prometheus 的时间序列的即时样本




标签选择器用于定义标签过滤条件,目前支持如下4种匹配操作符:


操作符

过滤条件
= 完全相等
!= 不相等
=~ 正则表达式匹配
!~ 正则表达式不匹配


注意事项:


◆匹配到空标签值的标签选择器时,所有未定义该标签的时间序列同样符合条件


例如,prometheus_http_requests_total{handler= “”},则该指标名称上所有未使用该标签(handler)的时间序列也符合条件


◆正则表达式将执行完全锚定机制,它需要匹配指定的标签的整个值


◆向量选择器至少要包含一个指标名称,或者至少有一个不会匹配到空字符串的标签选择器


例如,{ job=“”}为非法的向量选择器


◆使用____name____ 做为标签名称,还能够对指标名称进行过滤


例如,{name=~“.*http_requests_total”}能够匹配所有以 http_requests_total 为后缀的所有指标




3.1.2 区间向量选择器(Range Vector Selectors)

区间向量选择器可以返回0个、1个或多个时间序列上在给定时间范值围内的各自的一组样本。


区间向量选择器的不同之处在于,需要通过在瞬时向量选择器表达式后面添加包含在 [] 里的时长来表达需在时间时序上返回的样本所处的时间范围。


时间范围:以当前时间为基准时间点,指向过去一个特定的时间长度;例如,[5m] 是指过去5分钟之内。


可用的时间单位有 ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天)、w(周)和 y(年)

必须使用整数时间,且能够将多个不同级别的单位进行串联组合,以时间单位由大到小为顺序,例如 1h30m,但不能使用 1.5h


3.1.3 偏移向量选择器

前面介绍的选择器默认都是以当前时间为基准时间,偏移修饰器用来调整基准时间,使其往前偏移一段时间。偏移修饰器紧跟在选择器后面,使用关键字 offset 来指定要偏移的量。(查询的不是当前时间为起点的)


例如:


prometheus_http_requests_total offset 5m ,表示获取以 prometheus_http_requests_total 为指标名称的所有时间序列在过去 5 分钟之时的即时样本;


prometheus_http_requests_total[5m] offset 1d ,表示获取距此刻 1 天时间之前的 5 分钟之内的所有样本



3.2 向量表达式使用要点

表达式的返回值类型亦是即时向量、范围向量、标题或字符串4种数据类型其中之一,但是,有些使用场景要求表达式返回值必须满足特定的条件,例如:


1.需要将返回值绘制成图形时,仅支持瞬时向量类型的数据;对于诸如 rate、irate 之类的速率函数来说,其要求使用的却又必须是区间向量型的数据

2.由于区间向量选择器的返回的是区间向量型数据,它不能用于表达式浏览器中图形绘制功能


区间向量选择器通常会结合速率类的函数 rate、irate 一同使用

目录
相关文章
|
10月前
|
Prometheus 监控 Cloud Native
云原生监控实战:Prometheus+Grafana快速搭建指南
云原生监控实战:Prometheus+Grafana快速搭建指南
|
10月前
|
存储 Prometheus 监控
OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
本方案基于Prometheus构建OSS监控系统,涵盖架构设计、指标采集、可视化、告警及性能优化,助力企业实现高可用、低成本的自建监控体系。
984 1
|
11月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
894 79
|
10月前
|
存储 监控 Cloud Native
云原生监控实战:Prometheus+Grafana打造RDS多维度预警体系
本方案构建了基于Prometheus与Thanos的云原生RDS监控体系,涵盖数据采集、存储、可视化与告警全流程。支持10万+QPS采集、90%存储压缩,具备<30秒告警延迟能力。通过自定义指标与智能预警策略,显著提升故障发现效率,实现分钟级响应。
709 5
|
存储 Prometheus 监控
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
Prometheus 是一款开源的系统监控与报警工具,专为云原生环境设计。它采用拉取模型采集数据,内置高效的本地时序数据库(TSDB),支持丰富的指标类型和四个黄金指标(延迟、流量、错误、饱和度)。其查询语言 PromQL 功能强大,可灵活聚合和分析时间序列数据。此外,通过 Exporter 机制,Prometheus 能轻松扩展到各种系统和服务。针对大规模场景,Thanos 提供高可用解决方案,整合多 Prometheus 实例,实现全局视图和长期存储。整体架构简洁可靠,适用于动态分布式环境。
1594 10
Prometheus 深度指南:设计理念 · PromQL · Exporter · Thanos
|
10月前
|
Prometheus 监控 Cloud Native
|
9月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
832 0
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
769 22
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
1054 20
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
1419 7

热门文章

最新文章