你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

多租户和 Application Insights

Application Insights 是一项监视 Web 应用程序的性能、可用性和使用情况的服务。 它可以帮助你识别和诊断问题、分析用户行为以及跟踪关键指标。 本文将介绍对多租户解决方案非常有用的一些 Application Insights 功能, 以及各种租户模型。

提示

Application Insights 专为监视解决方案而设计和优化。 它并不是用来捕获系统中发生的每一个事件,因为你可能需要执行审核或计费。 若要了解如何测量使用情况以满足计费目的,请参阅衡量多租户解决方案中的消耗情况的注意事项

隔离模型

在实现使用 Application Insights 的多租户系统时,需要确定所需的隔离级别。 有多种隔离模型可供选择。 下面是可能影响你的选择的一些因素:

  • 计划拥有多少租户?
  • 是否在多个租户之间共享应用程序层,或者是否为每个租户部署单独的部署标记?
  • 你或你的客户是否对将数据与其他租户的数据一起存储很敏感?
  • 解决方案的应用程序层是多租户,数据层是单租户吗?
  • 租户之间的遥测要求是否不同?

提示

决定 Application Insights 成本的主要因素是发送给它的数据量以及数据的保留时间。 在多租户应用程序中,专用 Application Insights 实例的总成本与共享实例的总成本相同。 有关详细信息,请参阅 Azure Monitor 定价页面

下表汇总了 Application Insights 各主要租户模型之间的差异:

注意事项 全局共享的 Application Insights 实例 每个地区/标记一个 Application Insights 实例 每个租户一个 Application Insights 实例
数据隔离
性能隔离
部署复杂性 低到中等,具体取决于租户数 中等,具体取决于租户数
操作复杂性
示例方案 具有共享应用程序层的大型多租户解决方案 具有地区部署的多租户解决方案,可更好地为全球客户群提供服务 每个租户的各个应用程序实例

全局共享的 Application Insights 实例

你可以使用 Application Insights 的单个实例来跟踪多租户应用程序中的租户的遥测数据,如下所示:

该示意图显示了全局共享的 Application Insights 隔离模型。

此方法的优点包括可简化应用程序的配置和管理,因为只需检测应用程序代码一次。 此方法的缺点包括与单个 Application Insights 实例关联的限制和配额。 若要确定限制是否会影响多租户应用程序,请参阅 Application Insights 限制

使用共享的 Application Insights 资源时,隔离和筛选每个租户的数据可能也更加困难,尤其是在拥有大量租户的情况下。 由于所有租户都共享相同的 Log Analytics 工作区和检测密钥,因此可能还需要注意安全和隐私问题。

若要解决这些问题,你可能需要实现逻辑和机制,以确保可以按租户筛选数据,并且运营团队可以正确查看每个租户的数据。 你可以通过添加自定义属性来实现筛选,以捕获作为每个遥测项的一部分的租户 ID。 然后,可以使用租户 ID 来查询数据。

每个标记一个 Application Insights 实例

多租户解决方案通常包括多个标记,这些标记可能部署在不同的 Azure 地区中。 通过标记,可以为特定地区的本地租户提供服务,以便提供更好的性能。 单个标记可能为单个租户或一小组租户提供服务。 若要了解有关标记的详细信息,请参阅部署标记模式

你可能会决定在每个标记中部署一个 Application Insights 实例,从而在使用该标记的所有租户之间共享该实例,如下所示:

该示意图显示了每个标记一个实例的隔离模型。

此方法在资源限制方面提供了更大的灵活性,因为这些限制适用于每个 Application Insights 实例。

每个租户一个 Application Insights 实例

你可能会决定为每个租户使用专用的 Application Insights 实例:

该示意图显示了每个租户一个实例的情况。

这种方法针对租户遥测数据为你提供了提供了更大的灵活性和控制力,并提供了最强的数据隔离。 使用此模型时,可以配置特定于租户的设置和保留策略。

但是,使用此方法时,需要部署大量 Application Insights 实例,管理租户目录中特定于租户的设置,并在新租户加入时更改应用程序代码。 请注意,为每个租户部署专用 Application Insights 实例的决定与为每个租户部署应用程序层的决定是分开的。 例如,你可以决定在由多个租户共享的标记中部署单个应用程序实例,但为每个租户部署一个 Application Insights 实例。

如果需要在租户之间具有高度数据隔离、需要对各种租户使用不同的配置,或者单个 Application Insights 实例的服务限制不能满足你的需求,则应考虑为每个租户使用一个 Application Insights 实例。

使用此方法时,可能聚合数据和跨所有租户比较数据会比较困难,因为你需要分别查询多个 Application Insights 实例。 如果使用此方法,请考虑使用跨资源查询和 Azure Monitor 工作簿

支持多租户的 Application Insights 功能

自定义属性和指标

Application Insights 提供了一种使用自定义属性和指标扩充遥测数据的方法。 自定义属性是可附加到任何遥测项(如请求或事件)的键值对。 自定义指标是可以随时间推移跟踪的数值,例如分数或队列长度。 你可以使用自定义属性和指标将特定于租户的信息(如租户 ID、租户名称、租户位置和部署标记 ID)添加到遥测数据。

将自定义属性添加到遥测数据的方法有两种:使用 TelemetryClient 或使用遥测初始化表达式。

TelemetryClient

TelemetryClient 是一个可用于跟踪任何遥测项的对象。 你可以通过任何遥测项的 Properties 字典访问其自定义属性。 使用 TelemetryClient 的优点是可以完全控制要添加的自定义属性以及何时添加这些属性。 缺点是需要访问和修改要使用自定义属性扩充的每个遥测项。

遥测初始化表达式

你可以使用遥测初始化表达式向所有遥测项添加信息,或修改标准遥测模块所设置的属性。

在多个租户之间共享 Application Insights 实例时,遥测初始化表达式通常可提供将租户 ID 注入每个遥测项的好方法。 然后,你可以使用该 ID 来查询和筛选报告。 使用遥测初始化表达式的优点是,可以在一个位置将自定义属性应用于所有或部分遥测项,而无需为每个项编写代码。 缺点是你可能无法控制要添加到每个遥测项的自定义属性,因此可能会添加不必要的或冗余的数据。

将自定义属性添加到遥测数据后(无论是通过何种机制),可以使用 Application Insights 的强大功能以更精细、更有意义的方式监视和分析多租户应用程序。 例如,可以:

  • 使用指标资源管理器创建图表和图形,以针对每个租户显示应用程序的性能和使用情况。
  • 使用 Log Analytics 编写可基于特定于租户的属性或指标来筛选、聚合和联接遥测数据的复杂查询。
  • 使用警报来设置规则,以便在租户满足某些条件时通知你。
  • 使用 Azure Monitor 工作簿创建交互式报告和仪表板,以针对每个租户直观呈现应用程序的运行状况和状态。

将多个 Application Insights 实例统一到单个视图中

可用于统一来自多个 Application Insights 实例的数据的方法有多种。 选择哪种方法取决于你的需求和偏好。 以下部分描述了其中一些方法。

跨资源查询

你可以使用跨资源查询来以单个查询的形式查询来自多个 Application Insights 实例的数据。 实例可以位于单个资源组、多个资源组或多个订阅中。 随着查询中 Application Insights 工作区数量的增加,查询性能可能会降低。 可以在单个查询中包含的 Application Insights 工作区的数量也是有限的。 有关详细信息,请参阅跨多个工作区和应用进行查询

Azure Monitor 工作簿

你可以使用 Azure Monitor 工作簿来基于多个源(包括 Application Insights)中的数据创建交互式报告和仪表板。 借助这些报告和仪表板,你可以在单个视图中直观呈现和分析来自多个 Application Insights 实例的数据。

延迟

受监视系统上的数据可用于进行分析所需的时间称为延迟。 多租户应用程序中的共享 Application Insights 实例不会产生比专用实例更多的延迟,除非共享实例受到限制,并且这种限制妨碍了引入数据。 在这种情况下,延迟会增加。

引入时的速率限制

你可以使用采样来限制服务每天引入的遥测数据量,从而在 Application Insights 中执行引入速率限制。 采样有助于防止 Application Insights 由于引入限制而限制遥测数据。 你可以使用固定速率采样,根据租户数和每日上限来确定最佳采样率,以便保持在限制范围内。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

  • Raj Nemani | 主管、合作伙伴技术策略师,GPS-ISV

其他参与者:

要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤