首页 > 解决方案 > 计算计数器度量范围向量中第一个元素和最后一个元素之间的差异

问题描述

我正在使用 PromQL 查询来计算过去 60 分钟内通过任何节点上的某些接口推送/接收的累积流量。使用 Prometheus Node Exporter 的指标:

delta(node_network_receive_bytes_total{device=~"ens.*"}[60m])*8

只要节点在该时间间隔内不重新启动就很好,该值只是向量的尖端和尾部之间的差异。当系统重新启动并且计数器复位时,函数的含义停止反映所述结果。

例如,这是以下图表node_network_transmit_bytes_total

IPv6 流量

...该函数将返回 -9MiB,而不是 10.2MiB。

我想我也可以使用rate()s 来估算时间。但是有没有更好的功能/方法来获得实际的东西

标签: prometheuspromqlprometheus-node-exporter

解决方案


如delta()的文档中所示:

delta 只能与仪表一起使用。

您应该使用特定于counters的increase()函数。

单调性的中断(例如由于目标重新启动而导致的计数器重置)会自动调整。

这是区分量规和计数器的主要原因之一。请参阅有关差异的答案

您可以通过以下方法之一识别计数器:

  • 文本文件输出中的类型(例如# TYPE http_requests_total counter:)
  • 该值是单调递增的(grafana 检测到时会提出计数器相关的功能)
  • 名称应以_total(如果出口商尊重最佳做法)结尾

推荐阅读