Node Exporter 有一个 metric 是 node_network_transmit_bytes_total
,它是一个 counter 类型。
我想在 Grafana 中创建一个直方图(或者 Heatmap),展示每个整小时内,发送了多少数据。
举个例子,这个 counter 的原始数据可能是每 60 秒采集一次的
Timestamp | Value |
---|---|
00:00:00 | 100 |
00:01:00 | 200 |
… | … |
08:59:00 | 53900 |
09:30:00 | 57000 |
我希望能用直方图,展示出每个小时的差值
Bucket | Delta |
---|---|
00:00:00-01:00:00 | 6000 |
01:00:00-02:00:00 | 6000 |
… | … |
08:00:00-09:00:00 | 6000 |
09:00:00-10:00:00 | 3000(因为这个小时还没过完,目前只有 3000) |
问过各种 GPT,但是通常给出的第一个解答都是用 increase()
,但这个函数的问题是,它是一个滑动窗口,它会“遍历”每个点,然后找相对于这个数据点,一小时前的数据是多少,然后算差值。所以假设我一天内记录了 24*60=1440 个数据点,它会给出 1440 个差值,但我想要的只是 24 个整点时刻的差值。
GPT 给出的一些其他复杂解答也有,但基本都不符合要求或者有语法错误无法查询。
此外,如果直接用 increase()
的数据,放到 Grafana 里做直方图,它会把这个 metric 的值分桶作为横坐标,然后把一个桶内有多少数据点作为纵坐标,也并不符合我的期望(以时间分桶)。
Google 英文搜索结果大多是官方文档对 Prometheus 几个 data type 的说明,不太有帮助。另外就是在知乎上看到一个非常接近的问题 如何使用prometheus来统计每日增量? - 明波00 的回答,但是他的查询也是类似 increase()
的结果,并且可能是 Grafana 版本差异问题,我在我的版本里并没有找到他所展示的一些设置。
不知道 L 站有没有人对 PromQL 和 Grafana 比较熟悉的人可以帮我解决一下这个问题。提前感谢