在最近30分钟内未收到任何消息时发出警报

时间:2018-08-30 12:39:47

标签: prometheus

我正在查询普罗米修斯。具有度量标准的服务将公开度量标准终结点,并且其中包含mymessagingservice_inbox_messagecount条目,该条目显示收件箱MSMQ中有多少消息。 我有一个MSMQ收件箱和一个审核箱。当邮件到达收件箱队列时,我的服务将从收件箱中删除该邮件并将其移至Autit。我的目标是进行查询,以检查在过去30分钟内有多少邮件到达了收件箱队列。 这是我的查询内容:

 callService(api,params){
        var headers = new Headers();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');
        return this._http.post(this._url+api,params+"&"+this.randomno,{headers:headers})
               .map((response:Response) => response.json());
    }

当我运行它时,所有结果都显示为0。事实是,审核队列在2分钟前显示了一条消息。 不知道我是否有正确的查询或是否有其他因素影响结果。我唯一能想到的是,该消息很快从收件箱队列中提取,而Prometheus前后对端点进行了观察,因此未记录该消息。 有想法吗?

1 个答案:

答案 0 :(得分:0)

看起来您正在使用量规,并且仅报告队列中当前的“待处理”消息数。在这里,您遇到的问题是刮擦的时间很重要-因此在大多数情况下将无法满足您的需要。您的用例听起来像是具有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