函数在区间的平均值怎么计算算函数区间?

摘要:获取请求数前位的时序样本数据,可以使用表达式用于计算当前样本数据值的分布情况,其中例如,当为时,即表示找到当前样本数据中的中位数返回结果如下内置函数提供了其它大量的内置函数,可以对时序数据进行丰富的处理。

Prometheus除了存储数据外,还提供了一种强大的功能表达式语言 PromQL,允许用户实时选择和汇聚时间序列数据。

表达式的结果可以在浏览器中显示为图形,也可以显示为表格数据,或者由外部系统通过 HTTP API 调用。通过PromQL用户可以非常方便地查询监控数据,或者利用表达式进行告警配置

关于时间序列存储,可以参考:/article/...

Prometheus会将所有采集到的样本数据以时间序列(time-series)的方式保存在内存数据库TSDB中,并且定时保存到硬盘上。time-series是按照时间戳和值的序列顺序存放的,我们称之为向量(vector)。每条time-series通过指标名称(metrics name)和一组标签集(labelset)命名。

在time-series中的每一个点称为一个样本(sample),样本由以下三部分组成:

时间戳(timestamp):一个精确到毫秒的时间戳;

样本值(value): 一个folat64的浮点型数据表示当前样本的值。

 

例如,通过rate()函数获取HTTP请求量的增长率:
 
 
 







可以获取样本在一段时间返回内的变化情况,如:
 
Histogram 由 _bucket{le=""},_bucket{le="+Inf"}, _sum,_count 组成,主要用于表示一段时间范围内对数据进行采样(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常它采集的数据展示为直方图。
 
 
例如,当 φ 为 0.5 时,即表示找到当前样本数据中的中位数:
 

Prometheus 提供了其它大量的内置函数,可以对时序数据进行丰富的处理。如上文提到的irate

  
 

两分钟内的平均CPU使用率:


需要注意的是使用rate或者increase函数去计算样本的平均增长速率,容易陷入“长尾问题”当中,
其无法反应在时间窗口内样本数据的突发变化。 
例如,对于主机而言在2分钟的时间窗口内,可能在某一个由于访问量或者其它问题导致CPU占用100%的情况,
但是通过计算在时间窗口内的平均增长率却无法反应出该问题。
irate同样用于计算区间向量的计算率,但是其反应出的是瞬时增长率。
irate函数是通过区间向量中最后两个两本数据来计算区间向量的增长速率。
这种方式可以避免在时间窗口范围内的“长尾问题”,并且体现出更好的灵敏度,通过irate函数绘制的图标能够更好的反应样本数据的瞬时变化状态。
 
irate函数相比于rate函数提供了更高的灵敏度,不过当需要分析长期趋势或者在告警规则中,irate的这种灵敏度反而容易造成干扰。
因此在长期趋势分析或者告警中更推荐使用rate函数。














































所有的API请求均使用以下的JSON格式:
 // 为error时,有如下报错信息
 
 


time=:用于指定用于计算PromQL的时间戳。可选参数,默认情况下使用当前系统时间。
timeout=:超时设置。可选参数,默认情况下使用-query,timeout的全局设置。
Summary 和 Histogram 类似,由 {quantile=""},_sum,_count 组成,主要用于表示一段时间内数据采样结果(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。
 

PromQL是Prometheus内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。

你可以通过附加一组标签,并用{}括起来,来进一步筛选这些时间序列。下面这个例子只选择有http_requests_total名称的、有prometheus工作标签的、有canary组标签的时间序列:

  
 

另外,也可以也可以将标签值反向匹配,或者对正则表达式匹配标签值。如操作符:
 =:选择正好相等的字符串标签
 !=:选择不相等的字符串标签
 =~:选择匹配正则表达式的标签(或子标签)
 !=:选择不匹配正则表达式的标签(或子标签)
 
 


时间范围通过时间范围选择器[]进行定义。例如,通过以下表达式可以选择最近5分钟内的所有样本数据,如:http_request_total{}[5m]
除了分钟,支持的单位有:








偏移修饰符允许更改查询中单个即时向量和范围向量的时间偏移量,例如,以下表达式返回相对于当前查询时间5分钟前的http_requests_total值:



请注意,偏移量修饰符始终需要跟随选择器,即以下是正确的:




Prometheus 的查询语言支持基本的逻辑运算和算术运算
 






运算中用到的基础数据类型:
瞬时向量(Instant vector) - 一组时间序列,每个时间序列包含单个样本,它们共享相同的时间戳。也就是说,表达式的返回值中只会包含该时间序列中的最新的一个样本值。而相应的这样的表达式称之为瞬时向量表达式。
区间向量(Range vector) - 一组时间序列,每个时间序列包含一段时间范围内的样本数据。
标量(Scalar) - 一个浮点型的数据值。
字符串(String) - 一个简单的字符串值。

在两个标量之间进行数学运算,得到的结果也是标量。


 



  
 
 


 
四则运算有优先级,promql的复杂运算也有优先级
例如,查询主机的CPU使用率,可以使用表达式:

  
 
其中irate是PromQL中的内置函数,用于计算区间向量中时间序列每秒的即时增长率
在PromQL操作符中优先级由高到低依次为:





 
与数据库中的join类似,promsql有两种典型的匹配查询:



  
 

  
 
该表达式会返回在过去 5 分钟内,HTTP 请求状态码为 500 的在所有请求中的比例。如果没有使用 ignoring(code),操作符两边表达式返回的瞬时向量中将找不到任何一个标签完全相同的匹配项。


同时由于 method 为 put 和 del 的样本找不到匹配项,因此不会出现在结果当中。


  
 

在限定匹配标签后,右向量中的元素可能匹配到多个左向量中的元素 因此该表达式的匹配模式为多对一,需要使用 group 修饰符 group_left 指定左向量具有更好的基数。

提醒:group 修饰符只能在比较和数学运算符中使用。在逻辑运算 and,unless 和 or 操作中默认与右向量中的所有元素进行匹配。
 

Prometheus 还提供了下列内置的聚合操作符,这些操作符作用域瞬时向量。可以将瞬时表达式返回的样本数据进行聚合,形成一个具有较少样本值的新的时间序列。









topk (样本值最大的k个元素)

这些操作符被用于聚合所有标签维度,或者通过 without 或者 by 子语句来保留不同的维度。
without 用于从计算结果中移除列举的标签,而保留其它标签。
by 则正好相反,结果向量中只保留列出的标签,其余标签则移除。
通过 without 和 by 可以按照样本的问题对数据进行聚合。





如果只需要计算整个应用的 HTTP 请求总量,可以直接使用表达式:

count_values 用于时间序列中每一个样本值出现的次数。count_values 会为每一个唯一的样本值输出一个时间序列,并且每一个时间序列包含一个额外的标签。
这个标签的名字由聚合参数指定,同时这个标签值是唯一的样本值。
例如要计算运行每个构建版本的二进制文件的数量:

  
 

则用于对样本值进行排序,返回当前样本值前 n 位,或者后 n 位的时间序列。
获取 HTTP 请求数前 5 位的时序样本数据,可以使用表达式:
}

我们在使用Excel进行日常数据统计的时候,一般都会涉及到数据的加、减、求和等计算,除了这些另外就会涉及到数据的计数统计等操作。简单的数据统计相信大家都会想到用counta、countif、countifs等不同的计数函数进行操作。有一种计数方式是这些函数都操作不了的,那就是数据的区间计算,今天我们就来学习四个最实用的Excel函数,来解决我们这种特殊的数据区间计算。

案例1:利用Frequency区间计算函数计算不同绩效区间人数

1、在Excel中Frequency函数是最简单的一个区间运算函数,它可以实现我们需要统计的区间数据个数。函数主要包含两个参数:第一参数为原始数据的计算区域;第二参数为我们需要分隔的数据区域;

2、在使用这个函数时,我们需要主要的是,它不能对单个单元格进行使用,如图我们需要选择所有的计算区域I7:I11,然后再输入上面的函数公式,参数如第一条内容解释的一样,最后我们输入完函数要用Ctrl+Shift+Enter进行数组计算,因为我们是一次性计算I7:I11多个单元格的值。

案例2:使用经典的Sumproduct函数快速计算区间数据个数

1、在Excel函数中,Sumproduct函数是一个使用频率较高的一个多条件求和、数组计算函数,我们只需要将多个条件用*连接,这样就可以实现多条件自动运算;

2、在函数参数中,我们通过用不等号>=和<=将多个条件连接起来,这样就可以实现对同时符合>=0和<=59两个条件的数据个数。

案例3:利用Countif条件计数函数高级用法,利用不等号进行数据区间计算

1、Countif函数属于Excel最经典的条件计数函数,这个函数可以实现单一条件的快速计数运算,但是像这种区间计算,相信大家都知道就是用减号的方式来处理。公式的意思就是用计算>=0的个数减去>59的个数,这样就得出了在59及一下的数据个数。

案例4:Countifs多条件计数函数连接不等式,快速计算数据区间个数

1、Countifs属于Excel多条件计数函数,当然它也可以只进行单一条件的判断。在进行数据区域计算的时候,它的操作方式同案例3countif函数一样,都是通过两个条件相减的方式来得出中间的个数差值。

通过上面对四个区间数据计算函数的详细讲解,现在你学会如何快速的计算不同数据区间的数据个数了吗?

}

我要回帖

更多关于 函数在区间的平均值怎么计算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信