首页 > 解决方案 > Azure 事件网格 - 不匹配事件的日志

问题描述

最近我们一直在更新我们的事件网格订阅,由于迁移中的错误,一些订阅没有创建。开发错误发生了,因此我想到的问题是事件网格似乎没有提供任何查看不匹配事件的方法。

例如,未交付(通过某些设置)的匹配事件最终以存储帐户纯文本形式出现。我尝试打开事件网格主题日志,希望在那里找到有用的东西,但除了匹配/传递/不匹配的消息数量之外,我没有找到任何东西。

我想知道我是否遗漏了什么,并想听听其他人如何处理这个问题。

我在这里创建了一个功能提案。

标签: azure-eventgrid

解决方案


当前版本的 AEG 不支持在事件源兴趣(存储、自定义主题等)中订阅UnmatchedEvents 。在 AEG 事件扇出模式中,所有订阅都松散地分离并且彼此透明。

基本上我们可以根据应用程序事件模型的复杂性添加这个特性。

  1. 使用UnmatchedEvents的订阅高级过滤的简单解决方案。此解决方案适用于非常小的事件模型,例如主题订阅数少于 25,请参阅高级过滤限制。另一个限制是手动设置过滤匹配订阅和不匹配订阅。以下是此简单解决方案的示例:

    在此处输入图像描述

为EventType的StringNotIn操作设置了高级过滤。我的示例是对匹配的订阅使用有效的 EventTypes,例如abc1, abc2, ... abc25,但它可以是应用程序事件模型所需的任何内容,最多 512 个字符。

在此处输入图像描述

基本上,高级过滤是在 EventTypes 过滤器中过滤(拒绝)现有的匹配订阅,例如:

 "includedEventTypes":[
      "abc1"
    ]
  1. 第二种解决方案允许在审计订阅者中处理“影子过滤”。请参阅以下屏幕片段:

在此处输入图像描述

我们有一个带有 AzureFunction 事件处理程序的审核订阅(没有对主题进行过滤)。此函数将根据来自现有订阅的所有过滤器对象的知识过滤传入消息。如果不匹配,则将事件消息与过滤的详细信息一起存储到存储队列中。请注意,blob 文件可以根据资源(订阅)更改自动更新。您可以使用 GET REST API 来获取特定主题的所有订阅,例如:

https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.EventGrid/topics/myTopic/providers/Microsoft.EventGrid/eventSubscriptions?api-version=2020-01-01-preview
  1. 第三种方案适用于大型复杂的应用事件模型,有千订阅、多重过滤等:

在此处输入图像描述

如您所见,上述解决方案是使用管道流来分析阴影 AEG 过滤。参考数据表示来自 AEG 模型中所有订阅的过滤器对象的实时更新知识。流作业将其用于特定的事件源(主题)等。注意,该作业可以在实时或后处理中运行,用于审计、故障排除、监控、学习过程等。


推荐阅读