使用 prometheus 和 grafana 绘制慢速计数器
Graphing slow counters with prometheus and grafana
我们用 sum(rate(my_counter_total[1m]))
或 sum(irate(my_counter_total[20s]))
绘制快速计数器。如果您总是希望在最后几秒内发生变化,那么第二个是更可取的。
但是,如果每几分钟甚至几小时只有一些增量,您如何绘制慢速计数器的图表?像 0.0013232/s 这样的值对人类来说不是很友好。
假设我想用图表表示有多少用户注册了我们的服务(我们预计每小时有几个注册)。什么是合理的查询?
我们目前使用以下方法在 grafana 中绘制图表:
- 查询:
3600 * sum(rate(signup_total[1h]))
- 步长:3600s
- 分辨率:1/1
这样合理吗?
我仍在尝试了解所有这些参数如何共同作用以绘制图表。有人可以解释范围选择器 ([10m]
)、rate()
和 irate()
函数、grafana 中的 Step
和 Resolution
设置如何相互影响吗?
这是正确的做法。您还可以使用 increase()
,它是使用 rate()
的语法糖。
Can someone explain how the range selector
这仅供 Prometheus 使用,并指示要处理的数据。
the Step and Resolution settings in grafana influence each other?
这在 Grafana 端使用,它会影响它将从 Prometheus 请求多少时间片。
这些设置不会直接相互影响。但是,分辨率应该小于范围,否则您将采样不足并丢失信息。
3600 * sum(rate(signup_total[1h]))
可以替换为 sum(increase(signup_total[1h]))
。 increase(counter[d])
函数 returns 计数器在给定的回顾 window d
上增加。例如。 increase(signup_total[1h])
returns 过去一小时内的注册人数。
请注意,即使 signup_total
仅包含整数值,increase(signup_total[1h])
的返回值也可能是小数。这是因为外推 - 有关技术细节,请参阅 this issue。针对此问题有以下解决方案:
- 要使用 offset modifier:
signup_total - (signup_total offset 1h)
。如果 signup_total
在过去一小时内未重置为零,则此查询 returns 正确结果。在这种情况下,sum(signup_total - (signup_total offset 1h))
大致相当于 sum(increase(signup_total[1h]))
,但 returns 更准确的整数结果。
- 使用 VictoriaMetrics. It returns the expected integer results from
increase()
out of the box. See this article and this comment 了解技术细节。
我们用 sum(rate(my_counter_total[1m]))
或 sum(irate(my_counter_total[20s]))
绘制快速计数器。如果您总是希望在最后几秒内发生变化,那么第二个是更可取的。
但是,如果每几分钟甚至几小时只有一些增量,您如何绘制慢速计数器的图表?像 0.0013232/s 这样的值对人类来说不是很友好。
假设我想用图表表示有多少用户注册了我们的服务(我们预计每小时有几个注册)。什么是合理的查询?
我们目前使用以下方法在 grafana 中绘制图表:
- 查询:
3600 * sum(rate(signup_total[1h]))
- 步长:3600s
- 分辨率:1/1
这样合理吗?
我仍在尝试了解所有这些参数如何共同作用以绘制图表。有人可以解释范围选择器 ([10m]
)、rate()
和 irate()
函数、grafana 中的 Step
和 Resolution
设置如何相互影响吗?
这是正确的做法。您还可以使用 increase()
,它是使用 rate()
的语法糖。
Can someone explain how the range selector
这仅供 Prometheus 使用,并指示要处理的数据。
the Step and Resolution settings in grafana influence each other?
这在 Grafana 端使用,它会影响它将从 Prometheus 请求多少时间片。
这些设置不会直接相互影响。但是,分辨率应该小于范围,否则您将采样不足并丢失信息。
3600 * sum(rate(signup_total[1h]))
可以替换为 sum(increase(signup_total[1h]))
。 increase(counter[d])
函数 returns 计数器在给定的回顾 window d
上增加。例如。 increase(signup_total[1h])
returns 过去一小时内的注册人数。
请注意,即使 signup_total
仅包含整数值,increase(signup_total[1h])
的返回值也可能是小数。这是因为外推 - 有关技术细节,请参阅 this issue。针对此问题有以下解决方案:
- 要使用 offset modifier:
signup_total - (signup_total offset 1h)
。如果signup_total
在过去一小时内未重置为零,则此查询 returns 正确结果。在这种情况下,sum(signup_total - (signup_total offset 1h))
大致相当于sum(increase(signup_total[1h]))
,但 returns 更准确的整数结果。 - 使用 VictoriaMetrics. It returns the expected integer results from
increase()
out of the box. See this article and this comment 了解技术细节。