写点什么

18 Prometheus 之 PromQL 介绍

  • 2022 年 1 月 18 日
  • 本文字数:1152 字

    阅读完需:约 4 分钟

18 Prometheus之PromQL介绍

Prometheus 提供了一种功能强大的表达式语言 PromQL(Prometheus QueryLanguage)。PromQL 允许用户实时选择和汇聚时间序列数据,是 Prometheus 自己开发的数据查询 DSL 语言,使用这个查询语言能够进行各种聚合、分析和计算,使管理员能够根据指标更好地了解系统性能。


时序数据库(Time Series Database,TSDB)用于保存时间序列(按时间顺序变化)的海量数据,是一种高性能、低成本、稳定可靠的专业化数据库。它可以提供高效读写、高压缩比低成本存储、降精度、插值、多维聚合计算和查询功能,解决由于设备采集点数据量巨大、数据采集频率高而造成的存储成本高、写入和查询分析效率低的问题。时序数据库广泛应用于物联网监控系统、企业能源管理系统、生产安全监控、电力检测系统等行业场景。


时间序列数据的特性如下:

  • 数据写入特点——写入平稳、持续、高并发高吞吐;写多读少,在写操作上时序数据能达到 95%以上;无更新实时写入最近生成的数据。

  • 数据查询特点——按时间范围读取一段时间的数据;对最近生成的数据读取概率高,对历史数据查询概率低;按照数据点的不同密集度实现多精度查询。

  • 数据存储特点——数据存储量比较大;具有时效性,数据通常会有一个保存周期;多精度数据存储。


对时序数据库的基本要求如下:

  • 能够支撑高并发、高吞吐的写入

  • 交互级的聚合查询,能够达到低查询延迟

  • 依据场景设计可以支撑海量数据存储

  • 在线应用服务场景中,需要高可用架构支撑

  • 针对写入和存储量的要求,应用环境底层需要分布式架构支持


PromQL 虽然以 QL 结尾,但它不是类似 SQL 的语言,因为在时间序列上执行计算类型时,SQL 语言相对缺乏表达能力。而 PromQL 语言表现力非常丰富,可以使用标签进行任意聚合,还可以使用标签将不同的指标连接在一起进行算术操作。内置了日期和数学等很多的函数可供使用。


一条 Prometheus 数据会包含一个指标名称(metric name)和一个或多个标签(label)以及 metricvalue。metric name 加一组 label 作为唯一标识来定义 time series,也就是时间线。在查询时,支持根据 labels 条件查找 time series,支持简单的条件也支持复杂的条件。


在 Prometheus 的表达式语言中,PromQL 数据类型归类为以下四种:

  • 即时向量(instant vector),是指同一时刻的一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间戳,即每个时序只有一个点。

  • 区间向量(range vector),是指在任何一个时间范围内的一组时间序列,包含每个时间序列随时间变化的一系列数据点,这时每个时序有多个点。

  • 标量(scalar),即纯量数据,一个简单的数字浮点值,只有一个数字,没有时序。

  • 字符串(string),一个目前未被使用的简单字符串值。


Prometheus 为使用者提供了内置的聚合操作符,这些聚合操作符仅仅适用于对单个即时向量进行聚合操作。它们可以将即时向量聚合后生成一个包含较少元素的新的时间序列。


发布于: 刚刚阅读数: 4
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
18 Prometheus之PromQL介绍