rabbitmq - 处理 Prometheus Gauge 中的陈旧数据

标签 rabbitmq prometheus

上下文:我想为 RabbitMQ 构建自己的导出器。为此,我设置了一个 HTTP 服务器来查询管理 API,解析响应并使用 Prometheus 格式构建适当的响应

我正在测量队列中的消息数量,以便在队列中有太多消息时收到警报。为此,我设置了以下仪表:rabbitmq_queue_messages{queue_name="Q1"}
我的问题是:如果队列被删除会发生什么?例如:

  • 在 T1,导出商返回 rabbitmq_queue_messages{queue_name="Q1"} 5
  • 在 T2,队列由于某种原因被删除
  • 在 T3,我的导出商再次被要求提供指标。

  • 据我了解,在 T3,即使队列不再存在,它也会返回相同的 rabbitmq_queue_messages{queue_name="Q1"} 5响应,因为这就是量规在 Prometheus 上的工作方式。对我来说,这似乎很奇怪,因为在 T3,Q1 不再存在,所以我希望停止接收此队列的数据点,而不是接收陈旧的数据。

    我为此找到的解决方法是针对每个向导出商提出的请求构建一个新的 prometheus 注册表,以从一张干净的表开始,但这似乎有点麻烦,我真的不喜欢以这种方式工作。

    那么,我如何才能以更符合 Prometheus 惯用的方式避免使用过时的仪表数据?

    最佳答案

    如果这是 Java 导出器,则使用 client_java 编写,您只需清除您的 Gauge (在 myGauge.clear() 中)而不是构建一个全新的 Registry .

    或者,如果这太重要并且您有办法在队列被删除时得到通知,只需拨打 Gauge.remove(queueName)当您收到通知时。

    编辑:以前从未真正见过任何 Ruby 代码,但似乎 Registry.unregister("rabbitmq_queue_messages") 可能是仅清除一个指标(及其所有标签组合,即在您的情况下针对所有队列)的不那么严厉的方式。我没有看到任何类似于 Java 客户端的 Gauge.remove()这将允许只删除一个样本/标签组合,但我可能会遗漏一些东西。

    关于rabbitmq - 处理 Prometheus Gauge 中的陈旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58688050/

    相关文章:

    azure - 当 Pod 重新创建时,Prometheus 发生崩溃循环

    java - 在 RabbitMQ 中发布时提供不正确(不存在)的队列名称

    Prometheus 无指标清除警报

    python - 如何使用 pyramid_sockjs 的消息传递?

    sql - 有没有强力支持SQL数据库来持久化rabbitmq消息

    amazon-web-services - 如何使用 helm chart 在 VMWare 的 Kubernetes FluentD Operator 中将 prometheus.enabled 标志设置为 true?

    python - 使用 Prometheus 中的指标监控批处理作业的状态

    mysqld_exporter 拒绝连接到 mariadb

    c# - 为什么我的兔子队列不会死?

    .net - RabbitMQ DotNet 客户端不连接到 SSL