我使用Prometheus Java Client导出应用程序的会话信息。我们想要显示会话空闲的时间。
问题是我们最多有1000个会话,会话在一段时间后被删除。不幸的是,它们并没有从普罗米修斯消失:
我的代码如下所示:
static final Gauge sessionInactivity = Gauge.build()
.name("sessions_inactivity_duration")
.labelNames("internal_key", "external_key", "browser")
.help("Number of milliseconds a certain session has been inactive")
.register();
sessionInactivity.labels(internalKey, externalKey, browser).set(inactivityTime);
我试图在刮擦过程中做sessionInactivity.clear()
,但显然这并不会清空量表的内容。
答案 0 :(得分:3)
这种按请求处理不适合像Prometheus这样的公制系统。这将被视为剖析,为此将有更多的自定义。
还建议导出这类东西的时间戳,而不是多久以前。这对于更新不再更新的时间具有弹性,您可以在Prometheus端从time()
进行减法。
答案 1 :(得分:1)
Gauge
类有一个 remove
方法,它与 labels
方法具有相同的签名。对于您的具体示例,删除与该仪表关联的指标如下所示
sessionInactivity.remove(internalKey, externalKey, browser);
客户端库 documentation 声明:
<块引用>带有标签的指标应该支持具有相同标签的 remove() 方法 签名作为标签()将从度量中删除一个孩子没有 不再导出它,以及删除所有子项的 clear() 方法 从度量。这些会使子项的缓存无效。