在 Azure 应用程序服务中为 .NET、Node.js、Python 和 Java 应用程序启用应用程序监视
自动检测(也称为运行时监视)是启用适用于 Azure 应用程序服务的 Application Insights 的最简单方法,无需任何代码更改或高级配置。 根据具体的应用场景,通过手动检测评估是否需要更高级的监视。
备注
对检测密钥引入的支持将于 2025 年 3 月 31 日结束。 检测密钥引入功能将会继续工作,但我们将不再为该功能提供更新或支持。 转换为连接字符串,以利用新功能。
重要
如果同时检测到自动检测监视和手动基于 SDK 的检测,则只会采用手动检测设置。 这样安排可防止发送重复数据。 若要了解详细信息,请参阅故障排除。
在应用程序服务的左侧导航菜单中选择“Application Insights”,然后选择“启用”。
创建新资源,或为此应用程序选择现有 Application Insights 资源。
备注
选择“确定”以创建新资源时,系统将提示你“应用监视设置”。 选择“继续”会将新的 Application Insights 资源链接到应用程序服务。 然后,应用程序服务将重启。
指定要使用哪些资源后,可以选择 Application Insights 根据平台为应用程序收集数据的方式。 ASP.NET Core 集合选项为“建议”或“禁用”。
重要
如果同时检测到自动检测监视和手动基于 SDK 的检测,则只会采用手动检测设置。 这样安排可防止发送重复数据。 若要了解详细信息,请参阅故障排除。
备注
不支持 APPINSIGHTS_JAVASCRIPT_ENABLED
和 urlCompression
的组合。 有关详细信息,请参阅疑难解答。
在应用程序服务的左侧导航菜单中选择“Application Insights”,然后选择“启用”。
创建新资源,或为此应用程序选择现有 Application Insights 资源。
备注
选择“确定”以创建新资源时,系统将提示你“应用监视设置”。 选择“继续”会将新的 Application Insights 资源链接到应用程序服务。 然后,应用程序服务将重启。
指定要使用哪些资源后,可以选择 Application Insights 根据平台为应用程序收集数据的方式。 ASP.NET 应用监视默认启用,提供两种不同级别的集合,即建议和基本。
下表汇总了为每个路由收集的数据。
Data |
建议 |
基本 |
添加 CPU、内存和 I/O 使用情况趋势 |
是 |
否 |
收集使用情况趋势,并启用从可用性结果到事务的关联 |
是 |
是 |
收集未经主机进程处理的异常 |
是 |
是 |
提高使用采样时,负载下的 APM 指标准确性 |
是 |
是 |
跨请求/依赖项边界关联微服务 |
是 |
否(仅单实例 APM 功能) |
此集成会添加 Application Insights Java 3.x 并自动收集遥测数据。 可以进一步应用额外的配置和添加自己的自定义遥测。
在应用程序服务的左侧导航菜单中选择“Application Insights”,然后选择“启用”。
创建新资源,或为此应用程序选择现有 Application Insights 资源。
备注
选择“确定”以创建新资源时,系统将提示你“应用监视设置”。 选择“继续”会将新的 Application Insights 资源链接到应用程序服务。 然后,应用程序服务将重启。
重要
如果同时检测到自动检测监视和手动基于 SDK 的检测,则只会采用手动检测设置。 这样安排可防止发送重复数据。 若要了解详细信息,请参阅故障排除部分。
备注
可以使用应用服务环境变量边栏选项卡中的 APPLICATIONINSIGHTS_CONFIGURATION_CONTENT
环境变量来配置自动附加的代理。 有关可通过此环境变量传递的配置选项的详细信息,请参阅 Node.js 配置。
适用于 Node.js 的 Application Insights 与 Linux 上的 Azure 应用程序服务集成(基于代码的容器和自定义容器),并且针对基于代码的应用与 Windows 上的应用程序服务集成。 集成处于公开预览阶段。
在应用程序服务的左侧导航菜单中选择“Application Insights”,然后选择“启用”。
创建新资源,或为此应用程序选择现有 Application Insights 资源。
备注
选择“确定”以创建新资源时,系统将提示你“应用监视设置”。 选择“继续”会将新的 Application Insights 资源链接到应用程序服务。 然后,应用程序服务将重启。
指定要使用的资源后,一切已就绪。
适用于 Python 的 Application Insights 与基于代码的 Linux Azure 应用程序服务集成。 集成以公共预览版提供,并添加了正式版中的 Python SDK。 它会检测代码中常用的 Python 库,让你可以自动收集和关联依赖项、日志和指标。 若要查看收集的调用和指标,请参阅 Python 库
日志记录遥测是在根记录器级别收集的。 若要详细了解 Python 的本机日志记录层次结构,请访问 Python 日志记录文档。
- Python 版本 3.11 或更高版本。
- 应用程序服务必须部署为代码。 不支持自定义容器。
在应用程序服务的左侧导航菜单中选择“Application Insights”,然后选择“启用”。
创建新资源,或为此应用程序选择现有 Application Insights 资源。
备注
选择“确定”以创建新资源时,系统将提示你“应用监视设置”。 选择“继续”会将新的 Application Insights 资源链接到应用程序服务。 然后,应用程序服务将重启。
请指定资源,它就可供使用了。
检测后,从以下 Python 库收集调用和指标:
若要使用 OpenTelemetry Django instrumentation,需要在应用程序服务设置中将 DJANGO_SETTINGS_MODULE
环境变量设置为从应用文件夹指向设置模块。
有关详细信息,请参阅 Django 文档。
从 OpenTelemetry 社区包含检测库时,可以自动收集更多数据。
注意
我们不支持也不保证社区检测库的质量。 要为我们的分发版推荐一个检测库,请在反馈社区中发帖或投票。 请注意,某些检测库基于实验性 OpenTelemetry 规范,可能会在将来引入中断性变更。
若要添加社区 OpenTelemetry Instrumentation 库,请通过应用的 requirements.txt
文件安装它。 OpenTelemetry 自动检测会自动选取并检测所有已安装的库。 在此处查看社区库列表。
从版本 2.8.9 自动升级,无需其他操作。 新的监视位将在后台传送到目标应用程序服务,应用程序重启时会拾取这些位。
若要查看正在运行的扩展的版本,请转到 https://yoursitename.scm.chinacloudsites.cn/ApplicationInsights
。
从版本 2.8.9 开始,将使用预装的站点扩展。 如果使用更低的版本,可通过下述两种方法之一进行更新:
如果已从低于 2.5.1 的版本完成升级,请检查是否已从应用程序 bin 文件夹中移除了 ApplicationInsights
DLL。 有关详细信息,请参阅疑难解答。
从版本 2.8.9 自动升级,无需其他操作。 新的监视位将在后台传送到目标应用程序服务,应用程序重启时会拾取这些位。
若要查看正在运行的扩展的版本,请转到 https://yoursitename.scm.chinacloudsites.cn/ApplicationInsights
。
从版本 2.8.9 开始,将使用预装的站点扩展。 如果使用更低的版本,可通过下述两种方法之一进行更新:
如果已从低于 2.5.1 的版本完成升级,请检查是否已从应用程序 bin 文件夹中移除了 ApplicationInsights
DLL。 有关详细信息,请参阅疑难解答。
Application Insights Java 版本会在应用程序服务更新过程中自动更新。 如果遇到已在最新版本的 Application Insights Java 代理中修复的问题,可以手动将其更新。
将 Java 代理 jar 文件上传到应用程序服务。
a. 首先,按照此处的说明获取最新版本的 Azure CLI。
b. 接下来,按照此处的说明获取最新版本的 Application Insights Java 代理。
c. 然后,使用以下命令将 Java 代理 jar 文件部署到应用程序服务:az webapp deploy --src-path applicationinsights-agent-{VERSION_NUMBER}.jar --target-path java/applicationinsights-agent-{VERSION_NUMBER}.jar --type static --resource-group {YOUR_RESOURCE_GROUP} --name {YOUR_APP_SVC_NAME}
。 或者,可以使用本指南通过 Maven 插件部署代理。
通过 Azure 门户中的 Application Insights 选项卡禁用 Application Insights。
上传代理 jar 文件后,转到应用程序服务配置。 如果需要使用适用于 Linux 的启动命令,请包含 JVM 参数:
启动命令不支持对 JavaSE 使用 JAVA_OPTS
,也不支持对 Tomcat 使用 CATALINA_OPTS
。
如果不使用启动命令,请为 JavaSE 创建具有值 -javaagent:{PATH_TO_THE_AGENT_JAR}/applicationinsights-agent-{VERSION_NUMBER}.jar
的新环境变量 JAVA_OPTS
,为 Tomcat 创建具有此值的新环境变量 CATALINA_OPTS
。
若要应用更改,请重启应用。
备注
如果为 JavaSE 设置 JAVA_OPTS
环境变量或为 Tomcat 设置 CATALINA_OPTS
环境变量,必须在 Azure 门户中禁用 Application Insights。 或者,如果想要从 Azure 门户启用 Application Insights,请确保不要在应用程序服务配置设置中为 JavaSE 设置 JAVA_OPTS
变量或为 Tomcat 设置 CATALINA_OPTS
变量。
Application Insights Node.js 版本会在应用程序服务更新中自动更新,无法手动更新。
如果遇到已在最新版本的 Application Insights SDK 中修复的问题,可以移除自动检测,并使用最新的 SDK 版本手动检测应用程序。
Application Insights Python 版本会在应用程序服务更新中自动更新,无法手动更新。
如果遇到已在最新版本的 Application Insights SDK 中修复的问题,可以移除自动检测,并使用最新的 SDK 版本手动检测应用程序。
我们目前不提供用于为 ASP.NET Core 配置监视扩展的选项。
若要配置采样,以前可以通过 applicationinsights.config 文件来控制,现在可以通过具有相应前缀 MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor
的应用程序设置与之交互。
例如,若要更改初始采样百分比,可以创建名为 MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage
且值为 100
的应用程序设置。
若要禁用采样,请将 MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage
设置为值 100
。
支持的设置包括:
MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage
MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage
MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_EvaluationInterval
MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MaxTelemetryItemsPerSecond
有关支持的自适应采样遥测处理器设置和定义的列表,请参阅代码和采样文档。
指定要使用的资源后,可以配置 Java 代理。 如果你不配置 Java 代理,将应用默认配置。
有完整的配置集可用。 只需粘贴有效的 json 文件即可。 排除以预览版提供的连接字符串和任何配置 - 在目前以预览版提供的项推出正式版后,你将能够添加这些项。
通过 Azure 门户修改配置后,APPLICATIONINSIGHTS_CONFIGURATION_FILE
环境变量会自动填充并显示在应用程序服务设置面板中。 此变量包含在 Azure 门户中 Java 应用的配置文本框中粘贴的完整 json 内容。
可以使用 JSON 配置 Node.js 代理。 将 APPLICATIONINSIGHTS_CONFIGURATION_CONTENT
环境变量设置为 JSON 字符串,或将 APPLICATIONINSIGHTS_CONFIGURATION_FILE
环境变量设置为包含 JSON 的文件路径。
"samplingPercentage": 80,
"enableAutoCollectExternalLoggers": true,
"enableAutoCollectExceptions": true,
"enableAutoCollectHeartbeat": true,
"enableSendLiveMetrics": true,
...
有完整的配置集可用。 只需使用有效的 json 文件即可。
可以使用 OpenTelemetry 环境变量进行配置,例如:
环境变量 |
描述 |
OTEL_SERVICE_NAME , OTEL_RESOURCE_ATTRIBUTES |
指定与应用程序关联的 OpenTelemetry 资源属性。 可以使用 OTEL_RESOURCE_ATTRIBUTES 设置任何资源属性,或使用 OTEL_SERVICE_NAME 来仅设置 service.name 。 |
OTEL_LOGS_EXPORTER |
如果设置为 None ,则禁用日志记录遥测的收集和导出。 |
OTEL_METRICS_EXPORTER |
如果设置为 None ,则禁用指标遥测的收集和导出。 |
OTEL_TRACES_EXPORTER |
如果设置为 None ,则禁用分布式跟踪遥测数据的收集和导出。 |
OTEL_BLRP_SCHEDULE_DELAY |
指定日志记录导出间隔(以毫秒为单位)。 默认为 5000。 |
OTEL_BSP_SCHEDULE_DELAY |
指定分布式跟踪导出间隔(以毫秒为单位)。 默认为 5000。 |
OTEL_TRACES_SAMPLER_ARG |
指定采样分布式跟踪遥测的比率。 接受的值范围为 0 到 1。 默认值为 1.0,这意味着不会对遥测数据进行任何采样。 |
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS |
指定要禁用的 OpenTelemetry 检测。 禁用后,检测不会作为自动检测的一部分执行。 接受以逗号分隔的小写库名称列表。 例如,将其设置为 "psycopg2,fastapi" 以禁用 Psycopg2 和 FastAPI 检测。 它默认为空列表,启用所有支持的检测。 |
对于使用“建议”集合的 ASP.NET Core 应用,默认已启用客户端监视,无论是否存在应用设置 APPINSIGHTS_JAVASCRIPT_ENABLED
。
如果要启用客户端监视:
选择“设置”>“配置”。
在“应用程序设置”下,创建包含以下信息的“新应用程序设置”:
- 名称:
APPINSIGHTS_JAVASCRIPT_ENABLED
- 值:
false
保存 设置。 重启应用。
可以选择为 ASP.NET 启用客户端监视。 若要启用客户端监视:
选择“设置”>“配置”。
在“应用程序设置”下,创建新应用程序设置:
- 名称:输入 APPINSIGHTS_JAVASCRIPT_ENABLED。
- 值:输入 true。
保存设置并重启应用。
若要禁用客户端监视,请从“应用程序设置”中移除关联的键值对,或者将值设置为 false。
若要为 Application Insights 启用遥测数据收集,只需设置以下应用程序设置:
应用设置名称 |
定义 |
Value |
ApplicationInsightsAgent_EXTENSION_VERSION |
用于控制运行时监视的主扩展。 |
~2 (Windows) 或 ~3 (Linux) |
XDT_MicrosoftApplicationInsights_Mode |
默认模式下,仅启用基本功能以确保最佳性能。 |
disabled 或 recommended 。 |
XDT_MicrosoftApplicationInsights_PreemptSdk |
仅适用于 ASP.NET Core 应用。 启用与 Application Insights SDK 的互操作。 将扩展与 SDK 并排加载,并使用它来发送遥测数据。 (禁用 Application Insights SDK。) |
1 |
应用设置名称 |
定义 |
Value |
ApplicationInsightsAgent_EXTENSION_VERSION |
用于控制运行时监视的主扩展。 |
~2 |
XDT_MicrosoftApplicationInsights_Mode |
默认模式下,仅启用基本功能以确保最佳性能。 |
default 或 recommended |
InstrumentationEngine_EXTENSION_VERSION |
控制是否要启用二进制重写引擎 InstrumentationEngine 。 此设置会对性能以及冷启动/启动时间造成影响。 |
~1 |
XDT_MicrosoftApplicationInsights_BaseExtensions |
控制是否要随依赖项调用一起捕获 SQL 和 Azure 表文本。 性能警告:应用程序冷启动时间会受影响。 此设置需要 InstrumentationEngine 。 |
~1 |
应用设置名称 |
定义 |
Value |
ApplicationInsightsAgent_EXTENSION_VERSION |
用于控制运行时监视的主扩展。 |
在 Windows 中为 ~2 ,或者,在 Linux 中为 ~3 。 |
XDT_MicrosoftApplicationInsights_Java |
标记,用于控制是否包含 Java 代理。 |
0 或 1 (只在 Windows 中适用)。 |
备注
Snapshot Debugger 不适用于 Java 应用程序。
应用设置名称 |
定义 |
Value |
ApplicationInsightsAgent_EXTENSION_VERSION |
用于控制运行时监视的主扩展。 |
在 Windows 中为 ~2 ,或者,在 Linux 中为 ~3 。 |
XDT_MicrosoftApplicationInsights_NodeJS |
标记,用于控制是否包含 Node.js 代理。 |
0 或 1 (只在 Windows 中适用)。 |
备注
Snapshot Debugger 不适用于 Node.js 应用程序。
应用设置名称 |
定义 |
值 |
APPLICATIONINSIGHTS_CONNECTION_STRING |
适用于 Application Insights 资源的连接字符串。 |
示例:abcd1234-ab12-cd34-abcd1234abcd |
ApplicationInsightsAgent_EXTENSION_VERSION |
用于控制运行时监视的主扩展。 |
~3 |
备注
Snapshot Debugger 不适用于 Python 应用程序。
使用 Azure 资源管理器配置应用程序服务应用程序设置
可以使用 Azure 资源管理器模板来管理和配置 Azure 应用程序服务的应用程序设置。 在使用资源管理器自动化部署新的应用程序服务资源或修改现有资源的设置时,可以使用此方法。
下面是应用程序服务资源的应用程序设置 JSON 的基本结构:
"resources": [
{
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
],
"tags": {
"displayName": "Application Insights Settings"
},
"properties": {
"key1": "value1",
"key2": "value2"
}
}
]
自动创建 Application Insights 资源并链接到新建的应用程序服务资源
若要创建使用默认 Application Insights 设置的资源管理器模板,请像创建启用了 Application Insights 的新 Web 应用程序一样开始该过程。
使用所需的 Web 应用信息创建新的应用程序服务资源。 在“监视”选项卡上启用 Application Insights。
选择“查看 + 创建”。 然后,选择“下载自动化模板”。
此选项将生成配置了全部所需设置的最新资源管理器模板。
在以下示例中,将 AppMonitoredSite
的所有实例替换为你的站点名称:
备注
如果使用 Windows,请将 ApplicationInsightsAgent_EXTENSION_VERSION
设置为 ~2
。 如果使用 Linux,请将 ApplicationInsightsAgent_EXTENSION_VERSION
设置为 ~3
。
{
"resources": [
{
"name": "[parameters('name')]",
"type": "Microsoft.Web/sites",
"properties": {
"siteConfig": {
"appSettings": [
{
"name": "APPINSIGHTS_INSTRUMENTATIONKEY",
"value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
},
{
"name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
"value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
},
{
"name": "ApplicationInsightsAgent_EXTENSION_VERSION",
"value": "~2"
}
]
},
"name": "[parameters('name')]",
"serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
"hostingEnvironment": "[parameters('hostingEnvironment')]"
},
"dependsOn": [
"[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
"microsoft.insights/components/AppMonitoredSite"
],
"apiVersion": "2016-03-01",
"location": "[parameters('location')]"
},
{
"apiVersion": "2016-09-01",
"name": "[parameters('hostingPlanName')]",
"type": "Microsoft.Web/serverfarms",
"location": "[parameters('location')]",
"properties": {
"name": "[parameters('hostingPlanName')]",
"workerSizeId": "[parameters('workerSize')]",
"numberOfWorkers": "1",
"hostingEnvironment": "[parameters('hostingEnvironment')]"
},
"sku": {
"Tier": "[parameters('sku')]",
"Name": "[parameters('skuCode')]"
}
},
{
"apiVersion": "2015-05-01",
"name": "AppMonitoredSite",
"type": "microsoft.insights/components",
"location": "China North 2",
"properties": {
"ApplicationId": "[parameters('name')]",
"Request_Source": "IbizaWebAppExtensionCreate"
}
}
],
"parameters": {
"name": {
"type": "string"
},
"hostingPlanName": {
"type": "string"
},
"hostingEnvironment": {
"type": "string"
},
"location": {
"type": "string"
},
"sku": {
"type": "string"
},
"skuCode": {
"type": "string"
},
"workerSize": {
"type": "string"
},
"serverFarmResourceGroup": {
"type": "string"
},
"subscriptionId": {
"type": "string"
}
},
"$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0"
}
若要通过 PowerShell 启用应用程序监视,仅须更改基础的应用程序设置。 以下示例为资源组 AppMonitoredRG
中名为 AppMonitoredSite
的网站启用应用程序监视。 它配置要发送到 012345678-abcd-ef01-2345-6789abcd
检测密钥的数据。
备注
如果使用 Windows,请将 ApplicationInsightsAgent_EXTENSION_VERSION 设置为 ~2
。 如果使用 Linux,请将 ApplicationInsightsAgent_EXTENSION_VERSION 设置为 ~3
。
$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop
本部分提供常见问题的解答。
Application Insights 在我的项目中修改哪些内容?
详细信息取决于项目类型。 以下列表是 Web 应用程序的示例。
Application Insights 中的标准指标与 Azure 应用程序服务指标之间有何区别?
Application Insights 为向应用程序发出的请求收集遥测数据。 如果在 WebApps/WebServer 中发生故障,并且请求未到达用户应用程序,则 Application Insights 不会有任何有关它的遥测数据。
Application Insights 算出的 serverresponsetime
持续时间不一定与 Web 应用观察到的服务器响应时间匹配。 此行为是因为 Application Insights 仅计算实际到达用户应用程序的持续时间。 如果请求在 WebServer 中停滞或排队,则该等待时间将包含在 Web 应用指标中,但不会包含在 Application Insights 指标中。
Application Insights SDK 和代理发送遥测,将其作为 REST 调用引入到引入终结点。 可以使用原始 REST 客户端通过 PowerShell 或使用 curl 命令,测试从 Web 服务器或应用程序主机计算机到引入服务终结点的连接。 请参阅排查 Azure Monitor Application Insights 中缺失应用程序遥测的问题。
备注
使用 ASP.NET Core
运行时在应用程序服务中创建 Web 应用时,该应用会部署单个静态 HTML 页面作为入门网站。 建议不要排查默认模板的问题。 在排查问题之前部署应用程序。
检查 ApplicationInsightsAgent_EXTENSION_VERSION
应用设置是否设置为值 ~2
。
浏览到 https://yoursitename.scm.chinacloudsites.cn/ApplicationInsights
。
确认“Application Insights 扩展状态”为 Pre-Installed Site Extension, version 2.8.x.xxxx, is running.
如果它未运行,请按照启用 Application Insights 监视部分中的说明进行操作。
确认状态源存在并类似于 Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json
。
如果不存在类似的值,则表示应用程序当前未运行或不受支持。 为确保应用程序运行,请尝试手动访问应用程序 URL/应用程序终结点,以提供运行时信息。
确认 IKeyExists 为 True
。 如果为 False
,则将 APPINSIGHTS_INSTRUMENTATIONKEY
和 APPLICATIONINSIGHTS_CONNECTION_STRING
以及 ikey GUID 添加到应用程序设置中。
如果应用程序引用任何 Application Insights 包,则启用应用程序服务集成可能不会生效,并且数据可能不会出现在 Application Insights 中。 例如,如果以前使用 ASP.NET Core SDK 检测或尝试检测应用。 若要解决此问题,请在 Azure 门户中启用“与 Application Insights SDK 互操作”。
即使最初使用或尝试使用 Application Insights SDK,也将使用无代码方法发送数据。
重要
如果应用程序使用 Application Insights SDK 发送任何遥测数据,则会禁用遥测。 换句话说,将禁用自定义遥测(例如,任何 Track*()
方法)和自定义设置(如采样)。
检查 ApplicationInsightsAgent_EXTENSION_VERSION
应用设置是否设置为值 ~3
。
浏览到 https://your site name.scm.chinacloudsites.cn/ApplicationInsights
。
在此网站中,确认:
- 状态源存在并类似于
Status source /var/log/applicationinsights/status_abcde1234567_89_0.json
。
- 将显示值
Auto-Instrumentation enabled successfully
。 如果不存在类似的值,则表示应用程序当前未运行或不受支持。 为确保应用程序运行,请尝试手动访问应用程序 URL/应用程序终结点,以提供运行时信息。
- IKeyExists 为
True
。 如果为 False
,则将 APPINSIGHTS_INSTRUMENTATIONKEY
和 APPLICATIONINSIGHTS_CONNECTION_STRING
以及 ikey GUID 添加到应用程序设置中。
用 Web 应用部署的默认网站不支持自动客户端监视
使用 ASP.NET Core 运行时在应用程序服务中创建 Web 应用时,该应用会部署单个静态 HTML 页面作为入门网站。 该静态网页还会在 IIS 中加载 ASP.NET 托管 Web 部件。 这样就能够测试无代码服务器端监视,但不支持自动客户端监视。
如果希望在应用程序服务 Web 应用中测试 ASP.NET Core 的无代码服务器和客户端监视,建议遵循有关创建 ASP.NET Core Web 应用的官方指南。 之后,按照当前文章中的说明启用监视。
不支持 PHP 和 WordPress 站点。 目前没有官方支持的可用于在服务器端监视这些工作负荷的 SDK/代理。 若要在 PHP 或 WordPress 站点上跟踪客户端事务,请使用 JavaScript SDK 将客户端 JavaScript 添加到网页。
下表解释了这些值的含义、其根本原因和建议的修复方法。
问题值 |
说明 |
Fix |
AppAlreadyInstrumented:true |
此值表示扩展已检测到 SDK 的某个功能已在应用程序中存在,因此将会回退。 Microsoft.ApplicationInsights.AspNetCore 或 Microsoft.ApplicationInsights 的引用可能会产生此值。 |
删除引用。 其中某些引用是从特定的 Visual Studio 模板默认添加的。 较旧版本的 Visual Studio 引用 Microsoft.ApplicationInsights 。 |
AppAlreadyInstrumented:true |
前一部署的应用文件夹中存在 Microsoft.ApplicationsInsights DLL 也可能会产生此值。 |
清除应用文件夹,以确保删除这些 DLL。 检查本地应用的 bin 目录和应用程序服务的 wwwroot 目录。 (若要检查应用程序服务 Web 应用的 wwwroot 目录,请选择高级工具 (Kudu)>调试控制台>CMD>home\site\wwwroot)。 |
IKeyExists:false |
此值表示应用设置 APPINSIGHTS_INSTRUMENTATIONKEY 中不存在检测密钥。 可能的原因包括意外删除值或忘记在自动化脚本中设置值。 |
确保该设置在应用程序服务的应用程序设置中存在。 |
备注
使用 ASP.NET
运行时在应用程序服务中创建 Web 应用时,该应用会部署单个静态 HTML 页面作为入门网站。 建议不要排查默认模板的问题。 在排查问题之前部署应用程序。
检查 ApplicationInsightsAgent_EXTENSION_VERSION
应用设置是否设置为值 ~2
。
浏览到 https://yoursitename.scm.chinacloudsites.cn/ApplicationInsights
。
确认“Application Insights Extension Status
”为“Pre-Installed Site Extension, version 2.8.x.xxxx
”且正在运行。
如果它未运行,请按照启用 Application Insights 监视的说明进行操作。
确认状态源存在并类似于 Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json
。
如果不存在类似的值,则表示应用程序当前未运行或不受支持。 为确保应用程序运行,请尝试手动访问应用程序 URL/应用程序终结点,以提供运行时信息。
确认 IKeyExists
为 true
。
否则,请将 APPINSIGHTS_INSTRUMENTATIONKEY
和 APPLICATIONINSIGHTS_CONNECTION_STRING
与检测密钥 GUID 添加到应用程序设置中。
确认 AppAlreadyInstrumented
、AppContainsDiagnosticSourceAssembly
和 AppContainsAspNetTelemetryCorrelationAssembly
没有任何对应的条目。
如果存在其中的任何条目,请从应用程序中删除以下包:Microsoft.ApplicationInsights
、System.Diagnostics.DiagnosticSource
和 Microsoft.AspNet.TelemetryCorrelation
。
用 Web 应用部署的默认网站不支持自动客户端监视
使用 ASP.NET 运行时在应用程序服务中创建 Web 应用时,该应用会部署单个静态 HTML 页面作为入门网站。 该静态网页还会在 IIS 中加载 ASP.NET 托管 Web 部件。 此页允许测试无代码服务器端监视,但不支持自动客户端监视。
如果希望在应用程序服务 Web 应用中测试 ASP.NET 的无代码服务器和客户端监视,建议遵循有关创建 ASP.NET Framework Web 应用的官方指南。 之后,按照当前文章中的说明启用监视。
APPINSIGHTS_JAVASCRIPT_ENABLED 和 urlCompression 不受支持
如果在对内容进行编码的情况下使用 APPINSIGHTS_JAVASCRIPT_ENABLED=true
,可能会出现如下所示的错误:
- 500 URL 重写错误。
- 发生 500.53 URL 重写模块错误,并出现消息“对 HTTP 响应的内容进行编码('gzip')时,无法应用出站重写规则。”
发生错误是因为 APPINSIGHTS_JAVASCRIPT_ENABLED
应用程序设置设为 true
且同时存在内容编码。 此方案尚不受支持。 解决方法是从应用程序设置中删除 APPINSIGHTS_JAVASCRIPT_ENABLED
。 遗憾的是,如果仍然需要客户端/浏览器端 JavaScript 检测,则需要对网页使用手动 SDK 引用。 按照适用于 JavaScript SDK 的手动检测的说明进行操作。
有关 Application Insights 代理/扩展的最新信息,请参阅发行说明。
不支持 PHP 和 WordPress 站点。 目前没有官方支持的可用于在服务器端监视这些工作负荷的 SDK/代理。 若要在 PHP 或 WordPress 站点上跟踪客户端事务,请使用 JavaScript SDK 将客户端 JavaScript 添加到网页。
下表解释了这些值的含义、其根本原因和建议的修复方法。
问题值 |
说明 |
Fix |
AppAlreadyInstrumented:true |
此值表示扩展已检测到 SDK 的某个功能已在应用程序中存在,因此将会回退。 System.Diagnostics.DiagnosticSource 、Microsoft.AspNet.TelemetryCorrelation 或 Microsoft.ApplicationInsights 的引用可能会产生此值。 |
删除引用。 其中某些引用是从特定的 Visual Studio 模板默认添加的。 较旧版本的 Visual Studio 可能会添加对 Microsoft.ApplicationInsights 的引用。 |
AppAlreadyInstrumented:true |
之前部署的应用文件夹中存在前述 DLL 也可能会产生此值。 |
清除应用文件夹,以确保删除这些 DLL。 检查本地应用的 bin 目录和应用程序服务资源上的 wwwroot 目录。 若要检查应用程序服务 Web 应用的 wwwroot 目录,请选择高级工具(Kudu)>调试控制台>CMD>home\site\wwwroot。 |
AppContainsAspNetTelemetryCorrelationAssembly: true |
此值表示扩展已检测到对应用程序中的 Microsoft.AspNet.TelemetryCorrelation 的引用,因此将会回退。 |
删除引用。 |
AppContainsDiagnosticSourceAssembly**:true |
此值表示扩展已检测到对应用程序中的 System.Diagnostics.DiagnosticSource 的引用,因此将会回退。 |
对于 ASP.NET,请删除引用。 |
IKeyExists:false |
此值表示应用设置 APPINSIGHTS_INSTRUMENTATIONKEY 中不存在检测密钥。 原因可能是这些值被意外删除,或者你忘记在自动化脚本中设置这些值。 |
确保该设置在应用程序服务的应用程序设置中存在。 |
升级 2.8.44 后出现 System.IO.FileNotFoundException
2.8.44 版自动检测会将 Application Insights SDK 升级到 2.20.0。 Application Insights SDK 通过 System.Diagnostics.DiagnosticSource.dll
间接引用 System.Runtime.CompilerServices.Unsafe.dll
。 如果应用程序具有 System.Runtime.CompilerServices.Unsafe.dll
的绑定重定向,且此库不存在于应用程序文件夹中,则可能会引发 System.IO.FileNotFoundException
。
若要解决此问题,请从 web.config 文件中删除 System.Runtime.CompilerServices.Unsafe.dll
的绑定重定向条目。 如果应用程序要使用 System.Runtime.CompilerServices.Unsafe.dll
,请设置绑定重定向,如下所示:
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
可以将应用设置 ApplicationInsightsAgent_EXTENSION_VERSION
的值设为“2.8.37
”,这是一种暂时性解决方法。 此设置会触发应用程序服务使用旧的 Application Insights 扩展。 临时缓解措施只能用于应对临时状况。
检查 ApplicationInsightsAgent_EXTENSION_VERSION
应用设置是否设置为 ~2
(在 Windows 上)或 ~3
(在 Linux 上)
检查日志文件以确定代理是否已成功启动:浏览到 https://yoursitename.scm.chinacloudsites.cn/
,通过 SSH 切换到根目录,日志文件位于 LogFiles/ApplicationInsights 下。
为 Java 应用启用应用程序监视后,可以通过查看实时指标来验证代理是否正常工作 - 即使是在将应用部署到应用程序服务之前,你也会看到来自环境的一些请求。 请记住,只有当你的应用已部署并正在运行时,才能使用完整的遥测数据集。
如果未看到任何错误且没有遥测数据,请将 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL
环境变量设置为 debug
。
检查 ApplicationInsightsAgent_EXTENSION_VERSION
应用设置是否设置为值 ~2
。
浏览到 https://yoursitename.scm.chinacloudsites.cn/ApplicationInsights
。
确认 Application Insights Extension Status
为 Pre-Installed Site Extension, version 2.8.x.xxxx, is running.
如果它未运行,请按照启用 Application Insights 监视的说明进行操作。
导航到 D:\local\Temp\status.json 并打开 status.json。
确认 SDKPresent
设置为“false”,AgentInitializedSuccessfully
设置为“true”,IKey
设置为有效的 iKey。
JSON 文件的示例:
"AppType":"node.js",
"MachineName":"c89d3a6d0357",
"PID":"47",
"AgentInitializedSuccessfully":true,
"SDKPresent":false,
"IKey":"00000000-0000-0000-0000-000000000000",
"SdkVersion":"1.8.10"
如果 SDKPresent
为 true,则表示扩展检测到 SDK 的某一方面已在应用程序中存在,并将退出。
检查 ApplicationInsightsAgent_EXTENSION_VERSION
应用设置是否设置为值 ~3
。
导航到 /var/log/applicationinsights/ 并打开 status.json。
确认 SDKPresent
设置为“false”,AgentInitializedSuccessfully
设置为“true”,IKey
设置为有效的 iKey。
JSON 文件的示例:
"AppType":"node.js",
"MachineName":"c89d3a6d0357",
"PID":"47",
"AgentInitializedSuccessfully":true,
"SDKPresent":false,
"IKey":"00000000-0000-0000-0000-000000000000",
"SdkVersion":"1.8.10"
如果 SDKPresent
为 true,则表示扩展检测到 SDK 的某一方面已在应用程序中存在,并将退出。
如果不在代码中使用 OpenTelemetry 的手动检测(例如 Azure Monitor OpenTelemetry 发行版或 Azure Monitor OpenTelemetry 导出器),请仅在应用程序服务上使用自动检测。
在手动检测的基础上使用自动检测可能会导致重复遥测并增加成本。 若要使用应用程序服务 OpenTelemetry 自动检测,请先从代码中移除 OpenTelemetry 的手动检测。
如果缺少遥测数据,请按照以下步骤确认已正确启用自动检测。
确认在应用程序服务资源上的 Application Insights 体验中启用了自动检测。
确认 ApplicationInsightsAgent_EXTENSION_VERSION
应用设置已设置为 ~3
值,并且 APPLICATIONINSIGHTS_CONNECTION_STRING
指向相应的 Application Insights 资源。
检查自动检测诊断和状态日志。
a. 导航到 /var/log/applicationinsights/ 并打开 status_*.json。
b. 确认 AgentInitializedSuccessfully
设置为“true”,且 IKey
为有效的 iKey。
示例 JSON 文件:
"AgentInitializedSuccessfully":true,
"AppType":"python",
"MachineName":"c89d3a6d0357",
"PID":"47",
"IKey":"00000000-0000-0000-0000-000000000000",
"SdkVersion":"1.0.0"
同一文件夹中的 applicationinsights-extension.log
文件可能会显示其他有用的诊断。
如果应用使用 Django 并且无法启动或使用不正确的设置,请确保设置 DJANGO_SETTINGS_MODULE
环境变量。 有关详细信息,请参阅 Django Instrumentation 部分。
有关最新的更新和 bug 修复,请参阅发行说明。