如何删除不再有效的仪表
How to remove no longer valid Gauges
我使用 Prometheus Java 客户端导出我的应用程序的会话信息。我们想显示会话空闲了多长时间。
问题是我们最多有 1000 个会话,会话会在一段时间后被删除。不幸的是,它们并没有从 Prometheus 中消失:
我的代码如下所示:
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()
但显然这不会清空仪表的内容。
这种按请求处理的方式不适合像 Prometheus 这样的度量系统。这将被视为分析,为此需要更多自定义内容。
还建议为这种事情导出时间戳,而不是多久以前的时间。这对更新时间不再更新的东西有弹性,你可以在Prometheus端做time()
的减法。
Gauge
class 有一个 remove
方法,它与 labels
方法具有相同的签名。对于您的具体示例,删除与该量表关联的指标将如下所示
sessionInactivity.remove(internalKey, externalKey, browser);
客户端库 documentation 声明:
Metrics with labels SHOULD support a remove() method with the same
signature as labels() that will remove a Child from the metric no
longer exporting it, and a clear() method that removes all Children
from the metric. These invalidate caching of Children.
由于您正在注册仪表,因此需要从注册表中删除过期的仪表。
protected MeterRegistry registry;
...
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(registry); // use registry
...
// remove expired gauges from registry
registry.remove(sessionInactivity);
我使用 Prometheus Java 客户端导出我的应用程序的会话信息。我们想显示会话空闲了多长时间。
问题是我们最多有 1000 个会话,会话会在一段时间后被删除。不幸的是,它们并没有从 Prometheus 中消失:
我的代码如下所示:
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()
但显然这不会清空仪表的内容。
这种按请求处理的方式不适合像 Prometheus 这样的度量系统。这将被视为分析,为此需要更多自定义内容。
还建议为这种事情导出时间戳,而不是多久以前的时间。这对更新时间不再更新的东西有弹性,你可以在Prometheus端做time()
的减法。
Gauge
class 有一个 remove
方法,它与 labels
方法具有相同的签名。对于您的具体示例,删除与该量表关联的指标将如下所示
sessionInactivity.remove(internalKey, externalKey, browser);
客户端库 documentation 声明:
Metrics with labels SHOULD support a remove() method with the same signature as labels() that will remove a Child from the metric no longer exporting it, and a clear() method that removes all Children from the metric. These invalidate caching of Children.
由于您正在注册仪表,因此需要从注册表中删除过期的仪表。
protected MeterRegistry registry;
...
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(registry); // use registry
...
// remove expired gauges from registry
registry.remove(sessionInactivity);