文章目录
1. PromQL介绍
Prometheus 提供了一种功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据。在gafana中,选择prometheus的数据源之后,在Metrics输入PromQL,语法正确后,图表页面就会显示出监控数据。
在 Prometheus 的表达式语言中,表达式或子表达式包括以下四种类型之一:
- 瞬时向量(Instant vector) - 一组时间序列,每个时间序列包含单个样本,它们共享相同的时间戳。也就是说,表达式的返回值中只会包含该时间序列中的最新的一个样本值。而相应的这样的表达式称之为瞬时向量表达式。
http_requests_total
- 区间向量(Range vector) - 一组时间序列,每个时间序列包含一段时间范围内的样本数据。
http_requests_total[5m]
- 标量(Scalar) - 一个浮点型的数据值。
time()
,sum(http_requests_total)
- 字符串(String) - 一个简单的字符串值。
根用户输入的表达式返回的数据类型是否合法取决于用例的不同,例如:瞬时向量表达式返回的数据类型是唯一可以直接绘制成图表的数据类型。
1.1. 时间序列过滤器
1.1.1. 瞬时向量过滤器
瞬时向量过滤器允许在指定的时间戳内选择一组时间序列和每个时间序列的单个样本值。在最简单的形式中,近指定指标(metric)名称。这将生成包含此指标名称的所有时间序列的元素的瞬时向量。
例如:选择指标名称为prometheus_http_requests_total的所有时间序列:
可以通过向花括号({})里附加一组标签来进一步过滤时间序列。
例如:选择指标名称为 prometheus_http_requests_total,job 标签值为 prometheus,handler标签值为/metrics的时间序列:
PromQL 还支持用户根据时间序列的标签匹配模式来对时间序列进行过滤,目前主要支持两种匹配模式:完全匹配和正则匹配。总共有以下几种标签匹配运算符:
- = : 选择与提供的字符串完全相同的标签。
- != : 选择与提供的字符串不相同的标签。
- =~ : 选择正则表达式与提供的字符串(或子字符串)相匹配的标签。
- !~ : 选择正则表达式与提供的字符串(或子字符串)不匹配的标签。
1.1.2. 区间向量过滤器
区间向量与瞬时向量的