prometheus - Prometheus 中类似 StatsD 的计数器行为
问题描述
StatsD“计数器”指标类型描述为:
gorets:1|c
这是一个简单的计数器。将 1 添加到“gorets”存储桶中。config.deleteCounters
在每次刷新时,当前计数被发送并重置为 0。如果刷新时的计数为 0,那么您可以通过设置(仅适用于石墨后端)选择不为此计数器发送任何指标。Statsd 将在每次刷新时发送速率和计数。
实现方式不同,但原理是一样的:
每次刷新时,都会发送当前计数并将其重置为 0。
将其发送到兼容的后端,并使用任何兼容的工具(例如 Grafana)绘制它,会显示如下图:
3 ┃
2 ┃
1 ┃ █
0 ┗━━━━━━━━━━━━━━
换句话说,计数值将存在于您发出计数器并在之后立即返回零的“桶”中。
使用 Prometheus 似乎只有计数器(它们是持久的,并且不能递减)和仪表。如果 Prometheus 计数器增加,它将读取新的高水位线值,直到进程重新启动。
Prometheus 还提供 Gauges,可以提高和降低其值,但是在某些情况下不存在合适的“负面”操作,并且没有办法在事后将 Gauge 减回零。
Prometheus 提供了一种rate()
功能,似乎暗示当在柜台上运行时,可以采用仅显示积极变化的汇率(不可能出现负面变化)。
我宁愿避免向rate()
我的所有图表添加修饰符。
最接近模拟 StatsD 计数器行为的 Prometheus 惯用方法是什么?
解决方案
Prometheus 等价物是一个计数器。最大的区别在于状态存在于应用程序内部的内存中,而不是 StatsD 中的网络上。在 Prometheus 中使用rate()
所有计数器是正常的。
在这次谈话中有更多关于细节的细节。
推荐阅读
- javascript - reduce() 有问题;
- groovy - 如何重新格式化文件列表中的日期名称
- winapi - 控制台应用程序在启动时执行时无法创建子进程
- c# - Azure 函数和 MongoDB 之间的循环连接失败
- python - 如何计算第 0 行“好电影”的输出?
- fabricjs - FABRICJS TEXT(调整边界框大小)
- c - 无法正确地将 uint64_t 转换为双精度。我错过了什么?
- angular - 如何绕过 auth0 登录进行 Angular 测试?
- scala - 将模拟对象注入伴随对象字段
- reactjs - 为什么需要 npm serve 或 express 服务器来将 create-react-app 生产构建部署到 heroku 云服务器?