排查 Application Insights 与 Azure 应用服务之间的集成问题

本文提供一般建议和特定建议,用于排查 Azure 应用服务中的应用程序监视问题。

注释

此页上的某些故障排除步骤仅适用于某些语言或框架,如可用选项卡所示。

缺少遥测数据

注释

在应用服务中使用 ASP.NET 运行时创建 Web 应用时,会部署一个静态 HTML 页面作为入门网站。 我们不建议使用默认模板来排除问题。 在排查问题之前部署应用程序。

  1. 检查 ApplicationInsightsAgent_EXTENSION_VERSION 应用设置是否设置为值 ~2

  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/应用程序终结点,以提供运行时信息。

    • 确认 IKeyExiststrue。 否则,请将 APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING 与应用程序设置中的仪器密钥 GUID 一起添加。

    • 确认 AppAlreadyInstrumentedAppContainsDiagnosticSourceAssemblyAppContainsAspNetTelemetryCorrelationAssembly 没有任何对应的条目。

      如果存在其中的任何条目,请从应用程序中删除以下包:Microsoft.ApplicationInsightsSystem.Diagnostics.DiagnosticSourceMicrosoft.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

不支持 PHP 和 WordPress 站点。 目前没有官方支持的可用于在服务器端监视这些工作负荷的 SDK/代理。 若要在 PHP 或 WordPress 站点上跟踪客户端事务,请使用 JavaScript SDK 将客户端 JavaScript 添加到网页。

下表解释了这些值的含义、其根本原因和建议的修复方法。

问题的价值 Explanation 修复
AppAlreadyInstrumented:true 此值表示扩展已检测到 SDK 的某个功能已在应用程序中存在,因此将会回退。 System.Diagnostics.DiagnosticSourceMicrosoft.AspNet.TelemetryCorrelationMicrosoft.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.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 扩展。 临时缓解措施只能用于应对临时状况。

重复遥测

如果不在代码中使用 OpenTelemetry 的手动检测(例如 Azure Monitor OpenTelemetry 发行版Azure Monitor OpenTelemetry 导出器),请仅在应用程序服务上使用自动检测。

在手动检测的基础上使用自动检测可能会导致重复遥测并增加成本。 若要使用应用程序服务 OpenTelemetry 自动检测,请先从代码中移除 OpenTelemetry 的手动检测。

如果在 Application Insights 中看到意外费用或高成本,本指南将有所帮助。 它涵盖了常见的原因,例如高遥测量、数据引入峰值和配置错误的采样。 如果您正在解决与成本峰值、遥测数据量、采样失效、数据上限、数据摄取量高或意外计费相关的问题,这将特别有用。 如需入门,请参阅 对 Application Insights 中数据引入量过高的问题进行故障排除

Django 应用

如果应用使用 Django 并且无法启动或使用不正确的设置,请确保设置 DJANGO_SETTINGS_MODULE 环境变量。 有关详细信息,请参阅 Django Instrumentation 部分。

有关最新的更新和 bug 修复,请参阅发行说明

联系我们以获得帮助

如果有疑问,可以询问 Azure 社区支持。 您还可以向Azure反馈社区提交产品反馈。