注:图片起源百度,侵删

参考官网文档:https://prometheus.io/docs/prometheus/latest/querying/functions1

1. 了解rate函数

rate函数是用于计算工夫序列数据的速率(rate)的函数之一。
rate函数的公式为:

rate(metric[range-vector])

其中metric是一个指标名称,range-vector是一个时间段范畴,例如[5m]示意5分钟的工夫范畴。该函数返回的是在指定工夫范畴内,每秒钟平均值的变化率。

例如,假如咱们有一个名为http_requests_total的指标,示意每秒钟HTTP申请的数量。如果咱们想要计算过来5分钟中的HTTP申请速率,则能够应用以下查问:

rate(http_requests_total[5m])

这将返回过来5分钟内HTTP申请的均匀速率,单位为每秒。
在理论利用中,rate函数通常与其余函数联合应用,例如sum或avg,以便计算多个工夫序列的速率或均匀速率。例如,如果咱们想要计算所有Web服务器的HTTP申请速率,则能够应用以下查问:

sum(rate(http_requests_total[5m])) by (instance)

这将返回每个Web服务器的HTTP申请速率总和,单位为每秒。

2. 了解sum函数

sum函数是用于计算工夫序列数据总和的函数之一。
sum函数的公式为:

sum(metric[by-label-list])

其中metric是一个指标名称,by-label-list是一个可选的标签列表,用于指定要对哪些标签进行求和。如果未指定标签,则将对所有标签进行求和。

例如,假如咱们有一个名为http_requests_total的指标,示意每个Web服务器上的HTTP申请总数。如果咱们想要计算所有Web服务器上的HTTP申请总数,则能够应用以下查问:

sum(http_requests_total)

如果咱们想按实例(instance)标签对HTTP申请总数进行求和,则能够应用以下查问:

sum(http_requests_total) by (instance)

在理论利用中,sum函数通常与其余函数联合应用,例如rateavg,以便计算多个工夫序列的总和或平均值。例如,如果咱们想要计算所有Web服务器的HTTP申请速率总和,则能够应用以下查问:

sum(rate(http_requests_total[5m])) by (instance)

这将返回每个Web服务器的HTTP申请速率总和,单位为每秒。

3. 了解histogram_quantile函数

histogram_quantile函数是用于计算分位数(quantile)的函数之一。分位数是指将一组数据按升序排序后,第p分位数是这组数据中最小的元素到第p×100%的元素的范畴。histogram_quantile函数的公式为:

histogram_quantile(, bucket_selector(metric_name[by_label_list], ≤ bucket))

其中,是分位数,metric_name是一个指标名称,bucket是一个桶的边界值,by_label_list是可选的标签列表。

该函数返回指定分位数的值,能够用于剖析指标散布的特色。

例如,假如咱们有一个名为http_request_duration_seconds的指标,示意HTTP申请的响应工夫。咱们能够应用histogram类型来收集数据,并将其分为不同的桶,每个桶示意不同范畴的响应工夫。

如果咱们想要计算95%的HTTP申请的响应工夫,则能够应用以下查问:

histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))

该查问将计算过来5分钟内HTTP申请响应工夫在95%分位数处的值。
其中,http_request_duration_seconds_bucket是用于存储分段数据的指标名称,le是用于标识桶边界的标签。在理论利用中,能够将histogram_quantile函数与其余函数联合应用,例如sumavg,以便计算多个工夫序列的分位数或平均分位数。

例如,如果咱们想要计算所有Web服务器的HTTP申请响应工夫的中位数,则能够应用以下查问:

histogram_quantile(0.5, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, instance))

这将返回每个Web服务器的HTTP申请响应工夫中位数,单位为秒。
在此查问中,咱们按instance标签对HTTP申请响应工夫进行分组,以便计算每个Web服务器的中位数。

4. 了解irate函数

irate函数用于计算工夫序列数据的刹时变化率。与rate函数不同,irate函数会思考数据的最近两个工夫点之间的差别,并将其视为刹时速率。
irate函数的公式为:

irate(metric[range-vector])

其中metric是一个指标名称,range-vector是一个时间段范畴,例如[5m]示意5分钟的工夫范畴。该函数返回的是在指定工夫范畴内,最近两个数据点之间的变化率。

当应用irate函数时,Prometheus会依据最近两个数据点之间的工夫距离计算变化率,而不思考工夫范畴内的其余数据点。这使得irate函数更实用于测量刹时速率,特地是在数据采集距离较大或数据点不均匀分布的状况下。

例如,假如咱们有一个名为http_requests_total的指标,示意每秒的HTTP申请数量。如果咱们想要计算过来5分钟内的HTTP申请数量的刹时变化率,则能够应用以下查问:

irate(http_requests_total[5m])

这将返回过来5分钟内HTTP申请数量的刹时变化率,单位为每秒。
在理论利用中,irate函数通常与其余函数联合应用,例如sumavg,以计算多个工夫序列的刹时变化率或均匀刹时变化率。

例如,如果咱们想要计算所有Web服务器的HTTP申请数量的刹时变化率总和,则能够应用以下查问:

sum(irate(http_requests_total[5m])) by (instance)

这将返回每个Web服务器的HTTP申请数量的刹时变化率总和,单位为每秒。

5. 了解round函数

round函数用于将工夫序列数据的值舍入到指定的精度。它能够用于对数据进行舍入,以便更好地适应可视化或聚合需要。
round函数的公式为:

round(metric, precision)

其中metric是一个指标名称或表达式,precision是要舍入到的小数位数。该函数返回的后果是将指定的指标或表达式中的值舍入到指定精度后的后果。

例如,假如咱们有一个名为cpu_usage的指标,示意CPU使用率。如果咱们心愿将CPU使用率的值舍入到小数点后两位,则能够应用以下查问:

round(cpu_usage, 0.01)

这将返回将cpu_usage指标的值舍入到小数点后两位的后果。
在理论利用中,round函数通常与其余函数或表达式联合应用,以便进行更简单的计算或数据处理。

例如,如果咱们心愿计算所有Web服务器的均匀CPU使用率,并将后果舍入到小数点后两位,则能够应用以下查问:

round(avg(cpu_usage) by (instance), 0.01)

这将返回将每个Web服务器的CPU使用率取均匀后的后果,并将其舍入到小数点后两位。在此查问中,咱们应用avg函数计算每个实例的均匀CPU使用率,而后应用round函数将后果舍入到指定精度。

6. 了解metric type

在Prometheus指标采集中,有几种常见的指标类型,包含Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)和Summary(摘要)。这些类型用于示意不同类型的数据和度量规范,提供了在监控和剖析零碎性能时须要的不同维度和粒度。

以下是对这些指标类型的解释:

  1. Counter(计数器):

    Counter是一个递增的整数指标,用于示意累计事件的数量,如申请数、谬误数等。它只能减少或归零,实用于枯燥递增的计数场景。例如,记录一个HTTP申请的计数。
  2. Gauge(仪表盘):

    Gauge是一个示意瞬时值的指标,能够减少或缩小,也能够放弃不变。它用于示意度量规范的以后状态,如CPU使用率、内存使用量等。例如,记录以后流动用户数。
  3. Histogram(直方图):

    Histogram是一个用于度量散布状况的指标类型。它将观测值分桶,并计算在每个桶内的观测值数量。Histogram还提供了分位数估计值,用于掂量给定阈值以下的观测值的百分比。例如,记录申请延迟时间的直方图。
  4. Summary(摘要):

    Summary是相似于直方图的指标类型,但它计算的是观测值的总数和总和,并容许计算分位数。与直方图不同的是,Summary会在客户端(Exporter)上对数据进行采样和汇总,而后将摘要数据发送到Prometheus。摘要实用于对长期观测值进行摘要统计,例如申请持续时间的摘要。

通过抉择适当的指标类型,能够更好地形容所要度量的数据和指标,并提供无关零碎性能和行为的详细信息。这些指标类型在Prometheus中具备不同的聚合和查询方法,能够通过PromQL进行解决和剖析。

7. 举例:CPU使用量与使用率使用量

container_cpu_usage_seconds_total

Cumulative cpu time consumed in seconds
统计容器内所有核的cpu应用工夫,是随着工夫累加的数值。

比方咱们想统计pod: node-isolation-agent-b2tg7的cpu使用量,那么其表达式如下

container_cpu_usage_seconds_total{pod="node-isolation-agent-b2tg7"}

pod中有两个container: POD、node-agent,再加上整个pod的使用率,所以总共3个。

  • container="POD": 实质是pause容器,对应第一条
  • container="node-agent": 对应第二条
  • Pod的CPU总使用量: 对应第三条

如果pod中有多个container,那么会列出每个container的Cpu使用量,最终再统计一条总的使用量。在统计指标时,咱们只统计总使用量即可, 即6078.867601753。

使用率

container_cpu_usage_rate

假如咱们想统计pod: node-isolation-agent-b2tg7的cpu使用率,那么其表达式应如下

sum by(pod, namespace, container) (rate(container_cpu_usage_seconds_total{pod="node-isolation-agent-b2tg7"}[3m])) * 1000
  • sum by(pod, namespace, container) 代表对变化率进行求和并依照pod, namespace, container的维度统计。
  • rate(container_cpu_usage_seconds_total{pod="node-isolation-agent-b2tg7"}[3m])代表,每3m时间段,其cpu使用量的变化率的平均值。