Prometheus 中类似于 StatsD 的计数器行为

StatsD-like counter behaviour in Prometheus

StatsD "counter" 指标类型描述为:

gorets:1|c This is a simple counter. Add 1 to the "gorets" bucket. At each flush the current count is sent and reset to 0. If the count at flush is 0 then you can opt to send no metric at all for this counter, by setting config.deleteCounters (applies only to graphite backend). Statsd will send both the rate as well as the count at each flush.

实现方式不同,原理相同:

At each flush the current count is sent and reset to 0.

将其发送到兼容的后端,并使用任何兼容的工具(例如 Grafana)对其进行绘图,显示的图表如下所示:

3 ┃
2 ┃
1 ┃    █
0 ┗━━━━━━━━━━━━━━

换句话说,计数值将存在于 "bucket" 中,您在其中发出计数器,然后 return 立即归零。

Prometheus 似乎只有计数器(它们是持久的,不能递减)和仪表。如果 Prometheus 计数器增加,它将读取新的高水位线值,直到进程重新启动。

Prometheus 还提供仪表,可以升高和降低其值,但在某些情况下不存在合适的 "negative" 操作,并且无法在事后将仪表减回到零。

Prometheus 提供了一个 rate() 函数,这似乎意味着当 运行 在柜台上时,可以采用应该只显示正变化(不可能有负变化)的汇率。

我希望避免在我的所有图表中添加 rate() 修饰符。

最接近模拟 StatsD 计数器行为的 Prometheus 惯用方法是什么?

Prometheus 的等价物是计数器。最大的区别在于状态存在于应用程序内部的内存中,而不是通过 StatsD 中的网络。在 Prometheus 中,在所有计数器上使用 rate() 是正常的。

this talk 中有更多关于细节的详细信息。