多实例 springboot 微服务重启时 Counter 类型指标重置问题

2025 年 12 月 29 日
 workWithMusic

使用 springboot 集成 micrometer 实现自定义 prometheus 指标。 假如在多实例的商城系统中存在一个用于统计商品查看次数的指标,名为 item_view_count ,label:item_idinstance_id 。 当服务重启时,按照 micrometer 的默认行为,这个指标会被置为 0 。

对于这个行为我想到了两种方案。

  1. 将这个值持久化,并且在第一次创建指标时加载。
  2. 服务重启后使用新的 instance_id ,这样在做 sum 统计时不会被重置影响

各位都是如何处理这个问题呢?

2219 次点击
所在节点    Java
6 条回复
yevXxHmg
2025 年 12 月 29 日
我认为这个是一个业务需求,最好是持久化起来,并且需要注意并发,需要上报到 prometheus ,可以自定义 Collector 实现普米接口,从库里或者缓存中读取最新得商品查看次数得指标,上报即可
Arei
2025 年 12 月 29 日
只能说看起来不是个适合用 micrometer/prometheus 的指标,如果一定要这样做是不是得用 sum+increase 函数在 granfana 统计
yesterdaysun
2025 年 12 月 29 日
不用特别处理, 直接用 sum+increase 统计即可
wudaye
2025 年 12 月 29 日
counter 不是这么玩的,考虑一下 Gauge ?
lander203
2025 年 12 月 29 日
如果你不需要非常精确,只需要看一个大概值,可以使用方案 1

另外,如果只需要看 sum ,可以在服务关闭时,把自身的数量交给其他实例——通过 topic 和 lock 来保证数据正确
joe469391363
2025 年 12 月 29 日
你这个场景就不适合使用 counter

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1181887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX