如何删除不再有效的量表

时间:2017-07-18 16:47:49

标签: java session prometheus

我使用Prometheus Java Client导出应用程序的会话信息。我们想要显示会话空闲的时间。

问题是我们最多有1000个会话,会话在一段时间后被删除。不幸的是,它们并没有从普罗米修斯消失:

Current and expired sessions

我的代码如下所示:

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(),但显然这并不会清空量表的内容。

2 个答案:

答案 0 :(得分:3)

这种按请求处理不适合像Prometheus这样的公制系统。这将被视为剖析,为此将有更多的自定义。

还建议导出这类东西的时间戳,而不是多久以前。这对于更新不再更新的时间具有弹性,您可以在Prometheus端从time()进行减法。

答案 1 :(得分:1)

Gauge 类有一个 remove 方法,它与 labels 方法具有相同的签名。对于您的具体示例,删除与该仪表关联的指标如下所示

sessionInactivity.remove(internalKey, externalKey, browser);

客户端库 documentation 声明:

<块引用>

带有标签的指标应该支持具有相同标签的 remove() 方法 签名作为标签()将从度量中删除一个孩子没有 不再导出它,以及删除所有子项的 clear() 方法 从度量。这些会使子项的缓存无效。