本文提供一般建议和特定建议,用于排查 Azure 应用服务中的应用程序监视问题。
注释
此页上的某些故障排除步骤仅适用于某些语言或框架,如可用选项卡所示。
缺少遥测数据
注释
在应用服务中使用 ASP.NET 运行时创建 Web 应用时,会部署一个静态 HTML 页面作为入门网站。 我们不建议使用默认模板来排除问题。 在排查问题之前部署应用程序。
检查 ApplicationInsightsAgent_EXTENSION_VERSION 应用设置是否设置为值 ~2。
导航至 https://yoursitename.scm.azurewebsites.net/ApplicationInsights 。
lightbox=“media/troubleshoot-app-service/app-insights-sdk-status.png”::
确认“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。
注释
在应用服务中使用 ASP.NET Core 运行时创建 Web 应用时,会部署一个静态 HTML 页面作为入门网站。 建议不要排查默认模板中的问题。 在排查问题之前部署应用程序。
Windows操作系统
检查 ApplicationInsightsAgent_EXTENSION_VERSION 应用设置是否设置为值 ~2。
导航至 https://yoursitename.scm.azurewebsites.net/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*() 方法)和自定义设置(如采样)。
Linux
检查 ApplicationInsightsAgent_EXTENSION_VERSION 应用设置是否设置为值 ~3。
导航至 https://your site name.scm.azurewebsites.net/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 添加到应用程序设置中。
检查 ApplicationInsightsAgent_EXTENSION_VERSION 应用设置是否设置为 ~2(在 Windows 上)或 ~3(在 Linux 上)
检查日志文件以确定代理是否已成功启动:浏览到 https://yoursitename.scm.azurewebsites.net/,通过 SSH 切换到根目录,日志文件位于 LogFiles/ApplicationInsights 下。
为 Java 应用启用应用程序监视后,可以通过查看实时指标来验证代理是否正常工作 - 即使是在将应用部署到应用程序服务之前,你也会看到来自环境的一些请求。 请记住,只有当你的应用已部署并正在运行时,才能使用完整的遥测数据集。
如果未看到任何错误且没有遥测数据,请将 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL 环境变量设置为 debug。
Windows操作系统
检查 ApplicationInsightsAgent_EXTENSION_VERSION 应用设置是否设置为值 ~2。
导航至 https://yoursitename.scm.azurewebsites.net/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 的某一方面已在应用程序中存在,并将退出。
Linux
检查 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 的某一方面已在应用程序中存在,并将退出。
如果您缺少遥测数据,请按照以下步骤确认是否已正确启用自动检测工具。
确认在 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 文件可能会显示其他有用的诊断。
用 Web 应用部署的默认网站不支持自动客户端监视
使用 ASP.NET 运行时在应用程序服务中创建 Web 应用时,该应用会部署单个静态 HTML 页面作为入门网站。 该静态网页还会在 IIS 中加载 ASP.NET 托管 Web 部件。 此页允许测试无代码服务器端监视,但不支持自动客户端监视。
如果希望在应用程序服务 Web 应用中测试 ASP.NET 的无代码服务器和客户端监视,建议遵循有关创建 ASP.NET Framework Web 应用的官方指南。 之后,按照当前文章中的说明启用监视。
使用 ASP.NET Core 运行时在应用程序服务中创建 Web 应用时,该应用会部署单个静态 HTML 页面作为入门网站。 该静态网页还会在 IIS 中加载 ASP.NET 托管 Web 部件。 这样就能够测试无代码服务器端监视,但不支持自动客户端监视。
如果希望在应用程序服务 Web 应用中测试 ASP.NET Core 的无代码服务器和客户端监视,建议遵循有关创建 ASP.NET Core 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 添加到网页。
下表解释了这些值的含义、其根本原因和建议的修复方法。
| 问题的价值 |
Explanation |
修复 |
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 中不存在检测密钥。 可能的原因包括意外删除值或忘记在自动化脚本中设置值。 |
确保该设置在应用程序服务的应用程序设置中存在。 |
不支持 PHP 和 WordPress
不支持 PHP 和 WordPress 站点。 目前没有官方支持的可用于在服务器端监视这些工作负荷的 SDK/代理。 若要在 PHP 或 WordPress 站点上跟踪客户端事务,请使用 JavaScript SDK 将客户端 JavaScript 添加到网页。
下表解释了这些值的含义、其根本原因和建议的修复方法。
| 问题的价值 |
Explanation |
修复 |
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 中不存在检测密钥。 原因可能是这些值被意外删除,或者你忘记在自动化脚本中设置这些值。 |
确保该设置在应用程序服务的应用程序设置中存在。 |
不支持 PHP 和 WordPress 站点。 目前没有官方支持的可用于在服务器端监视这些工作负荷的 SDK/代理。 若要在 PHP 或 WordPress 站点上跟踪客户端事务,请使用 JavaScript SDK 将客户端 JavaScript 添加到网页。
下表解释了这些值的含义、其根本原因和建议的修复方法。
| 问题的价值 |
Explanation |
修复 |
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 中不存在检测密钥。 可能的原因包括意外删除值或忘记在自动化脚本中设置值。 |
确保该设置在应用程序服务的应用程序设置中存在。 |
升级 2.8.44 后出现 System.IO.FileNotFoundException
2.8.44 版的自动检测功能将 Application Insights SDK 升级到 2.20.0。 Application Insights SDK 通过 System.Runtime.CompilerServices.Unsafe.dll 间接引用 System.Diagnostics.DiagnosticSource.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 扩展。 临时缓解措施只能用于应对临时状况。
重复遥测
Django 应用
如果有疑问,可以询问 Azure 社区支持。 您还可以向Azure反馈社区提交产品反馈。