注:图片起源百度,侵删
参考官网文档: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 函数通常与其余函数联合应用,例如 rate 或avg,以便计算多个工夫序列的总和或平均值。例如,如果咱们想要计算所有 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 函数与其余函数联合应用,例如 sum 或avg,以便计算多个工夫序列的分位数或平均分位数。
例如,如果咱们想要计算所有 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函数通常与其余函数联合应用,例如 sum 或avg,以计算多个工夫序列的刹时变化率或均匀刹时变化率。
例如,如果咱们想要计算所有 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(摘要)。这些类型用于示意不同类型的数据和度量规范,提供了在监控和剖析零碎性能时须要的不同维度和粒度。
以下是对这些指标类型的解释:
-
Counter(计数器):
Counter 是一个递增的整数指标,用于示意累计事件的数量,如申请数、谬误数等。它只能减少或归零,实用于枯燥递增的计数场景。例如,记录一个 HTTP 申请的计数。
-
Gauge(仪表盘):
Gauge 是一个示意瞬时值的指标,能够减少或缩小,也能够放弃不变。它用于示意度量规范的以后状态,如 CPU 使用率、内存使用量等。例如,记录以后流动用户数。
-
Histogram(直方图):
Histogram 是一个用于度量散布状况的指标类型。它将观测值分桶,并计算在每个桶内的观测值数量。Histogram 还提供了分位数估计值,用于掂量给定阈值以下的观测值的百分比。例如,记录申请延迟时间的直方图。
-
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 使用量的变化率的平均值。