Prometheus Metrics指标类型 Gauge(仪表盘)_sed

指标是用来衡量性能、消耗、效率和许多其他软件属性随时间的变化趋势。它们允许工程师通过警报和仪表盘来监控一系列测量值的演变(如CPU或内存或磁盘使用量、请求持续时间、延迟等)。指标在IT监控领域有着悠久的历史,并被工程师广泛使用,与日志和链路追踪一起被用来检测系统是否有不符合预期的表现。

在其最基本的形式中,一个指标数据点是由以下三个部分构成:

  • 一个指标名称
  • 收集该数据点的时间戳
  • 一个由数字表示的测量值

Prometheus收集的指标有四种,作为其暴露格式的一部分

  • Counters
  • Gauges
  • Histograms
  • Summaries

指标类型


从存储上来讲所有的监控指标都是相同的,但是在不同的场景下这些指标又有一些细微的差异。

例如,在 Node Exporter 返回的样本中指标 node_load 反应的是当前系统的负载状态,随着时间的变化这个指标返回的样本数据是在不断变化的(gauge类型,反应的是当前的状态)。]

而指标 node_cpu_seconds_total 所获取到的样本数据却不同,它是一个持续增大的值(counter类型),因为其反应的是 CPU 的累计使用时间,从理论上讲只要系统不关机,这个值是会一直变大。

为了能够帮助用户理解和区分这些不同监控指标之间的差异,Prometheus 定义了 4 种不同的指标类型:Counter(计数器)Gauge(仪表盘)Histogram(直方图)Summary(摘要)

在 node-exporter(后面会详细讲解)返回的样本数据中,其注释中也包含了该样本的类型。例如:

# HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="cpu0",mode="idle"} 362812.7890625

 

 Gauge  可增可减的仪表盘


与使用 Counter指标时不同,rate和delta函数对Gauge没有意义。然而计算特定时间序列的平均数、最大值、最小值或百分比的函数经常与 Gauge一起使用。 

与 Counter 不同,Gauge(可增可减的仪表盘)类型的指标侧重于反应系统的当前状态,因此这类指标的样本数据可增可减,不像counter是一直增长的。

常见指标如 node_memory_MemFree_bytes(当前主机空闲的内存大小)、node_memory_MemAvailable_bytes(可用内存大小)都是 Gauge 类型的监控指标。

由于 Gauge 指标仍然带有时间戳存储,所有我们可以看到随时间变化的值,通常可以直接把它们绘制出来,这样就可以看到值本身而不是变化率了,通过 Gauge 指标,用户可以直接查看系统的当前状态。

在绘制图行查看状态的时候,直接使用指标值就可以绘制出来,因为本身就表示当前的状态。 

Prometheus Metrics指标类型 Gauge(仪表盘)_时间序列_02

这些简单的指标类型都只是为每个样本获取一个数字,但 Prometheus 的强大之处在于如何让你跟踪它们,比如我们绘制了两张图,一个是 HTTP 请求的变化率,另一个是分配的 gauge 类型的实际内存,直接从图上就可以看出这两个之间有一种关联性,当请求出现峰值的时候,内存的使用也会出现峰值,但是我们仔细观察也会发现在峰值过后,内存使用量并没有恢复到峰值前的水平,整体上它在逐渐增加,这表明很可能应用程序中存在内存泄露的问题,通过这些简单的指标就可以帮助我们找到这些可能存在的问题。

Prometheus Metrics指标类型 Gauge(仪表盘)_时间序列_03

对于 Gauge 类型的监控指标,通过 PromQL 内置函数 delta() 可以获取样本在一段时间范围内的变化情况。例如,计算 CPU 温度在两个小时内的差异:

delta(cpu_temp_celsius{host="zeus"}[2h])

还可以直接使用 predict_linear() 对数据的变化趋势进行预测。例如,预测系统磁盘空间在 4 个小时之后的剩余情况:这个函数是用来做预测的,predict_linear() 这个函数对于磁盘空间来说的话是非常有用的,因为磁盘在实际使用的过程当中一下子就增长起来了,这是一个缓慢的过程,所以可以根据这个函数来判断4个小时之后磁盘剩余的情况,根据这个情况就可以提前去将磁盘空间清理或者扩容。

predict_linear(node_filesystem_free_bytes[1h], 4 * 3600)

Prometheus Metrics指标类型 Gauge(仪表盘)_最小值_04

 

 

仪表(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一起使用。

avg_over_time(range-vector)     指定时间间隔内范围向量所有元素样本值的平均值 

在 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])

要使用 Prometheus 客户端库在 Python 中创建一个 Gauge 指标,你可以这样做:

from prometheus_client import Gauge memory_used = Gauge( 'node_memory_used_bytes', 'Total memory used in the node in bytes', ['hostname'] ) memory_used.labels(hostname='host1.domain.com').set(943348382)

Prometheus Metrics指标类型 Gauge(仪表盘)_最小值_05

avg_over_time(probe_duration_seconds{job=~"$job", instance=~"$instance"}[1m])

Prometheus Metrics指标类型 Gauge(仪表盘)_最小值_06

avg_over_time(probe_dns_lookup_time_seconds{job=~"$job", instance=~"$instance"}[1m])