Prometheus查询语法学习总结[类翻译:)]
ps: 该文章会持续更新,如有理解错误,有劳指正
I.表达式语言的数据类型
prometheus存储的是时间序列,包含了timestamp,metric name,label,value等。timestamp类似于主键,时间序列是按timestamp存储的。
标量(Scalar)
1. 概念
就是一个浮点数
字符串(String)
1. 概念
字符串
瞬时向量(instant vector)
1. 概念
在同一时刻的包含单个样本的一组时间序列。
2. selector使用
用metric name查询,返回数据库的当前时刻的所有包含这个metric name的时间序列。
例:http_requests_total
这个查询会返回http_requests_total{label1="xxx",label2="xxx"} value这种格式的数据库当前时刻的时间序列。这里的label是区分包含同样metric name序列的标识,可以理解为这个指标下时间序列的不同维度。
tip:这里有一个等价写法,用一个内部的label,叫"__name__"
例:{__name__="http_requests_total", label1=~"xxx"}
我们可以在这个语句的基础上使用一点过滤语法。
例:http_requests_total{label1="xxx"}
这个查询语句就会返回维度label1为xxx的序列。
tip:过滤语句经常会使用的操作符有:
1. =
:精确匹配,等于
2. !=
:精确匹配,不等于
3. =~
:正则匹配,等于
4. !~
:正则匹配,不等于
如:http_requests_total{label1=~"aaa|bbb", label2!="ccc"}
区间向量(instant vector)
1. 概念
一组时间序列,每个时间序列包含了一段时间内的样本数据。
2. selector使用
在metric name后加上一个时间范围,用[]包含。
例:http_requests_total{label1="xxx"}[5m]
代表的是数据库中有该metric name和label1为xxx的一组时间序列的最新5分钟的样本的值。
返回的数据样式是:
http_requests_total{label1="xxx"}[5m] value_1@timestamp_1
value_2@timestamp_2
...
value_n@timestamp_n
tip:时间偏移查询
获取当前时间向前一段时间内的时间序列的值
例:http_requests_total{label1="xxx"} offset 5m
offset必须跟在selector后面,如:
sum(http_requests_total{label1="xxx"} offset 5m)
未完待续...