Prometheus 精要(二)

时间序列

每一个指标包含若干个时间序列。

假设指标包含 N 个label,第 i 个 label 的值个数(种)为 C(i),那么这个指标最多包含 C(1) * C(2) * C(3) * ... * C(N) 个时间序列

可以直接通过 count(metric_name) 得到该指标实际包含的时间序列数

选择符

可以通过选择符筛选指标的某些时间序列。

筛选 label1 等于 value1 并且 label2 不等于 value2:

metric_name{label1 = "value1", label2 != "value2"}

正则匹配

metric_name{label1 =~ ".*value1.*", label2 !~ ".*value2.*"}

偏移

可以通过 offset 让时间序列在时间轴上发生偏移。返回和输入同等数量的时间序列。

metric_name offset 1d 

结果产生的每一个时间序列上的每一个时间点,对应其一天前的指标值

纵向聚合操作符

group

聚合指标包含的所有时间序列,返回常量1的时间序列(1个),看起来没什么实际用处,但在分组可以发挥作用

count

聚合指标包含的所有时间序列,返回新时间序列(1个):指标所有时间序列的(在每个时间点上)个数

sum

聚合指标包含的所有时间序列,返回新时间序列(1个):指标所有时间序列的指标值(在每个时间点上)的累加和

avg

聚合指标包含的所有时间序列,返回新时间序列(1个):指标所有时间序列的指标值(在每个时间点上)的平均值

avg(metric_name) 等价于 sum(metric_name)/count(metric_name)

max/min

聚合指标包含的所有时间序列,返回新时间序列(1个):指标所有时间序列的指标值(在每个时间点上)中最大/最小的那个值

quantile (P%)

聚合指标包含的所有时间序列,返回新时间序列(1个):指标P%的时间序列的指标值(在每个时间点上)都小于的那个值(百分位值)

topk/bottomk (K)

聚合指标包含的所有时间序列,返回新时间序列(K个):指标所有时间序列的指标值(在每个时间点上)中最大/最小的那K个值

分组

by 子句

OP = group/count/sum/avg/max/min...

OP by(label1, label2)(metric_name)

对于指标包含的每一个时间序列,以其 label1的值 + label2的值组合为 group key,根据 group key 将这些时间序列分为若干组,基于组进行组内聚合操作,产生N个新的时间序列(N=组数量)

without 子句

OP = group/count/sum/avg/max/min...

OP without(label1, label2)(metric_name)

对于指标包含的每一个时间序列,以除去 label1、label2 以外的 label 的值组合为 group key,根据 group key 将这些时间序列分为若干组,基于组进行组内聚合操作,产生N个新的时间序列(N=组数量)

__name__ 标签

可以理解为 prometheus 只包含一个"全局指标",普通指标只是这个"全局指标"的特殊标签 __name__ 的一个特殊值

up 等价于 {__name__="up"}

up{node="node-1"} 等价于 {__name__="up", node="node-1"}

可以很方便地用正则查询名字为某个前缀的所有指标

group by (__name__)({__name__=~"go_.*"})

横向聚合操作符

rate

对指标包含各个的时间序列,在各自的时间轴(在每个时间点上)向后看一个时间窗口,求单位时间(每秒)的增量。返回和输入同等数量的时间序列。

rate(metric_name[60s])

等价于

increase(metric_name[60s]) / 60

avg_over_time,min_over_time, max_over_time, sum_over_time, count_over_time, quantile_over_time ...

对指标包含各个的时间序列,在各自的时间轴(在每个时间点上)向后看一个时间窗口,求平均、最小值、最大值、和、值数量等。返回和输入同等数量的时间序列。

cheatsheet

查询当前系统时间序列的数量:

prometheus_tsdb_head_series

或

count({__name__!=""})

查询各个指标包含的时间序列数量,倒序排序:

sort_desc(count by(__name__)({__name__!=""}))

查询各个instance包含的时间序列数量,倒序排序:

sort_desc(count by(instance)({__name__!="", instance!=""}))

查询各个指标,平均在每个instance上,包含的时间序列数量,倒序排序:

sort_desc(avg by(__name__)(count by(__name__, instance)({__name__!="", instance!=""})))
上一篇:kafka删除topics


下一篇:HBase分享 | 云HBase之OpenTSDB时序引擎压缩优化