searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Prometheus四种指标类型

2023-09-19 03:20:15
56
0

Prometheus所有的指标类型都是用一种数据类型或由多个单一数据类型的组合表示,这个数据类型包括一个指标名称,一组标签和一个浮点数,时间戳是由监控后端在抓取指标时自动添加的,指标名称和标签集的每个叭一组合定义了一条时间序列,而每个时间戳和浮点数定义了一个系列中的样本,也就是一个数据点,以下是通过Prometheus暴露的一个指标示例:

# HELP http_requests_total Total number of http api requests
# TYPE http_requests_total counter
http_requests_total{api="add_product"}
4633433

# HELP用来为指标提供描述,#TYPE 说明指标类型,接下来,我们来详细介绍每个Prometheus指标类型。

1、计数器(Counter)

Counter类型指标被用于单调增加的测量结果。因此它们总是累积的数值,值只能上升。唯一的例外是Counter重启,在这种情况下,它的值会被重置为零。

Counter的实际值通常本身并不十分有用。一个计数器的值经常被用来计算两个时间戳之间的delta或者随时间变化的速率。

例如,Counter的一个典型用例是记录API调用次数,这是一个总是会增加的测量值。

# HELP http_requests_total Total number of http api requests
# TYPE http_requests_total counter
http_requests_total{api="add_product"} 4633433



指标名称是http_requests_total,它有一个名为api的标签,值为add_product,Counter的值为4633433。这意味着自从上次服务启动或Counter重置以来,add_product的API已经被调用了4633433次。按照惯例,Counter类型的指标通常以_total为后缀。

这个绝对数字并没有给我们提供多少信息,但当与PromQL的rate函数(或其他监控后端的类似函数)一起使用时,它可以帮助我们了解该API每秒收到的请求数。下面的PromQL查询计算了过去5分钟内每秒的平均请求数。

rate(http_requests_total{api="add_product"}[5m])

为了计算一段时期内的绝对变化,我们将使用delta函数,在PromQL中称为increate():

increase(http_requests_total{api="add_product"}[5m])

这将返回过去5分钟内的总请求数,这相当于用每秒的速率乘以间隔时间的秒数(在我们的例子中是5分钟):

rate(http_requests_total{api="add_product"}[5m]) * 5 * 60


2、仪表(Gauge)


Gauge指标用于可以任意增加或减少的测量。这是你可能更熟悉的指标类型,因为即使没有经过额外处理的实际值也是有意义的,它们经常被使用到。例如,测量温度、CPU和内存使用的指标,或者队列的大小都是Gauge。例如,为了测量一台主机的内存使用情况,我们可以使用一个Gauge指标,比如:

# HELP node_memory_used_bytes Total memory used in the node in bytes
# TYPE node_memory_used_bytes gauge
node_memory_used_bytes{hostname="host1.domain.com"} 943348382


上面的指标表明,在测量时,节点host1.domain.com使用的内存约为900 MB。该指标的值是有意义的,不需要任何额外的计算,因为它告诉我们该节点上消耗了多少内存。

与使用Counter指标时不同,rate和delta函数对Gauge没有意义。然而,计算特定时间序列的平均数、最大值、最小值或百分比的函数经常与Gauge一起使用。在Prometheus中,这些函数的名称是avg_over_time、max_over_time、min_over_time和quantile_over_time。要计算过去10分钟内在host1.domain.com上使用的平均内存,你可以这样做:

avg_over_time(node_memory_used_bytes{hostname="host1.domain.com"}[10m])


3、直方图(Histogram)

Histogram指标对于表示测量的分布很有用。它们经常被用来测量请求持续时间或响应大小。直方图将整个测量范围划分为一组区间,称为桶,并计算每个桶中有多少测量值。一个直方图指标包括几个项目:

  • 一个包含测量次数的Counter,指标名称使用_count后缀。
  • 一个包含所有测量值之和的Counter,指标名称使用_sum后缀。
  • 直方图桶被暴露为一系列的Counter,使用指标名称的后缀_bucket和表示桶的上限的le 标签。Prometheus中的桶是包含桶的边界的,即一个上限为N的桶(即le 标签)包括所有数值小于或等于N的数据点

例如,测量运行在host1.domain.com实例上的add_productAPI端点实例的响应时间的Histogram指标可以表示为:

# HELP http_request_duration_seconds Api requests response time in seconds
# TYPE http_request_duration_seconds histogram
http_request_duration_seconds_sum{api="add_product" instance="host1.domain.com"} 8953.332
http_request_duration_seconds_count{api="add_product" instance="host1.domain.com"} 27892
http_request_duration_seconds_bucket{api="add_product" instance="host1.domain.com" le="0"}
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.01"} 0
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.025"} 8
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.05"} 1672
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.1"} 8954
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.25"} 14251
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.5"} 24101
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="1"} 26351
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="2.5"} 27534
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="5"} 27814
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="10"} 27881
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="25"} 27890
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="+Inf"} 27892


4、汇总(Summary)

像直方图一样,Summary指标对于测量请求持续时间和响应体大小很有用,汇总度量对于测量请求持续时间和响应大小很有用。一个Summary指标包括这些内容:

  • 一个包含总测量次数的Counter。指标名称使用_count后缀。
  • 一个包含所有测量值之和的Counter,指标名称使用_sum后缀。

例如,测量在host1.domain.com上运行的add_productAPI端点实例的响应时间的Summary指标可以表示为:

# HELP http_request_duration_seconds Api requests response time in seconds
# TYPE http_request_duration_seconds summary
http_request_duration_seconds_sum{api="add_product" instance="host1.domain.com"} 8953.332
http_request_duration_seconds_count{api="add_product" instance="host1.domain.com"} 27892
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0"}
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.5"} 0.232227334
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.90"} 0.821139321
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.95"} 1.528948804
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.99"} 2.829188272
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="1"} 34.283829292


上面这个例子包括总和和计数以及五个分位数。分位数0相当于最小值,分位数1相当于最大值。分位数0.5是中位数,分位数0.90、0.95和0.99相当于在host1.domain.com上运行的add_product API端点响应时间的第90、95和99个百分位。

 

像直方图一样,Summary指标包括总和和计数,可用于计算随时间的平均值以及不同时间序列的平均值。

 
0条评论
作者已关闭评论
申****龙
6文章数
0粉丝数
申****龙
6 文章 | 0 粉丝
申****龙
6文章数
0粉丝数
申****龙
6 文章 | 0 粉丝
原创

Prometheus四种指标类型

2023-09-19 03:20:15
56
0

Prometheus所有的指标类型都是用一种数据类型或由多个单一数据类型的组合表示,这个数据类型包括一个指标名称,一组标签和一个浮点数,时间戳是由监控后端在抓取指标时自动添加的,指标名称和标签集的每个叭一组合定义了一条时间序列,而每个时间戳和浮点数定义了一个系列中的样本,也就是一个数据点,以下是通过Prometheus暴露的一个指标示例:

# HELP http_requests_total Total number of http api requests
# TYPE http_requests_total counter
http_requests_total{api="add_product"}
4633433

# HELP用来为指标提供描述,#TYPE 说明指标类型,接下来,我们来详细介绍每个Prometheus指标类型。

1、计数器(Counter)

Counter类型指标被用于单调增加的测量结果。因此它们总是累积的数值,值只能上升。唯一的例外是Counter重启,在这种情况下,它的值会被重置为零。

Counter的实际值通常本身并不十分有用。一个计数器的值经常被用来计算两个时间戳之间的delta或者随时间变化的速率。

例如,Counter的一个典型用例是记录API调用次数,这是一个总是会增加的测量值。

# HELP http_requests_total Total number of http api requests
# TYPE http_requests_total counter
http_requests_total{api="add_product"} 4633433



指标名称是http_requests_total,它有一个名为api的标签,值为add_product,Counter的值为4633433。这意味着自从上次服务启动或Counter重置以来,add_product的API已经被调用了4633433次。按照惯例,Counter类型的指标通常以_total为后缀。

这个绝对数字并没有给我们提供多少信息,但当与PromQL的rate函数(或其他监控后端的类似函数)一起使用时,它可以帮助我们了解该API每秒收到的请求数。下面的PromQL查询计算了过去5分钟内每秒的平均请求数。

rate(http_requests_total{api="add_product"}[5m])

为了计算一段时期内的绝对变化,我们将使用delta函数,在PromQL中称为increate():

increase(http_requests_total{api="add_product"}[5m])

这将返回过去5分钟内的总请求数,这相当于用每秒的速率乘以间隔时间的秒数(在我们的例子中是5分钟):

rate(http_requests_total{api="add_product"}[5m]) * 5 * 60


2、仪表(Gauge)


Gauge指标用于可以任意增加或减少的测量。这是你可能更熟悉的指标类型,因为即使没有经过额外处理的实际值也是有意义的,它们经常被使用到。例如,测量温度、CPU和内存使用的指标,或者队列的大小都是Gauge。例如,为了测量一台主机的内存使用情况,我们可以使用一个Gauge指标,比如:

# HELP node_memory_used_bytes Total memory used in the node in bytes
# TYPE node_memory_used_bytes gauge
node_memory_used_bytes{hostname="host1.domain.com"} 943348382


上面的指标表明,在测量时,节点host1.domain.com使用的内存约为900 MB。该指标的值是有意义的,不需要任何额外的计算,因为它告诉我们该节点上消耗了多少内存。

与使用Counter指标时不同,rate和delta函数对Gauge没有意义。然而,计算特定时间序列的平均数、最大值、最小值或百分比的函数经常与Gauge一起使用。在Prometheus中,这些函数的名称是avg_over_time、max_over_time、min_over_time和quantile_over_time。要计算过去10分钟内在host1.domain.com上使用的平均内存,你可以这样做:

avg_over_time(node_memory_used_bytes{hostname="host1.domain.com"}[10m])


3、直方图(Histogram)

Histogram指标对于表示测量的分布很有用。它们经常被用来测量请求持续时间或响应大小。直方图将整个测量范围划分为一组区间,称为桶,并计算每个桶中有多少测量值。一个直方图指标包括几个项目:

  • 一个包含测量次数的Counter,指标名称使用_count后缀。
  • 一个包含所有测量值之和的Counter,指标名称使用_sum后缀。
  • 直方图桶被暴露为一系列的Counter,使用指标名称的后缀_bucket和表示桶的上限的le 标签。Prometheus中的桶是包含桶的边界的,即一个上限为N的桶(即le 标签)包括所有数值小于或等于N的数据点

例如,测量运行在host1.domain.com实例上的add_productAPI端点实例的响应时间的Histogram指标可以表示为:

# HELP http_request_duration_seconds Api requests response time in seconds
# TYPE http_request_duration_seconds histogram
http_request_duration_seconds_sum{api="add_product" instance="host1.domain.com"} 8953.332
http_request_duration_seconds_count{api="add_product" instance="host1.domain.com"} 27892
http_request_duration_seconds_bucket{api="add_product" instance="host1.domain.com" le="0"}
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.01"} 0
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.025"} 8
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.05"} 1672
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.1"} 8954
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.25"} 14251
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="0.5"} 24101
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="1"} 26351
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="2.5"} 27534
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="5"} 27814
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="10"} 27881
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="25"} 27890
http_request_duration_seconds_bucket{api="add_product", instance="host1.domain.com", le="+Inf"} 27892


4、汇总(Summary)

像直方图一样,Summary指标对于测量请求持续时间和响应体大小很有用,汇总度量对于测量请求持续时间和响应大小很有用。一个Summary指标包括这些内容:

  • 一个包含总测量次数的Counter。指标名称使用_count后缀。
  • 一个包含所有测量值之和的Counter,指标名称使用_sum后缀。

例如,测量在host1.domain.com上运行的add_productAPI端点实例的响应时间的Summary指标可以表示为:

# HELP http_request_duration_seconds Api requests response time in seconds
# TYPE http_request_duration_seconds summary
http_request_duration_seconds_sum{api="add_product" instance="host1.domain.com"} 8953.332
http_request_duration_seconds_count{api="add_product" instance="host1.domain.com"} 27892
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0"}
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.5"} 0.232227334
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.90"} 0.821139321
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.95"} 1.528948804
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="0.99"} 2.829188272
http_request_duration_seconds{api="add_product" instance="host1.domain.com" quantile="1"} 34.283829292


上面这个例子包括总和和计数以及五个分位数。分位数0相当于最小值,分位数1相当于最大值。分位数0.5是中位数,分位数0.90、0.95和0.99相当于在host1.domain.com上运行的add_product API端点响应时间的第90、95和99个百分位。

 

像直方图一样,Summary指标包括总和和计数,可用于计算随时间的平均值以及不同时间序列的平均值。

 
文章来自个人专栏
监控
6 文章 | 2 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0