假设我有一个 posts_total 计数器。它每天都在增加,并且有各种标签,例如 posts_total{status='active'} 和 posts_total{status='deleted'}。
delta(posts_total{status=~"active|deleted"}[1d])
向我展示了每天变化的滚动图。
但是这不是很有用,因为它是滚动变化,如果我放大它就失去了任何意义,因为它每小时显示不同的费率。 如何获得一个图表来显示每天从午夜到午夜的变化,而不是滚动增量?我想要一个条形图,可以用来准确说明 2 天前或 3 个月前的特定日期增加了多少。
根据 文档,
delta()
应该与仪表一起使用,而不是与计数器一起使用。有 3 个专用函数可与计数器一起使用,用于处理计数器重置并进行推断:rate()
、irate()
和 increase()
。您很可能需要后者 - increase()
。这是一篇关于该主题的很棒的文章。
为了显示图表,Grafana 执行类似“范围查询” 的操作来请求指定时间段内的查询结果矩阵。
因此您的查询increase(posts_total{status=~"active|deleted"}[1d])
会被执行多次以绘制图表。执行了多少次?这取决于所选的时间段参数(“开始”和“结束”)和“步骤”参数。F.e.如果
start=12-00
、
end=13-00
和
step=20m
- 您应该在图表上看到类似 3 个值,所有这些值都显示 1 天计数器增加,由查询中的
range
参数指定(
1d
)。因此,这并不是真正的“滚动增量”,而是所请求的 1 天增量(可能)以 1 小时为频率。
保留
range
>
step
是有意义的,因为否则结果会丢失一些样本(想象一下每天执行 1 小时的计数器增加 - 跳过 23 小时的数据)。