基于工作区的 Application Insights 资源
Azure Monitor Application Insights 基于工作区的资源集成了 Application Insights 和 Log 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 资源。
如果你没有 Log Analytics 工作区,请参阅 Log Analytics 工作区创建文档。
基于工作区的资源当前在所有区域中都可用。 在两个不同的区域中使用 Application Insights 和 Log Analytics 可能会影响延迟,并降低监视解决方案的整体可靠性。
创建资源后,你将在“概述”窗格中看到相应的工作区信息。
选择蓝色的链接文本会转到关联的 Log Analytics 工作区,可以在其中利用新的统一工作区查询环境。
注意
我们仍为 Application Insights 经典资源查询、工作簿和基于日志的警报提供完全后向兼容性。 若要查询或查看新的基于工作区的表结构或架构,必须先转到 Log Analytics 工作区。 在“Application Insights”窗格中选择“日志(分析)”访问经典 Application Insights 查询体验。
复制连接字符串
连接字符串用于标识要与遥测数据关联的资源。 还可以使用它来修改可供资源用作遥测目标的终结点。 必须复制连接字符串,并将其添加到应用程序的代码或添加到环境变量中。
配置监视
创建基于工作区的 Application Insights 资源后,请配置监视。
基于代码的应用程序监视
要进行基于代码的应用程序监视,请安装相应的 Application Insights SDK,并将连接字符串指向新建的资源。
有关如何为基于代码的监视设置 Application Insights SDK 的信息,请参阅特定于语言或框架的以下文档:
- ASP.NET
- ASP.NET Core
- 后台任务和新式控制台应用程序 (.NET/.NET Core)
- 经典控制台应用程序 (.NET)
- Java
- JavaScript
- Node.js
- Python
无代码监视
若要对 Azure Functions 和 Azure 应用服务等服务进行无代码监视,可以先创建基于工作区的 Application Insights 资源。 然后在配置监视时指向该资源。 或者,可以创建一个新的 Application Insights 资源,作为 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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/test1234/providers/microsoft.operationalinsights/workspaces/test1234555"
如需此 cmdlet 的完整 PowerShell 文档,以及了解如何检索连接字符串,请参阅 Azure PowerShell 文档。
Azure 资源管理器模板
@description('Name of Application Insights resource.')
param name string
@description('Type of app you are deploying. This field is for legacy reasons and will not impact the type of App Insights resource you deploy.')
param type string
@description('Which Azure Region to deploy the resource to. This must be a valid Azure regionId.')
param regionId string
@description('See documentation on tags: https://learn.microsoft.com/azure/azure-resource-manager/management/tag-resources.')
param tagsArray object
@description('Source of Azure Resource Manager deployment')
param requestSource string
@description('Log Analytics workspace ID to associate with your Application Insights resource.')
param workspaceResourceId string
resource component 'Microsoft.Insights/components@2020-02-02' = {
name: name
location: regionId
tags: tagsArray
kind: 'other'
properties: {
Application_Type: type
Flow_Type: 'Bluefield'
Request_Source: requestSource
WorkspaceResourceId: workspaceResourceId
}
}
参数文件
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"value": "my_workspace_based_resource"
},
"type": {
"value": "web"
},
"regionId": {
"value": "chinanorth2"
},
"tagsArray": {
"value": {}
},
"requestSource": {
"value": "CustomDeployment"
},
"workspaceResourceId": {
"value": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/testxxxx/providers/microsoft.operationalinsights/workspaces/testworkspace"
}
}
}
修改关联的工作区
创建基于工作区的 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 资源不受支持,并且你无法将历史数据迁移到新区域。 解决方法包括:
- 在所需区域中新建基于工作区的 Application Insights 资源。
- 在新资源中根据原始资源重新创建任何独特的自定义项。
- 使用新区域资源的连接字符串更新应用程序。
- 进行测试以确保使用新的 Application Insights 资源时一切正常。
- 决定保留还是删除原始 Application Insights 资源。 删除经典资源意味着丢失所有历史数据。 如果资源基于工作区,则数据将保留在 Log Analytics 中,从而使用户可以访问历史数据,直到保留期到期。
通常需要在新区域中为资源手动重新创建或更新的唯一自定义项包括但不限于:
- 重新创建自定义仪表板和工作簿。
- 重新创建或更新任何自定义日志/指标警报的范围。
- 重新创建可用性警报。
- 重新创建用户访问新资源所需的任何 Azure 基于角色的访问控制自定义设置。
- 复制涉及引入采样、数据保留、每日上限和自定义指标启用的设置。 可通过“使用情况和预估成本”窗格控制这些设置。
- 依赖 API 密钥(例如版本注释和实时指标安全控制通道)的任何集成。 你需要生成新的 API 密钥并更新关联的集成。
- 必须重新配置经典资源中的连续导出。
- 必须重新配置基于工作区资源中的诊断设置。
能否在 Azure 资源管理器部署中使用 providers('Microsoft.Insights', 'components').apiVersions[0]?
不建议使用此方法来填充 API 版本。 最新版本可表示可能包含中断性变更的预览版本。 即使使用较新的非预览版本,API 版本也并不总是与现有模板向后兼容。 在某些情况下,API 版本可能并不适用于所有订阅。