问题描述
在使用Azure Service Bus的时候,我们可以根据Queue中目前存在的消息数来判断当前消息是否有积压的情况。
但是,在Event Hub中,因为所有消息都会被存留到预先设定的保留时间(默认是7天), 所以无法通过消息数来判断当前的消息是否有积压或者是有多余重复消费。
当消费端出现异常情况,在没有incoming的情况下,还是存在大量的outgoing,这种情况如何来提前预警呢?是否可以通过设置告警规则来及时通知运维人员呢?
如下图这样Outgoing 大于 incoming的情况
问题解答
在Azure服务中,PaaS资源都可以根据指标数据来设置告警,但是这是基于该服务有这类型指标的情况。
如现在Event Hub中 Outgoing Message 和Incoming Message不匹配的情况,由于Event Hub自身的指标中,并没有一个指标表示 Outgoing 与 Incoming 之间的差距值。 如果需要知道两个指标间的差值,就需要从收集的Metrics指标中进行自定义查询语句,并根据结果进行阈值设定。
主要的步骤有:
1)收集Event Hub Metrics指标到Log A中
- 设置诊断日志,日志发送到Log Analytics Workspace中
详细步骤,可参考官网:https://docs.azure.cn/zh-cn/event-hubs/monitor-event-hubs#log-analytics
2)自定义查询语句,在Kusto中进行行列转换,绝对值转换
示例Kusto语句
AzureMetrics | where ResourceProvider =="MICROSOFT.EVENTHUB" | where MetricName =="EHOUTMSGS" or MetricName =="EHINMSGS" | project TimeGenerated, MetricName, Total, TimeGrain | evaluate pivot(MetricName,sum(Total)):(TimeGenerated:datetime, EHOUTMSGS:long, EHINMSGS:long,AlertValue:long) | project TimeGenerated,EHOUTMSGS, EHINMSGS, AlertValue = abs(EHOUTMSGS - EHINMSGS)
07-07 04:56