计算计数器指标范围向量中第一个和最后一个元素之间的差异

Calculate difference between first and last element in counter metrics' range vector

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

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

只要节点在那个时间间隔内不重新启动就完全没问题,该值只是向量的尖端和尾部之间的差值。当系统重新启动并且计数器重置时,函数的含义停止反映所述结果。

例如这是 node_network_transmit_bytes_total 的图表:

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

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

delta() 的文档所示:

delta should only be used with gauges.

您应该使用 increase() function which is specific to counters

Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for.

这是区分仪表和计数器的主要原因之一。参见

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

  • 文本文件输出中的类型(例如:# TYPE http_requests_total counter
  • 值是单调递增的(grafana在检测到的时候会提出counter相关函数)
  • 名称应以 _total 结尾(如果出口商尊重 best practices