函数

浏览 0      扫码          2019-11-21 13:04:19     码农文档      译文原文 英文原文

公告:如果您也想加入翻译队伍,或者您有相关中文文档想要贡献给大家,请联系coderdocument@163.com ,谢谢!

有些函数有默认参数,例如year(v=vector(time()) instant-vector)。这意味着有一个参数v是一个瞬时向量,如果不提供参数v,则其默认值为 vector(time())

abs()

abs(v instant-vector)将输入向量中的所有采样值转换为绝对值,并返回输入向量。

absent()

absent(v instant-vector) 如果传递给它的向量有元素,则返回一个空向量;如果传递给它的向量没有元素,则返回一个包含一个值为1的元素的向量。

这对于在指定指标名称和标签都的时间序列不存在时发出告警非常有用。


   
       

在第二个示例中,absent() 试图巧妙地根据输入向量派生出包含1个元素的输出向量的标签。

ceil()

ceil(v instant-vector)v中所有元素的采样值四舍五入为最接近的整数。

changes()

对于每个输入时间序列,changes(v range-vector) 以瞬时向量的形式返回其值在指定时间范围内更改的次数。

clamp_max()

clamp_max(v instant-vector, max scalar) ,输入为一瞬时向量v和一个最大值标量max,对于向量v中的每一个采样值,如果采样值大于max,则把采样值替换为max,反之则不进行替换。

clamp_min()

clamp_min(v instant-vector, min scalar) ,输入为一瞬时向量v和一个最小值标量min,对于向量v中的每一个采样值,如果采样值小于min,则把采样值替换为min,反之则不进行替换。

day_of_month()

day_of_month(v=vector(time()) instant-vector) 返回指定的UTC时间的日期(一个月)。返回值从1到31。

day_of_week()

day_of_week(v=vector(time()) instant-vector) 返回指定的UTC时间的日期(一周)。返回的值从0到6,其中0表示星期天,等等。

days_in_month()

days_in_month(v=vector(time()) instant-vector) 返回每一个指定的UTC时间所属性月份的天数。返回值从28到31。

delta()

delta(v range-vector) 计算范围向量v中每个时间序列元素的第一个和最后一个值之间的差值,返回带有指定增量和相同标签的瞬时向量。增量覆盖范围向量选择器中指定的整个时间范围,这样就可以得到非整数结果,即使采样值都是整数。

下面的示例表达式返回CPU温度从现在到2小时前的差异:


   
       

delta 只能用于gauge。

deriv()

deriv(v range-vector) 使用简单线性回归计算时间序列在范围向量v中的二阶导数。

deriv 只能用于gauge。

exp()

exp(v instant-vector) 计算v中所有元素的e的指数,即en,特殊情况为:

  • Exp(+Inf) = +Inf
  • Exp(NaN) = NaN

floor()

floor(v instant-vector)v中所有元素的采样值向下取整为最接近的整数。

histogram_quantile()

histogram_quantile(φ float, b instant-vector) 根据向量b(bucket)的直方图计算φ-quantile(0≤φ≤1)。(φ-quantiles详细解释和直方图指标类型的用法,请参见直方图和summaryb中的采样是每个bucket的观察计数。每个采样必须有一个标签le,其标签值表示bucket的上限。(没有这种标签的采样将被忽略。)直方图指标类型自动提供具有_bucket后缀和适当标签的时间序列。

使用rate()函数指定分位数计算的时间窗口。

示例:一个名为http_request_duration_seconds的直方图。要计算超过90%的最后10m的请求时长,可以使用以下表达式:


   
       

分位数是根据http_request_duration_seconds中的每个标签组合进行计算的。要聚合,可以基于rate()函数使用sum()聚合器。因为 histogram_quantile()需要le标签,所以它必须包含在by子句中。下列表达式按job将90%进行聚合:


   
       

要聚合所有,只需要指定le标签:


   
       

histogram_quantile() 函数假设一个bucket是线性分布的,然后插入分位数值。最高的bucket必须有 +Inf的上限。(否则返回NaN。)如果分位数位于最高的bucket中,则返回第二高的bucket的上限。如果最低的bucket的上限大于0,则假定最低桶的下限为0。在这种情况下,通常的线性插值将应用于该bucket中。否则,对于位于最低的bucket中的分位数,将返回最低bucket的上限。

如果b包含少于两个bucket,则返回NaN;如果φ<0,则返回-Inf;如果φ>1,则返回+Inf

holt_winters()

holt_winters(v range-vector, sf scalar, tf scalar) 根据v中的范围为时间序列生成一个平滑值。平滑因子sf越低,对旧数据的重视程度越高。趋势因子tf越高,考虑的趋势越多。sftf都必须在0到1之间。

holt_winters 只能用于gauge。

hour()

hour(v=vector(time()) instant-vector)返回每个指定UTC时间的小时值。返回的值从0到23。

idelta()

idelta(v range-vector) 计算范围向量v中最后两个样本的差值,返回带有指定增量和相同标签的瞬时向量。

idelta 只能用于gauge。

increase()

increase(v range-vector) 计算范围向量中时间序列的增量。单调中断(如:由于目标重新启动,计数器重置)会进行自动调整。增量覆盖范围向量选择器中指定的整个时间范围,因此即使计数器只以整数增量增加,也可以得到非整数结果。

下面的示例表达式返回过去5分钟内的HTTP请求数量,每个时间序列都在范围向量中:


   
       

increase 只能与计数器一起使用。它是rate(v) 乘以指定时间范围窗口下的秒数的语法糖,应该主要用于人类的可读性。在记录规则使用rate ,以便始终如一地跟踪每秒钟的增量。

irate()

irate(v range-vector) 计算范围向量中时间序列每秒的瞬时增长率。这基于最后两个数据点。单调中断(如:由于目标重新启动,计数器重置)会进行自动调整。

下面的示例表达式返回HTTP请求的每秒速率,在范围向量中的每个时间序列中,查找最近的两个数据点的时间间隔最多为5分钟:


   
       

irate 应该只用于绘制波动图、快速移动的计数器图形。对告警和波动缓慢的计数器,请使用 rate ,因为速率的简单变化可以重置FOR 子句,而且完全由罕见的峰值组成的图形可读性很差。

请注意,当将irate()与聚合操作符(例如sum())或时间聚合函数(任何以_over_time结尾的函数)组合在一起时,总是首先使用irate(),然后再聚合。否则,当目标重新启动时,irate()无法检测计数器重置。

label_join()

对于v中的每个时间序列,label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...) 使用separator 连接所有src_labels 的所有值,并返回一个 dst_label标签值为连接值的时间序列。在这个函数中可以有任意数量的 src_labels

如下例子将返回一个向量,每个时间序列都有一个foo标签,其中添加了值a,b,c


   
       

label_replace()

对于v中的每个时间序列,label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string) 将正则表达式regex与标签src_label匹配。如果匹配,则返回时间序列,并将标签dst_label替换为 replacement的展开。$1被第一个匹配的子组(subgroup)替换,$2被第二个匹配的子组替换,以此类推。如果正则表达式不匹配,则不作修改,直接返回时间序列。

如下例子将返回一个向量,该向量的每个时间序列有一个值为afoo标签:


   
       

ln()

ln(v instant-vector) 计算v中所有元素的自然对数,特殊情况如下:

  • ln(+Inf) = +Inf
  • ln(0) = -Inf
  • ln(x < 0) = NaN
  • ln(NaN) = NaN

log2()

log2(v instant-vector) 计算v中所有元素的以2为底的对数,特殊情况与ln中的情况相同。

log10()

log10(v instant-vector) 计算v中所有元素的以10为底的对数,特殊情况与ln中的情况相同。

minute()

minute(v=vector(time()) instant-vector) 返回指定UTC时间的每一小时的分钟数。返回的值从0到59。

month()

month(v=vector(time()) instant-vector) 返回指定UTC时间的月份。返回的值从1到12,其中1表示一月,依此类推。

predict_linear()

predict_linear(v range-vector, t scalar) 基于范围向量v,使用简单线性回归预测时间序列t距离当前时间的秒数。

predict_linear 只能用于gauge。

rate()

rate(v range-vector) 计算范围向量中时间序列的每秒平均增长率。单调中断(如:由于目标重新启动,计数器重置)会进行自动调整。此外,考虑到遗漏的抓取或抓取周期与范围的时间周期不完全一致,计算将覆盖至时间范围的末端。

下面的示例表达式返回HTTP请求在最近5分钟内的每秒速率,每个时间序列在范围向量中:


   
       

rate 只能用于计数器。它最适合于告警和缓慢波动的计数器的绘制。

请注意,在将rate()与聚合运算符(例如sum())或随时间聚合的函数(后缀为_over_time的函数)组合使用时,总是先使用rate(),然后再进行聚合。否则,当目标重新启动时,rate()无法检测计数器重置。

resets()

对于每个输入时间序列,resets(v range-vector) 以瞬时向量的形式返回指定时间范围内的计数器重置数量。任何两个连续采样之间,后一个采样值比前一个采样值更小,则认为是计数器复位。

resets 只能用于计数器。

round()

round(v instant-vector, to_nearest=1 scalar)v中所有元素的采样值四舍五入为最接近的整数。可选的to_nearest参数允许指定采样值应该四舍五入的最接近的倍数。这个倍数也可以是一个分数。

scalar()

给定一个单元素输入向量,scalar(v instant-vector) 以标量形式返回单个元素的采样值。如果输入向量没有一个元素,scalar将返回NaN

sort()

sort(v instant-vector) 返回按采样值升序排序的向量元素。

sort_desc()

sort_desc(v instant-vector) 返回按采样值降序排序的向量元素。

time()

time()返回自1970年1月1日(UTC时间)以来的秒数。注意,这实际上并不返回当前时间,而是用于计算表达式的时间。

timestamp()

timestamp(v instant-vector) 返回指定向量的每个采样的时间戳,该时间戳为自1970年1月1日(UTC时间)以来的秒数。

该函数是在Prometheus 2.0中添加的。

vector()

vector(s scalar) 以没有标签的向量形式返回标量s

year()

year(v=vector(time()) instant-vector)

返回指定的UTC时间的年份。

<aggregation>_over_time()

以下函数允许聚合指定范围向量的每个序列,并返回每个序列聚合结果的瞬时向量:

  • avg_over_time(range-vector):指定范围内所有数据点的平均值。
  • min_over_time(range-vector):指定范围内所有数据点的最小值。
  • max_over_time(range-vector):指定范围内所有数据点的最大值。
  • sum_over_time(range-vector):指定范围内所有值之和。
  • count_over_time(range-vector):指定范围内所有值的计数。
  • quantile_over_time(scalar, range-vector):指定范围内所有值的 φ-quantile (0 ≤ φ ≤ 1) 。
  • stddev_over_time(range-vector):指定范围内值的总体标准偏差。
  • stdvar_over_time(range-vector):指定范围内值的总体标准方差。

请注意,即使在整个范围内的值不是等间距的,指定范围内的所有值在聚合过程中具有相同的权重。

返回顶部