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 为使用者提供了内置的聚合操作符,这些聚合操作符仅仅适用于对单个即时向量进行聚合操作。它们可以将即时向量聚合后生成一个包含较少元素的新的时间序列。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/ae799a886e395b3a6f187f7a9】。文章转载请联系作者。
评论