首页 > 解决方案 > 如果在过去 30 分钟内未收到任何消息,则发出警报

问题描述

我正在查询 Prometheus。具有指标的服务公开了指标端点,它包含一个 mymessagingservice_inbox_messagecount 条目,显示收件箱 MSMQ 中有多少消息。我有一个 MSMQ 收件箱和一个审计收件箱。当消息到达收件箱队列时,我的服务会将其从收件箱中删除并将其移动到 Autit 中。我的目标是进行查询,检查过去 30 分钟内有多少邮件到达收件箱队列。这是我的查询的样子:

“mymessagingservice_inbox_messagecount{environment="prod"}[30m]” 

当我运行它时,所有结果都显示为 0。事实是审计队列在 2 分钟前显示了一条消息。不确定我是否有正确的查询,或者是否有其他因素影响结果。我唯一能想到的是,消息很快从收件箱队列中取出,Prometheus 前后对端点进行了观察,这样消息就没有被记录下来。任何的想法?

标签: prometheus

解决方案


看起来您正在使用仪表并仅报告队列中“待处理”消息的当前数量。在这里,您遇到的问题是刮擦的时间是相关的 - 因此在大多数情况下不会产生您需要的东西。您的用例听起来像是具有函数的counter指标的完美示例。increase()

计数器是一种度量类型,它总是增加并计算(例如)进入队列的消息的总数。然后,您可以应用该increase()函数来计算范围向量中第一项和最后一项之间的值的(不完全精确)增量。

increase(mymessagingservice_inbox_messages_total{environment="prod"}[30m])

这意味着您需要以一种在将新消息放入收件箱后立即增加计数器的方式来检测您的代码。

有关详细信息,请参阅有关countersincrease function的文档。您还可以查看以这种方式执行此操作的 rabbitmq 导出器的指标:https ://github.com/kbudde/rabbitmq_exporter#queues---counter

当一切都设置好后,你可以建立一个规则来计算过去 30 分钟内是否没有增加,这个简单的条件:

increase(mymessagingservice_inbox_messages_total{environment="prod"}[30m]) == 0

推荐阅读