你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用应用程序组治理客户端应用程序的资源
在 Azure 事件中心内,你可以使用应用程序组治理连接到事件中心的客户端应用程序的事件流式处理工作负载。 有关详细信息,请参阅使用应用程序组进行资源治理。
本文介绍如何执行以下任务:
- 创建应用程序组
- 启用或禁用应用程序组
- 定义阈值限制并将限制策略应用于应用程序组
- 使用诊断日志验证限制
创建应用程序组
本部分介绍如何使用 Azure 门户、CLI、PowerShell 和 Azure 资源管理器 (ARM) 模板创建应用程序组。
可以通过以下步骤使用 Azure 门户创建应用程序组。
导航到事件中心命名空间。
在左侧菜单中,选择“设置”下的“应用程序组”。
在“应用程序组”页上,选择命令栏上的“+ 应用程序组”。
在“添加应用程序组”页上,执行以下步骤:
指定应用程序组的“名称”。
确认选中“已启用”。 若要首先使应用程序组处于禁用状态,请清除“已启用”选项。 此标志确定应用程序组的客户端是否可以访问事件中心。
对于“安全性上下文类型”,请选择“命名空间共享访问策略”、“事件中心共享访问策略”或“Microsoft Entra 应用程序”。应用程序组支持在命名空间级别或实体(事件中心)级别选择 SAS 密钥。 创建应用程序组时,应将其关联到客户端应用程序使用的一个共享访问签名 (SAS) 或 Microsoft Entra 应用程序 ID。
如果选择了“命名空间共享访问策略”:
对于“SAS 密钥名称”,请选择可用作此应用程序组的安全上下文的 SAS 策略。 可以选择“添加 SAS 策略”以添加新策略,然后与应用程序组关联。
如果选择了“事件中心共享访问策略”:
对于“SAS 密钥名称”,请从事件中心“共享访问策略”页复制 SAS 策略名称,并将其粘贴到文本框中
如果选择 Microsoft Entra 应用程序:
- 对于 Microsoft Entra 应用程序(客户端)ID,请指定 Microsoft Entra 应用程序或客户端 ID。
查看自动生成的“客户端组 ID”,这是与应用程序组关联的唯一 ID。 应用程序治理范围(命名空间或实体级别)将取决于所使用的 Microsoft Entra 应用程序 ID 的访问级别。 下表显示了针对不同安全性上下文类型自动生成的客户端组 ID:
安全性上下文类型 |
自动生成的客户端组 ID |
命名空间共享访问密钥 |
NamespaceSASKeyName=<NamespaceLevelKeyName> |
Microsoft Entra 应用程序 |
AADAppID=<AppID> |
事件中心共享访问密钥 |
EntitySASKeyName=<EntityLevelKeyName> |
注意
使用命名空间共享访问密钥创建的所有现有应用程序组都将继续使用以 SASKeyName
开头的客户端组 ID。 但是,所有新的应用程序组都将具有更新的客户端组 ID,如上所示。
若要添加策略,请执行以下步骤:
输入该策略的名称。
对于“类型”,请选择“限制策略”。
对于指标 ID,请选择以下选项之一:“传入消息数”、“传出消息数”、“传入字节数”、“传出字节数”。 在以下示例中,已选择“传入消息数”。
对于速率限制阈,请输入阈值。 在下面的示例中,10000 被指定为传入消息数的阈值。
下面是添加了另一个策略的页面的屏幕截图。
现在,在“添加应用程序组”页上,选择“添加”。
确认在应用程序组列表中看到应用程序组。
可以通过选择列表中应用程序组旁边的垃圾桶图标按钮来将其删除。
使用 CLI 命令 az eventhubs namespace application-group create
在事件中心命名空间或事件中心级别创建应用程序组。 必须基于所选的安全性上下文类型设置 --client-app-group-identifier。 请查看上面的表,了解支持的安全性上下文类型
下面的示例在 Azure 资源组 MyResourceGroup
的命名空间 mynamespace
中创建名为 myAppGroup
的应用程序组。 它使用以下配置。
- 共享访问策略用作安全上下文
- 客户端应用组 ID 设置为
NamespaceSASKeyName=<NameOfTheSASkey>
。
Incoming messages
指标的第一个限制策略,其中 10000
作为阈值。
Incoming bytes
指标的第二个限制策略,其中 20000
作为阈值。
az eventhubs namespace application-group create --namespace-name mynamespace \
-g MyResourceGroup \
--name myAppGroup \
--client-app-group-identifier NamespaceSASKeyName=keyname \
--throttling-policy-config name=policy1 metric-id=IncomingMessages rate-limit-threshold=10000 \
--throttling-policy-config name=policy2 metric-id=IncomingBytes rate-limit-threshold=20000
要详细了解 CLI 命令,请参阅 az eventhubs namespace application-group create
。
使用 PowerShell 命令 New-AzEventHubApplicationGroup
在事件中心命名空间或事件中心级别创建应用程序组。 必须基于所选的安全性上下文类型设置 -ClientAppGroupIdentifier。 请查看上面的表,了解支持的安全性上下文类型
下面的示例使用 New-AzEventHubThrottlingPolicyConfig
创建两个将与应用程序关联的策略。
Incoming bytes
指标的第一个限制策略,其中 12345
作为阈值。
Incoming messages
指标的第二个限制策略,其中 23416
作为阈值。
然后,通过将限制策略和共享访问策略指定为安全上下文,它在 Azure 资源组 myresourcegroup
的命名空间 mynamespace
中创建名为 myappgroup
的应用程序组。
$policy1 = New-AzEventHubThrottlingPolicyConfig -Name policy1 -MetricId IncomingBytes -RateLimitThreshold 12345
$policy2 = New-AzEventHubThrottlingPolicyConfig -Name policy2 -MetricId IncomingMessages -RateLimitThreshold 23416
New-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup
-ClientAppGroupIdentifier NamespaceSASKeyName=myauthkey -ThrottlingPolicyConfig $policy1, $policy2
要详细了解 PowerShell 命令,请参阅 New-AzEventHubApplicationGroup
。
以下示例展示了如何使用 ARM 模板创建应用程序组。 在此示例中,通过将客户端 AppGroupIdentifier
设置为 NamespaceSASKeyName=contososaspolicy
,应用程序组被关联到现有的 SAS 策略名称 contososaspolicy
。 应用程序组策略也在 ARM 模板中定义。 必须基于所选的安全性上下文类型设置 ClientAppGroupIdentifier。 请查看上面的表,了解支持的安全性上下文类型
{
"type": "ApplicationGroups",
"apiVersion": "2022-01-01-preview",
"name": "[parameters('applicationGroupName')]",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces/', parameters('eventHubNamespaceName'))]",
"[resourceId('Microsoft.EventHub/namespaces/authorizationRules', parameters('eventHubNamespaceName'),parameters('namespaceAuthorizationRuleName'))]"
],
"properties": {
"ClientAppGroupIdentifier": "NamespaceSASKeyName=contososaspolicy",
"policies": [{
"Type": "ThrottlingPolicy",
"Name": "ThrottlingPolicy1",
"metricId": "IncomingMessages",
"rateLimitThreshold": 10
},
{
"Type": "ThrottlingPolicy",
"Name": "ThrottlingPolicy2",
"metricId": "IncomingBytes",
"rateLimitThreshold": 3951729
}
],
"isEnabled": true
}
}
启用或禁用应用程序组
你可以通过禁用包含客户端应用程序的应用程序组来阻止那些应用程序访问事件中心命名空间。 禁用应用程序组后,客户端应用程序将无法发布或使用数据。 该应用程序组的客户端应用程序的任何已建立连接也将终止。
本部分介绍如何使用 Azure 门户、PowerShell、CLI 和 ARM 模板启用或禁用应用程序组。
在“事件中心命名空间”页上,选择左侧菜单上的“应用程序组”。
选择要启用或禁用的应用程序组。
在“编辑应用程序组”页上,清除“启用”旁边的复选框以禁用应用程序组,然后选择页面底部的“更新”。 同样,选中用于启用应用程序组的复选框。
使用 --is-enabled
设置为 false
的 az eventhubs namespace application-group update
命令禁用应用程序组。 同样,若要启用应用程序组,请将此属性设置为 true
并运行命令。
以下示例命令禁用位于资源组 myresourcegroup
的事件中心命名空间 mynamespace
中名为 myappgroup
的应用程序组。
az eventhubs namespace application-group update --namespace-name mynamespace -g myresourcegroup --name myappgroup --is-enabled false
使用 -IsEnabled
设置为 false
的 Set-AzEventHubApplicationGroup 命令禁用应用程序组。 同样,若要启用应用程序组,请将此属性设置为 true
并运行命令。
以下示例命令禁用位于资源组 myresourcegroup
的事件中心命名空间 mynamespace
中名为 myappgroup
的应用程序组。
Set-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup -IsEnabled false
以下 ARM 模板演示如何通过将 isEnabled
属性设置为 false
来更新现有命名空间 (contosonamespace
) 以禁用应用程序组。 应用组的标识符为 SASKeyName=RootManageSharedAccessKey
。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"namespace_name": {
"defaultValue": "contosonamespace",
"type": "String"
},
"client-app-group-identifier": {
"defaultValue": "SASKeyName=RootManageSharedAccessKey",
"type": "String"
}
},
"resources": [
{
"type": "Microsoft.EventHub/namespaces/applicationGroups",
"apiVersion": "2022-01-01-preview",
"name": "[concat(parameters('namespace_name'), '/contosoappgroup')]",
"properties": {
"clientAppGroupIdentifier": "[parameters('client-app-group-identifier')]",
"isEnabled": false,
"policies": [
{
"type": "ThrottlingPolicy",
"name": "incomingmsgspolicy",
"metricId": "IncomingMessages",
"rateLimitThreshold": 10000
},
{
"type": "ThrottlingPolicy",
"name": "incomingbytespolicy",
"metricId": "IncomingBytes",
"rateLimitThreshold": 20000
}
]
}
}
]
}
应用限制策略
你可以在创建应用程序组时或者向现有应用程序组添加零个或多个策略。 例如,你可以向 contosoAppGroup
添加与 IncomingMessages
、IncomingBytes
或 OutgoingBytes
相关的限制策略。 这些策略将应用于使用 SAS 策略 contososaspolicy
的客户端应用程序的事件流式处理工作负载。
若要了解如何在创建应用程序组时添加策略,请参阅创建应用程序组部分。
还可以在创建应用程序组后添加策略。
在“事件中心命名空间”页上,选择左侧菜单上的“应用程序组”。
选择要添加、更新或删除策略的应用程序组。
在“编辑应用程序组”页上,可以执行以下步骤:
- 更新现有策略的设置(包括阈值)
- 添加新策略
使用 az eventhubs namespace application-group policy add
将策略添加到现有应用程序组。
示例:
az eventhubs namespace application-group policy add --namespace-name mynamespace -g MyResourceGroup --name myAppGroup --throttling-policy-config name=policy1 metric-id=OutgoingMessages rate-limit-threshold=10500 --throttling-policy-config name=policy2 metric-id=IncomingBytes rate-limit-threshold=20000
使用将 -ThrottingPolicyConfig
设置为适当值的 Set-AzEventHubApplicationGroup 命令。
示例:
$policyToBeAppended = New-AzEventHubThrottlingPolicyConfig -Name policy1 -MetricId IncomingBytes -RateLimitThreshold 12345
$appGroup = Get-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup
$appGroup.ThrottlingPolicyConfig += $policyToBeAppended
Set-AzEventHubApplicationGroup -ResourceGroupName myresourcegroup -NamespaceName mynamespace -Name myappgroup -ThrottlingPolicyConfig $appGroup.ThrottlingPolicyConfig
以下 ARM 模板演示如何通过更新现有命名空间 (contosonamespace
) 添加限制策略。 应用组的标识符为 NamespaceSASKeyName=RootManageSharedAccessKey
。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"namespace_name": {
"defaultValue": "contosonamespace",
"type": "String"
},
"client-app-group-identifier": {
"defaultValue": "NamespaceSASKeyName=RootManageSharedAccessKey",
"type": "String"
}
},
"resources": [
{
"type": "Microsoft.EventHub/namespaces/applicationGroups",
"apiVersion": "2022-01-01-preview",
"name": "[concat(parameters('namespace_name'), '/contosoappgroup')]",
"properties": {
"clientAppGroupIdentifier": "[parameters('client-app-group-identifier')]",
"isEnabled": true,
"policies": [
{
"type": "ThrottlingPolicy",
"name": "incomingmsgspolicy",
"metricId": "IncomingMessages",
"rateLimitThreshold": 10000
},
{
"type": "ThrottlingPolicy",
"name": "incomingbytespolicy",
"metricId": "IncomingBytes",
"rateLimitThreshold": 20000
}
]
}
}
]
}
确定限制策略的阈值
Azure 事件中心支持应用程序指标日志功能,以观察系统中的常规吞吐量,并相应地确定应用程序组的阈值。 可按照以下步骤确定阈值:
在事件中心打开诊断设置,其中“应用程序指标日志”作为所选类别,然后选择“Log Analytics”作为目标。
创建一个不具有任何限制策略的空应用程序组。
继续以常规吞吐量向事件中心发送消息/事件。
转到“Log Analytics 工作区”,并在 AzureDiagnostics 表中查询正确的活动名称(基于 (resource-governance-overview.md#throttling-policy---threshold-limits))。 以下示例查询设置为跟踪传入消息数的阈值:
AzureDiagnostics
| where ActivityName_s =="IncomingMessages"
| where Outcome_s =="Success"
选择 Log Analytics 工作区上的“图表”部分,并根据 Y 轴上生成的时间和 x 轴上发送的消息计数绘制图表。
在此示例中,可以看到常规吞吐量从未超过 550 条消息(预计的当前吞吐量)。 此观察结果有助于定义实际阈值。
确定阈值后,可在应用程序组中添加新的限制策略。
发布或使用事件
成功将限制策略添加到应用程序组后,可以通过使用属于 contosoAppGroup
应用程序组的客户端应用程序来发布或使用事件,以测试限制行为。 若要测试,你可以使用 AMQP 客户端或 Kafka 客户端应用程序和用来创建应用程序组的同一 SAS 策略名称或 Microsoft Entra 应用程序 ID。
注意
当客户端应用程序受到限制时,发布或使用数据的速度应该会变慢。
使用应用程序组验证限制
与确定限制策略的阈值限制类似,可使用应用程序指标日志来验证限制并查找更多详细信息。
可使用以下示例查询来找出特定时间范围内的所有受限制请求。 必须更新 ActivityName 以匹配预期受到限制的操作。
AzureDiagnostics
| where Category =="ApplicationMetricsLogs"
| where ActivityName_s =="IncomingMessages"
| where Outcome_s =="Throttled"
由于协议级别的限制,不会为事件中心(OutgoingMessages
或 OutgoingBytes
)内的使用者操作生成受限制的请求日志。 当请求在使用者端受到限制时,可观察到出口吞吐量缓慢。
后续步骤