【问题标题】:How to remove no longer valid Gauges如何删除不再有效的仪表
【发布时间】:2017-07-18 16:47:48
【问题描述】:

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

问题是我们最多有 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(),但显然这不会清空仪表的内容。

【问题讨论】:

    标签: java session prometheus


    【解决方案1】:

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

    sessionInactivity.remove(internalKey, externalKey, browser);
    

    客户端库documentation 声明:

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

    【讨论】:

      【解决方案2】:

      这种按请求处理的方式不适合像 Prometheus 这样的度量系统。这将被视为概要分析,为此需要进行更多自定义。

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

      【讨论】:

      • 明白了,但是没有删除 Gauge 的概念吗?我有另一种情况,我需要收集浏览器的统计信息,我将使用标签表示。我宁愿不必将它们简单地设置为零。
      • 有一种方法,但它只是真正用于联合。这也是 Prometheus 不适合的用例,对于事件记录,您需要 ELK 堆栈之类的东西。
      • 我仍在尝试确定我的其他方案是否适合 Prometheus。我清楚地理解了时间戳部分,我将更改它。你能告诉我一些(更多)具体原因为什么我的会议方法不适合 Prometheus 吗?是不是因为有大量可能的internal_keys 将进入数千个,尽管一次不能超过 1000 个会话?我可以为我的第二种情况创建另一个问题,如果您愿意,请给我一个标志
      • 会话数是一个原因,也是它们所代表的含义。您可能从中提取的 Prometheus 指标将是会话总数、最早的会话或平均会话之前。
      • “有办法,但我不告诉”接受的答案是什么?
      【解决方案3】:

      由于您正在注册仪表,因此您需要从注册表中删除已过期的仪表。

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2020-02-19
        • 1970-01-01
        • 2019-06-06
        • 2020-08-22
        • 1970-01-01
        相关资源
        最近更新 更多