在azure事件网格中,我没有发现很多解决事件丢失情况的方法。
因此,我要问与以下情况有关的问题:
如何解决这种情况?
答案 0 :(得分:0)
AEG的当前版本未集成到诊断设置功能,这对于流式传输度量标准和日志非常有帮助。
对于基于事件域的方案(仍在公共预览中,请参见limits)可以帮助Azure Monitoring REST API查看事件域中特定的所有指标。
有效指标是:
PublishSuccessCount,PublishFailCount,PublishSuccessLatencyInMs,MatchedEventCount,DeliveryAttemptFailCount,DeliverySuccessCount,DestinationProcessingDurationInMs,DroppedEventCount,DeadLetteredCount
以下示例是一个REST GET请求,用于获取事件域中特定时间跨度和间隔的所有指标值:
https://management.azure.com/subscriptions/{mySubId}/resourceGroups/{myRG}/providers/Microsoft.EventGrid/domains/{myDomain}/providers/Microsoft.Insights/metrics?api-version=2018-01-01&interval=PT1H&aggregation=count,total×pan=2019-02-06T07:58:12Z/2019-02-07T08:58:12Z&metricnames=PublishSuccessCount,PublishFailCount,PublishSuccessLatencyInMs,MatchedEventCount,DeliveryAttemptFailCount,DeliverySuccessCount,DestinationProcessingDurationInMs,DroppedEventCount,DeadLetteredCount
基于响应值,您可以从发布者端查看AEG行为的度量以及向订阅者传递事件的度量。对于您的生产版本,我建议您使用轮询技术从AEG获取所有指标并将其推送到事件中心以进行流分析,警报等。基于查询参数(例如时间跨度,间隔等) ,它可以接近实时。如果AEG支持诊断设置,则该轮询和发布所有指标都将被废弃,并且可以继续对分析流作业进行小的修改。
另一点是将事件模型扩展为审核部分。我确实建议以下内容:
添加域范围订阅以捕获事件域中的所有事件,并将其推送到事件中心以进行流传输。请注意,该事件域内的任何已发布事件都应在此已发布流管道中。
为死信消息添加存储订阅,并将其推送到同一事件中心以进行流传输。
(可选),将死信存储的诊断设置(某些指标)添加到同一事件中心,以进行流传输。请注意,在尝试将死信消息存储在Blob容器中4小时后,该消息被删除。对于失败的进程,没有任何日志消息,只有度量计数器。
对于客户端,我确实建议每个订阅者都创建一条日志消息(例如标头+事件消息),以进行审核和故障排除。它应该存储在Blob容器中或本地存储,然后再上传等。重点是,此参考对于分析流作业以快速找出问题所在可能非常有用。
除了事件模型外,发布者还应定期(例如每小时一次)探测事件域端点,并且还应向探测主题发送探测事件消息以进行测试。该探测主题的事件订阅将配置一个死信选项。订阅者Webhook处理程序应始终失败,并显示错误代码= HttpStatusCode.BadRequest ,例如没有重试操作。请注意,将死信消息存储在存储器中时,会有300秒的延迟时间。换句话说,探测事件+ 5分钟后,死信消息应该在流管道中。您的事件模型中的这种探测场景将从视图的发布者和交付点探测AEG的功能。
上述解决方案显示在以下屏幕片段中: