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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 【云原生监控系列第二篇】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 一同使用

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
259 3
|
1天前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
45 20
|
4天前
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
41 3
|
4天前
|
Prometheus 监控 Cloud Native
无痛入门Prometheus:一个强大的开源监控和告警系统,如何快速安装和使用?
Prometheus 是一个完全开源的系统监控和告警工具包,受 Google 内部 BorgMon 系统启发,自2012年由前 Google 工程师在 SoundCloud 开发以来,已被众多公司采用。它拥有活跃的开发者和用户社区,现为独立开源项目,并于2016年加入云原生计算基金会(CNCF)。Prometheus 的主要特点包括多维数据模型、灵活的查询语言 PromQL、不依赖分布式存储、通过 HTTP 拉取时间序列数据等。其架构简单且功能强大,支持多种图形和仪表盘展示模式。安装和使用 Prometheus 非常简便,可以通过 Docker 快速部署,并与 Grafana 等可
45 2
|
28天前
|
存储 Prometheus 监控
监控堆外第三方监控工具Prometheus
监控堆外第三方监控工具Prometheus
47 3
|
1月前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
39 3
|
1月前
|
Prometheus 监控 Cloud Native
在 HBase 集群中,Prometheus 通常监控哪些类型的性能指标?
在 HBase 集群中,Prometheus 监控关注的核心指标包括 Master 和 RegionServer 的进程存在性、RPC 请求数、JVM 内存使用率、磁盘和网络错误、延迟和吞吐量、资源利用率及 JVM 使用信息。通过 Grafana 可视化和告警规则,帮助管理员实时监控集群性能和健康状况。
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
216 0
|
23天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
21天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。