如果看过官方的 Querying 而且觉得没有任何理解上的困难,那么可以跳过这篇。如果你和我一样,觉得文档有些难以理解,可以尝试看看这篇文章。当然了,这边更多的是介绍一些概念以及自己的理解,不会事无巨细的罗列所有的 API
Prometheus 很强大,但随之而来的是与之匹配的复杂度。因此,整理了一些相关的、比较基础的、个人认为比较难以理解的知识点,某种意义上算是__用前必读__,以及可能其实是自己理解有误,可以被 comment 打打脸涨涨知识。
sum by (instance) (muta_api_request_result_total)
sum by (instance) (
rate(muta_api_request_result_total{type="send_transaction"}[5m])
)
Metric 是用以归类数据的一种表达方式,一般表示为
<metric name>{<label name>=<label value>, ...}
当前(Prometheus 2.18)的版本中,其实主要有三种数据类型,即 Instant vector(瞬时向量), Range vector(区间向量) 以及 Scalar(量)。不同的数据类型会有不同的用法,对应不同的函数。如上面例子中,sum
函数接收的是一个瞬时向量,并返回一个量,而 rate
函数接收的是一个区间向量,并返回瞬时向量。关于更加具体的函数描述,下面会有介绍。
以下将尝试使用图形用以描述两种向量,帮助理解它们之间的区别
一个简单的,可以是浮点数的数值
瞬时向量可以理解成某一时间点上的一系列 metric 点以及对应的数值
区间向量一般是多个瞬时向量外加一个时间轴描述这些瞬时向量的时间,它的表现会像是一个矩阵
与大部分编程语言,或是 Query Language 类似,我们需要对量进行操作,可能是普通的 +
-
*
/
,或是逻辑比较 ==
!=
>
<
>=
<=
,但一般而言, Operator 都是二元操作符(binary operator),即将两个元素进行一系列操作后转换为一个元素。区间向量一般不能直接用于二元操作符,但瞬时向量不受这些限制,
我们这边例举两个瞬时向量相减的场景,下面的这个例子可以理解为,当前的值比 15min 前增加了多少
此外,与大部分的 Query Language 类似,Prometheus 提供了聚合操作,包括 sum
avg
max
min
等常用的聚合操作
Prometheus 提供了不少函数,但是不同的函数接收不同的数据类型,如我们常用的 rate
函数,它接收一个区间向量作为变量,并算出每秒的(频)率