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

指标是用来衡量性能、消耗、效率和许多其他软件属性随时间的变化趋势。它们允许工程师通过警报和仪表盘来监控一系列测量值的演变(如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 的强大之处在于如何让你跟踪它们,比如我们绘制了两张图,一个是 HTTP 请求的变化率,另一个是分配的 gauge 类型的实际内存,**直接从图上就可以看出这两个之间有一种关联性,当请求出现峰值的时候,内存的使用也会出现峰值,但是我们仔细观察也会发现在峰值过后,内存使用量并没有恢复到峰值前的水平,整体上它在逐渐增加,这表明很可能应用程序中存在内存泄露的问题,**通过这些简单的指标就可以帮助我们找到这些可能存在的问题。

对于 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)

仪表(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)

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

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

相关推荐
逻辑与&&2 天前
[Prometheus学习笔记]从架构到案例,一站式教程
笔记·学习·prometheus
Walden-20202 天前
构建基于 DCGM-Exporter, Node exporter,PROMETHEUS 和 GRAFANA 构建算力监控系统
docker·容器·grafana·prometheus
牛角上的男孩3 天前
部署Prometheus、Grafana、Zipkin、Kiali监控度量Istio
grafana·prometheus·istio
福大大架构师每日一题4 天前
文心一言 VS 讯飞星火 VS chatgpt (383)-- 算法导论24.5 3题
prometheus
小安运维日记7 天前
Linux云计算 |【第五阶段】CLOUD-DAY10
linux·运维·云计算·k8s·grafana·prometheus
福大大架构师每日一题7 天前
29.2 golang实战项目log2metrics架构说明
架构·prometheus
花开了¥8 天前
prometheus 快速入门
prometheus
陈小肚10 天前
k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储
kubernetes·prometheus·thanos
福大大架构师每日一题10 天前
27.9 调用go-ansible执行playbook拷贝json文件重载采集器
golang·json·ansible·prometheus
迷茫运维路11 天前
Prometheus+Telegraf实现自定义监控项配置
运维·prometheus·telegraf·自定义监控