Prometheus之数据类型和函数

前言:

在了解Prometheus数据类型前,我们先了解下面几个统计学名词概念:

平均数(Mean):

平均数是所有数据加起来除以数据个数得到的结果。它表示数据的中心趋势。

最大值(Maximum):

最大值是数据集中最大的数值。它表示数据的上限。

最小值(Minimum):

最小值是数据集中最小的数值。它表示数据的最小极限。

中位数(Median):

中位数是将数据从小到大排序后,位于中间位置的数值。如果数据个数是奇数,则中位数是中间的数值;如果数据个数是偶数,则中位数是中间两个数值的平均值。

百分位数(Quantile)

概念

百分位数(Percentile)是一种统计学上的概念,用来描述一组数据中某个数值相对于整个数据集的位置。具体来说,一个百分位数表示的是有百分之几的数据值小于或等于这个数值,

计算方法:

  1. 排序:将数据集从小到大排序
  2. 定位:计算百分位数的位置,通常使用以下公式:
    在这里插入图片描述
  3. 插值:如果计算的位置是整数,则直接取该位置的数据值;如果位置是小数,则进行线性插值。
  4. 示例:
    在这里插入图片描述

Prometheus数据类型:

Prometheus 是一个强大的开源监控和警报工具,其核心是时间序列数据模型。在 Prometheus 中,数据类型主要分为以下四种基本类型,每种类型都适用于不同的监控场景:

Counter(计数器)

定义:

Counter 是一个单调递增的指标,通常用于追踪某个事件的总数,如请求次数、任务完成次数等。

特点:

Counter 的值只能增加或者重置为0,不能减少。当监控重启或者重置时,Counter 可以被重置。

使用场景:

适用于统计总量,如HTTP请求的总次数、数据库查询的总次数等。

Gauge(仪表盘)

定义:

Gauge 是一个可以任意变化的指标,它反映了某个时刻的实时值,如系统的负载、内存使用率、当前活跃用户数等。

特点:

Gauge 的值可以增加、减少或者重置,能够反映资源的实时状态。

使用场景:

适用于表示资源的实时状态或者变化,如CPU使用率、磁盘空间占用、队列长度等。

Histogram(直方图)

定义:

Histogram 用于追踪一段时间内的数据分布情况,它将数据分桶(bucket)存储,每个桶记录了特定范围内数据的数量。

特点:

Histogram 可以提供数据的分布情况,包括最小值、最大值、平均值、中位数等统计信息。

使用场景:

适用于分析数据的分布,如请求的响应时间、数据库查询延迟等。

Summary(摘要)

定义:

Summary 类似于 Histogram,但它提供了一个滑动时间窗口内的数据摘要,包括总数和样本的定量统计信息。

特点:

Summary 提供了样本的总数和分位数统计,如平均数、中位数、90百分位数等。

使用场景:

适用于需要实时计算分位数和统计信息的场景,如HTTP请求的响应时间分布。

Prometheus 函数

Prometheus 提供了丰富的函数库,可以用于对时间序列数据进行各种操作和计算。以下是一些常用的 Prometheus 函数和它们的简要说明:

聚合操作

  1. sum()
  • 作用:
    计算一组时间序列的和。
  • 示例:
sum(rate(http_requests_total[5m])) 

计算过去5分钟内 HTTP 请求数量的总和。

  1. avg()
  • 作用:
    计算一组时间序列的平均值。
  • 示例:
avg(cpu_usage{job="app"}) 

计算所有名为 “app” 的作业的 CPU 使用率的平均值。

  1. min()
  • 作用:
    计算一组时间序列的最小值。
  • 示例:
min(memory_usage) 

获取内存使用率的最小值。

  1. max()
  • 作用:
    计算一组时间序列的最大值。
  • 示例:
max(disk_io)

获取磁盘 I/O 的最大值。

  1. count()
  • 作用:
    计算一组时间序列的数量。
  • 示例:
count(up) 

计算当前处于 “up” 状态的实例数量。

数学运算

  1. rate()
  • 作用:
    计算 Counter 类型指标在指定时间范围内的增长率。
  • 示例:
rate(http_requests_total[5m]) 

计算过去5分钟内 HTTP 请求的增长率。

  1. increase()
  • 作用:
    计算 Counter 类型指标在指定时间范围内的增加量。
  • 示例:
increase(http_requests_total[5m])

计算过去5分钟内 HTTP 请求的增加量。

  1. irate()
  • 作用:
    计算 Counter 类型指标在指定时间范围内的瞬时增长率。
  • 示例:
irate(http_requests_total[5m]) 

计算过去5分钟内 HTTP 请求的瞬时增长率。

时间序列操作

  1. delta()
  • 作用:
    计算时间序列在指定时间范围内的变化量。
  • 示例:
delta(cpu_usage[1h]) 

计算过去1小时内 CPU 使用率的变化量。

  1. deriv()
  • 作用:
    计算时间序列的导数。
  • 示例:
deriv(memory_usage[1h]) 

计算过去1小时内内存使用率的导数。

  1. reset()
  • 作用:
    将 Counter 类型的时间序列重置为 0。
  • 示例:
reset(http_requests_total)

将 HTTP 请求计数器重置为 0。

时间相关函数

  1. time()
  • 作用:
    返回当前 UNIX 时间。
  • 示例:
time() 

获取当前 UNIX 时间。

  1. day_of_week()
  • 作用:
    返回特定时间点的星期几。
  • 示例:
day_of_week(time()) 

获取当前时间的星期几。

  1. days_in_month()
  • 作用:
    返回特定时间点所在月份的天数。
  • 示例:
days_in_month(time())

获取当前月份的天数。

预测和回归

  1. holt_winters()
  • 作用:
    使用 Holt-Winters 方法进行时间序列预测。
  • 示例:
holt_winters(cpu_usage[1h], 0.3, 0.3) 

对过去1小时的 CPU 使用率进行预测。

  1. predict_linear()
  • 作用:
    使用线性回归进行时间序列预测。
  • 示例:
predict_linear(memory_usage[1h], 3600) 

预测未来1小时的内存使用率。

实用函数

  1. label_replace()
  • 作用:
    替换或添加标签。
  • 示例:
label_replace(up, "new_label", "\$1", "instance", "(.*)") 

为 up 指标添加或替换 new_label 标签。

  1. vector()
  • 作用:
    将标量转换为向量。
  • 示例:
vector(1) 

创建一个值为1的向量。

  1. scalar()
  • 作用:
    将向量转换为标量。
  • 示例:
scalar(sum(cpu_usage)) 

将 CPU 使用率的总和转换为标量值。

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值