prometheus - 计算计数器度量范围向量中第一个元素和最后一个元素之间的差异
问题描述
我正在使用 PromQL 查询来计算过去 60 分钟内通过任何节点上的某些接口推送/接收的累积流量。使用 Prometheus Node Exporter 的指标:
delta(node_network_receive_bytes_total{device=~"ens.*"}[60m])*8
只要节点在该时间间隔内不重新启动就很好,该值只是向量的尖端和尾部之间的差异。当系统重新启动并且计数器复位时,函数的含义停止反映所述结果。
例如,这是以下图表node_network_transmit_bytes_total
:
...该函数将返回 -9MiB,而不是 10.2MiB。
我想我也可以使用rate()
s 来估算时间。但是有没有更好的功能/方法来获得实际的东西?
解决方案
如delta()的文档中所示:
delta 只能与仪表一起使用。
您应该使用特定于counters的increase()函数。
单调性的中断(例如由于目标重新启动而导致的计数器重置)会自动调整。
这是区分量规和计数器的主要原因之一。请参阅有关差异的答案。
您可以通过以下方法之一识别计数器:
- 文本文件输出中的类型(例如
# TYPE http_requests_total counter
:) - 该值是单调递增的(grafana 检测到时会提出计数器相关的功能)
- 名称应以
_total
(如果出口商尊重最佳做法)结尾