基于工作区的 Application Insights 资源

Azure Monitor 基于 Application Insights 工作区的资源集成了 Application InsightsLog Analytics

你现在可以选择将 Application Insights 遥测数据发送到一个公用 Log Analytics 工作区,这样就可以全权访问 Log Analytics 的所有功能,同时将应用程序、基础结构和平台日志置于单一的合并位置中。 这样还可以跨资源实现公用的 Azure 基于角色的访问控制,并且不再需要跨应用/工作区的查询。

注意

基于工作区的 Application Insights 资源的数据引入和保留操作通过数据所在的 Log Analytics 工作区计费。 若要详细了解基于工作区的 Application Insights 资源的计费,请参阅 Azure Monitor 日志定价详细信息

新功能

使用基于工作区的 Application Insights,可以利用 Azure Monitor 和 Log Analytics 的最新功能。 例如:

  • 客户管理的密钥提供数据的静态加密,加密密钥只有你有权访问。
  • Azure 专用链接让你可以使用专用终结点将 Azure 平台即服务 (PaaS) 服务安全地链接到虚拟网络。
  • 使用承诺层级可以节省 30% 的成本(与即用即付价格相比)。
  • Log Analytics 流式传输可以更快地引入数据。

创建基于工作区的资源

登录到 Azure 门户,并创建 Application Insights 资源。

Screenshot that shows a workspace-based Application Insights resource.

如果你没有 Log Analytics 工作区,请参阅 Log Analytics 工作区创建文档

基于工作区的资源当前在所有区域中都可用

创建资源后,你将在“概述”窗格中看到相应的工作区信息。

Screenshot that shows a workspace name.

选择蓝色的链接文本会转到关联的 Log Analytics 工作区,可以在其中利用新的统一工作区查询环境。

注意

我们仍为 Application Insights 经典资源查询、工作簿和基于日志的警报提供完全后向兼容性。 若要查询或查看新的基于工作区的表结构或架构,必须先转到 Log Analytics 工作区。 在“Application Insights”窗格中选择“日志(分析)”访问经典 Application Insights 查询体验。

复制连接字符串

连接字符串用于标识要与遥测数据关联的资源。 还可以使用它来修改可供资源用作遥测目标的终结点。 必须复制连接字符串,并将其添加到应用程序的代码或添加到环境变量中。

配置监视

创建基于工作区的 Application Insights 资源后,请配置监视。

基于代码的应用程序监视

要进行基于代码的应用程序监视,请安装相应的 Application Insights SDK,并将连接字符串指向新建的资源。

有关如何为基于代码的监视设置 Application Insights SDK 的信息,请参阅特定于语言或框架的以下文档:

无代码监视和 Visual Studio 资源创建

要对 Azure Functions 和 Azure 应用服务等服务进行无代码监视,首先请创建基于工作区的 Application Insights 资源。 然后在配置监视时指向该资源。

这些服务在其自身的资源创建过程中提供用于新建 Application Insights 资源的选项。 但是通过这些 UI 选项创建的资源目前仅限于经典 Application Insights 体验。

同样的限制适用于 Visual Studio for ASP.NET 和 Visual Studio for ASP.NET Core 中的 Application Insights 资源创建体验。 必须在启用监视的 Visual Studio UI 中选择现有的基于工作区的资源。 在 Visual Studio 中选择“创建新资源”只能创建经典 Application Insights 资源。

自动创建资源

Azure CLI

若要访问预览版 Application Insights Azure CLI 命令,首先需要运行以下命令:

 az extension add -n application-insights

如果不运行 az extension add 命令,则会看到一条错误消息,指出 az : ERROR: az monitor: 'app-insights' is not in the 'az monitor' command group. See 'az monitor --help'

现在,可以运行以下代码来创建 Application Insights 资源:

az monitor app-insights component create --app
                                         --location
                                         --resource-group
                                         [--application-type]
                                         [--ingestion-access {Disabled, Enabled}]
                                         [--kind]
                                         [--only-show-errors]
                                         [--query-access {Disabled, Enabled}]
                                         [--tags]
                                         [--workspace]

示例

az monitor app-insights component create --app demoApp --location chinaeast2 --kind web -g my_resource_group --workspace "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test1234/providers/microsoft.operationalinsights/workspaces/test1234555"

有关此命令的完整 Azure CLI 文档,请参阅 Azure CLI 文档

Azure PowerShell

新建基于工作区的 Application Insights 资源。

New-AzApplicationInsights -Name <String> -ResourceGroupName <String> -Location <String> -WorkspaceResourceId <String>
   [-SubscriptionId <String>]
   [-ApplicationType <ApplicationType>]
   [-DisableIPMasking]
   [-DisableLocalAuth]
   [-Etag <String>]
   [-FlowType <FlowType>]
   [-ForceCustomerStorageForProfiler]
   [-HockeyAppId <String>]
   [-ImmediatePurgeDataOn30Day]
   [-IngestionMode <IngestionMode>]
   [-Kind <String>]
   [-PublicNetworkAccessForIngestion <PublicNetworkAccessType>]
   [-PublicNetworkAccessForQuery <PublicNetworkAccessType>]
   [-RequestSource <RequestSource>]
   [-RetentionInDays <Int32>]
   [-SamplingPercentage <Double>]
   [-Tag <Hashtable>]
   [-DefaultProfile <PSObject>]
   [-Confirm]
   [-WhatIf]
   [<CommonParameters>]

示例

New-AzApplicationInsights -Kind java -ResourceGroupName testgroup -Name test1027 -location chinaeast2 -WorkspaceResourceId "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/test1234/providers/microsoft.operationalinsights/workspaces/test1234555"

如需此 cmdlet 的完整 PowerShell 文档,以及了解如何检索连接字符串,请参阅 Azure PowerShell 文档

Azure 资源管理器模板

若要创建基于工作区的资源,请使用以下 Azure 资源管理器模板,并使用 PowerShell 部署这些模板。

模板文件

{
    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string"
        },
        "type": {
            "type": "string"
        },
        "regionId": {
            "type": "string"
        },
        "tagsArray": {
            "type": "object"
        },
        "requestSource": {
            "type": "string"
        },
        "workspaceResourceId": {
            "type": "string"
        }
    },
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "microsoft.insights/components",
            "location": "[parameters('regionId')]",
            "tags": "[parameters('tagsArray')]",
            "apiVersion": "2020-02-02-preview",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Application_Type": "[parameters('type')]",
                "Flow_Type": "Bluefield",
                "Request_Source": "[parameters('requestSource')]",
                "WorkspaceResourceId": "[parameters('workspaceResourceId')]"
            }
        }
    ]
}

注意

有关资源属性的详细信息,请参阅属性值。 不会使用 Flow_TypeRequest_Source,但出于完整性,已将其包含在此示例中。

参数文件

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "type": {
            "value": "web"
        },
        "name": {
            "value": "customresourcename"
        },
        "regionId": {
            "value": "chinanorth"
        },
        "tagsArray": {
            "value": {}
        },
        "requestSource": {
            "value": "Custom"
        },
        "workspaceResourceId": {
            "value": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my_resource_group/providers/microsoft.operationalinsights/workspaces/myworkspacename"
        }
    }
}

修改关联的工作区

创建基于工作区的 Application Insights 资源后,可以修改关联的 Log Analytics 工作区。

从“Application Insights 资源”窗格中,选择“属性”>“更改工作区”>“Log Analytics 工作区”。

导出遥测

基于工作区的资源不支持旧版连续导出功能。 应在 Application Insights 资源中选择“诊断设置”>“添加诊断设置”。 可以选择所有表或一部分表以存档到存储帐户。 还可以流式传输到 Azure 事件中心。

注意

导出诊断设置可能会增加成本。 有关详细信息,请参阅从 Application Insights 导出遥测数据。 有关此功能的定价信息,请参阅 Azure Monitor 定价页。 开始计费之前,会发送通知。 如果在通知期过后继续使用遥测数据导出,你将按适用的费率付费。

应该部署多少个 Application Insights 资源?

部署 Web 应用程序的下一个版本时,不希望将新版本和已发布的版本中的 Application Insights 遥测混合使用。

为了避免混淆,请使用单独的连接字符串将来自不同开发阶段的遥测数据发送到单独的 Application Insights 资源。

如果系统是 Azure 云服务的实例,有另一种可以设置单独连接字符串

关于资源和连接字符串

为 Web 应用设置 Application Insights 监视时,会在 Azure 中创建 Application Insights 资源。 为了查看和分析从应用收集的遥测数据,请在 Azure 门户中打开此资源。 资源由连接字符串标识。 在安装 Application Insights 程序包来监视应用时,将为其配置连接字符串,以使其知道要将遥测数据发送到何处。

每个 Application Insights 资源都附带了现成可用的指标。 如果将组件报表划分到相同的 Application Insights 资源,则针对这些指标发出警报可能没有意义。

何时使用单个 Application Insights 资源

使用单个 Application Insights 资源:

  • 对于一起部署的应用程序组件。 这些应用程序通常由单个团队开发,并由同一组 DevOps/ITOps 用户管理。
  • 如果在默认情况下有必要对所有组件的关键绩效指标进行聚合,如响应持续时间或仪表板中的故障率等。 可以选择在指标资源管理器中按角色名称进行分段。
  • 如果不需要在应用程序组件之间以不同方式管理 Azure 基于角色的访问控制。
  • 如果不需要组件之间不同的指标警报条件。
  • 如果不需要在组件之间以不同的方式管理连续导出。
  • 如果不需要在组件之间以不同的方式管理帐单/配额。
  • 如果可以让 API 密钥对所有组件中的数据具有相同的访问权限。 10 个 API 密钥足以满足所有组件的需求。
  • 如果可以在所有角色中具有相同的智能检测和工作项集成设置。

注意

如果要整合多个 Application Insights 资源,可以将现有的应用程序组件指向新的、合并的 Application Insights 资源。 存储在旧资源中的遥测数据不会传输到新资源。 仅当新资源中有了足够的遥测数据时才会删除旧资源,这样能保证业务连续性。

其他注意事项

请注意:

  • 你可能需要添加自定义代码,以确保在 Cloud_RoleName 特性中设置了有意义的值。 如果没有为此特性设置有意义的值,则无任何门户体验可用。
  • 对于 Azure Service Fabric 应用程序和经典云服务,SDK 会自动从 Azure 角色环境中读取并设置这些服务。 对于所有其他类型的应用,你可能需要对其显式设置。
  • 实时指标不支持按角色名称拆分。

创建更多 Application Insights 资源

若要创建 Application Insights 资源,请参阅创建 Application Insights 资源

警告

如果 Application Insights 资源监视不同区域中的 Azure 资源(即遥测生成者),则可能会产生额外的网络成本。 成本将因遥测来自哪个区域以及遥测的去向而有所不同。 有关详细信息,请参阅 Azure 带宽定价

获取连接字符串

连接字符串标识所创建的资源。

需要将向其发送数据的所有资源的连接字符串。

按生成号筛选

发布新应用版本时,我们希望能够将不同版本的遥测数据分开。

可以设置“应用程序版本”属性,这样便可以筛选搜索指标资源管理器结果。

可通过多种不同的方法设置“应用程序版本”属性。

  • 直接设置:

    telemetryClient.Context.Component.Version = typeof(MyProject.MyClass).Assembly.GetName().Version;

  • 遥测初始值设定项中将该行换行,确保以一致的方式设置所有 TelemetryClient 实例。

  • ASP.NET:在 BuildInfo.config 中设置版本。 Web 模块可从 BuildLabel 节点中选取版本。 在项目中包含此文件,并记得在解决方案资源管理器中设置“始终复制”属性。

    <?xml version="1.0" encoding="utf-8"?>
    <DeploymentEvent xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/VisualStudio/DeploymentEvent/2013/06">
      <ProjectName>AppVersionExpt</ProjectName>
      <Build type="MSBuild">
        <MSBuild>
          <BuildLabel kind="label">1.0.0.2</BuildLabel>
        </MSBuild>
      </Build>
    </DeploymentEvent>
    
    
  • ASP.NET:在 Microsoft 生成引擎中自动生成 BuildInfo.config。 在 .csproj 文件中添加以下几行:

    <PropertyGroup>
      <GenerateBuildInfoConfigFile>true</GenerateBuildInfoConfigFile>    <IncludeServerNameInBuildInfo>true</IncludeServerNameInBuildInfo>
    </PropertyGroup>
    

    此步骤会生成一个名为 yourProjectName.BuildInfo.config 的文件。 发布过程会将此文件重命名为 BuildInfo.config

    当使用 Visual Studio 生成时,生成标签包含一个占位符 (AutoGen_...)。 但是,在使用 Microsoft 生成引擎生成时,标签中会填充正确的版本号。

    若要让 Microsoft 生成引擎生成版本号,请在 AssemblyReference.cs 中设置类似于 1.0.* 的版本。

版本和发行版本跟踪

要跟踪应用程序版本,请确保 Microsoft 生成引擎进程生成了 buildinfo.config。 在 .csproj 文件中,添加:

<PropertyGroup>
  <GenerateBuildInfoConfigFile>true</GenerateBuildInfoConfigFile>
  <IncludeServerNameInBuildInfo>true</IncludeServerNameInBuildInfo>
</PropertyGroup>

当 Application Insights Web 模块具有版本信息时,它会自动将“应用程序版本”作为属性添加到每个遥测项。 因此,可以在执行诊断搜索浏览指标时按版本进行筛选。

内部版本号只能由 Microsoft 生成引擎生成,而不是由开发人员从Visual Studio 生成。

版本注释

如果使用 Azure DevOps,则可以在每次发布新版本时将批注标记添加到图表中。

常见问题

本部分提供常见问题的解答。

如何将 Application Insights 资源移动到新区域?

当前不支持将现有 Application Insights 资源从一个区域移动到另一个区域。 你收集的历史数据无法迁移到新区域。 唯一的部分解决方法是:

  1. 在新区域中新建基于工作区的 Application Insights 资源
  2. 重新创建特定于新资源中原始资源的所有唯一自定义项。
  3. 修改应用程序以使用新区域资源的连接字符串
  4. 测试以确认所有内容是否都按预期处理新的 Application Insights 资源。
  5. 此时,你可以保留或删除原始 Application Insights 资源。 如果删除经典 Application Insights 资源,则所有历史数据都会丢失。 如果原始资源基于工作区,则其数据会保留在 Log Analytics 中。 保留原始 Application Insights 资源将允许访问其历史数据,直至其数据保留期设置到期。

通常需要在新区域中为资源手动重新创建或更新的唯一自定义项包括但不限于:

  • 重新创建自定义仪表板和工作簿。
  • 重新创建或更新任何自定义日志/指标警报的范围。
  • 重新创建可用性警报。
  • 重新创建用户访问新资源所需的任何 Azure 基于角色的访问控制自定义设置。
  • 复制涉及引入采样、数据保留、每日上限和自定义指标启用的设置。 可通过“使用情况和预估成本”窗格控制这些设置。
  • 依赖 API 密钥(例如版本注释实时指标安全控制通道)的任何集成。 你需要生成新的 API 密钥并更新关联的集成。
  • 必须重新配置经典资源中的连续导出。
  • 必须重新配置基于工作区资源中的诊断设置。

注意

如果在新区域中创建的资源要用于替换经典资源,我们建议探索创建基于工作区的新资源的好处。 或者,将现有资源迁移至基于工作区的资源

后续步骤