PromQL 简介
- Prometheus provides a functional query language called PromQL (Prometheus Query Language) that lets the user select and aggregate time series data in real time. The result of an expression can either be shown as a graph, viewed as tabular data in Prometheus’s expression browser, or consumed by external systems via the HTTP API.
- Prometheus 提供了一种称为 PromQL(Prometheus 查询语言)的功能查询语言,允许用户实时选择和聚合时间序列数据。表达式的结果可以显示为图形,在 Prometheus 的表达式浏览器中查看为表格数据,也可以通过 HTTP API 由外部系统使用。
什么是时间序列
- 同一指标和同一组标记维度的时间戳值流。Prometheus 将所有数据存储为时间序列。
时间序列 = 指标名称{label_name="label_value"}
- PromQL 执行出来的每一行,都属于时间序列,即使指标名称是相同的,但是 label 肯定是不同的
PromQL 数据类型
在 Prometheus 的表达式语言中,表达式或子表达式的计算结果可以达到以下四种类型之一
即时向量 Instant vector
即时向量
:一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间戳
- 三种查询组合:
只使用标签名称,如:
node_memory_MemAvailable_bytes
只使用 label,如:
{instance="192.168.11.167:9100"}
标签名称加 label,如:
node_memory_MemAvailable_bytes{instance="192.168.11.167:9100"}
如果有多个 label 可以写成
node_memory_MemAvailable_bytes{instance="192.168.11.167:9100",app="node-exporter"}
,用逗号分隔多个 label
Instant vector
支持匹配运算,也只是使用正则表达式来匹配- 正则表达式匹配是完全锚定的。
- 匹配项
env=~"foo"
被视为env=~"^foo$"
。
- 匹配项
=