问题描述
在使用Azure Event Hub的过程中,需要监控消费端是否正常消费数据?而常规的指标只有 Incoming Message, Outgoing Message,是否指标能表明当前Event Hub消费滞后,即 Incoming 数量远远大于 Outgoing呢?
- IncomingMessages :发布到事件中心的消息数。
- OutgoingMessages :从事件中心使用的消息数。
常规思路是用 Incoming - Outgoing, 但如果Event Hub有多个消费组消费的时候(比如5个),那么 Outgoing 会是 Incoming的5倍。而且消费一条消息的时候,可能会出现重复多次消费的情况,所以Outgoing 会远远大于Incoming。
问题解答
通过查看资料,发现在"高级"和“专用”的Event Hub中,有一个ConsumerLag指标,就是表示Incoming和Outgoing之间的延迟。但是,它有两种情况为0的时候:
1)如果当时没有消费的consumer和event hub连接的话,它的值是0。
2)如果消息被及时消费,没有积压数据,值为0。
第一种情况的0为异常状态,第二种情况的0为正常状态。
所以如果使用0作为一个指标条件,则会出现误判。
但是在根据 Incoming Message > 0 或 Outgoing Message = 0 条件结合,则可以满足 Event Hub是否有滞后的判断。
参考资料
Azure 事件中心的监视数据参考 : https://learn.microsoft.com/zh-cn/azure/event-hubs/monitor-event-hubs-reference#application-metrics-logs