排查启用或查看 Application Insights Profiler 时遇到的问题

常规故障排除

请确保使用适当的 Profiler 终结点

应用设置 中国云
ApplicationInsightsProfilerEndpoint https://profiler.monitor.azure.cn
ApplicationInsightsEndpoint https://dc.applicationinsights.azure.cn

仅当在运行 Profiler 期间对应用程序发出了请求时,才上传配置文件

Azure Application Insights Profiler 每小时会收集两分钟的数据。 当你在“配置 Application Insights Profiler”窗格中选择“立即分析”按钮时,它也会收集数据 。

注意

但是,仅当可将分析数据附加到运行 Profiler 期间所发生的请求时,才会上传分析数据。

Profiler 将跟踪消息和自定义事件写入到 Application Insights 资源。 可以通过这些事件来查看 Profiler 的运行方式:

  1. 搜索由 Profiler 发送到 Application Insights 资源的跟踪消息和自定义事件。 可以使用此搜索字符串查找相关的数据:

    stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
    

    下图显示了两个从两个 AI 资源中进行搜索的示例:

    • 在左侧,应用程序在 Profiler 运行时不接收请求。 此消息说明,由于没有发生活动,上传操作已取消。

    • 在右侧,Profiler 已启动,并在检测到它运行期间发生的请求时发送了自定义事件。 如果显示了 ServiceProfilerSample 自定义事件,则表示已捕获某个配置文件,并且该配置文件显示在“Application Insights 性能”窗格中。

      如果未显示任何记录,则表明 Profiler 未运行。 要进行故障排除,请参阅本文后面的特定应用类型的故障排除部分。

      Search Profiler telemetry

要检查的其他事项

  • 确保应用在 .NET Framework 4.6 上运行。
  • 如果 Web 应用是 ASP.NET Core 应用程序,则必须至少运行 ASP.NET Core LTS
  • 如果要查看的数据的期限超过了好几周,请尝试限制时间筛选器并重试。 七天后将删除跟踪。
  • 确保代理或防火墙未阻止对 https://gateway.azureserviceprofiler.net 的访问。
  • 免费或共享应用服务计划不支持 Profiler。 如果你正在使用这些计划之一,请尝试扩展至其中一个基本计划,并且 Profiler 应开始工作。

并行线程的重复计数

在某些情况下,堆栈查看器中的总时间指标大于请求的持续时间。

当两个或更多个并行线程与某个请求相关联时,可能会发生这种情况。 在这种情况下,总线程时间就会超过已用时间。

一个线程可能会等待另一个线程完成。 查看器会尝试检测此情况并省略不相关的等待时间。 这样,它会倾向于显示过多信息,而不是省略关键信息。

如果看到跟踪中出现并行线程,请确定哪些线程处于等待状态,以便可以查明请求的热路径。

通常情况下,快速进入等待状态的线程只是在等待其他线程完成。 请专注于其他线程,忽略等待中线程花费的时间。

配置文件查看器中的错误报告

在门户中提交支持票证。 请务必包含错误消息中的相关性 ID。

排查 Azure 应用服务中的 Profiler 问题

要使 Profiler 正常工作:

  • Web 应用服务计划必须属于“基本”层或更高层。

  • Web 应用必须已启用 Application Insights。

  • Web 应用必须具有以下应用设置:

    应用设置
    APPINSIGHTS_INSTRUMENTATIONKEY Application Insights 资源的 iKey
    APPINSIGHTS_PROFILERFEATURE_VERSION 1.0.0
    DiagnosticServices_EXTENSION_VERSION ~3
  • ApplicationInsightsProfiler3 webjob 必须正在运行。 若要检查 webjob:

    1. 转到 Kudu

    2. 在“工具”菜单中,选择“WebJobs 仪表板” 。
      “WebJobs”窗格随即打开。

      Screenshot shows the WebJobs pane, which displays the name, status, and last run time of jobs.

    3. 若要查看 webjob 的详细信息(包括日志),请选择“ApplicationInsightsProfiler3”链接。
      “连续 WebJob 详细信息”窗格随即打开。

      Screenshot shows the Continuous WebJob Details pane.

检查诊断服务站点扩展的“状态”页

如果 Profiler 是通过门户中的 Application Insights 窗格启用的,则它是由诊断服务站点扩展启用的。

注意

Application Insights Profiler 的无代码安装遵循 .NET Core 支持策略。 有关支持的运行时的详细信息,请参阅 .Net Core 支持策略

可以转到以下 url 来查看此扩展的“状态”页:https://{site-name}.scm.chinacloudsites.cn/DiagnosticServices

注意

“状态”页链接的域将因云而异。 此域将与应用服务的 Kudu 管理站点相同。

此“状态”页显示 Profiler 和 Snapshot Collector 代理的安装状态。 如果出现意外错误,则会显示该错误,并显示如何修复此错误。

你可以使用应用服务的 Kudu 管理站点获取此“状态”页的基 url:

  1. 在 Azure 门户中,打开应用服务应用程序。
  2. 选择“高级工具”或搜索 Kudu 。
  3. 选择“转到”。
  4. 进入 Kudu 管理站点后,在 URL 中追加以下 /DiagnosticServices 并按 Enter。 最终结果如下所示:https://<kudu-url>/DiagnosticServices

将显示如下“状态”页:Diagnostic Services Status Page

手动安装

配置 Profiler 时,将对 Web 应用的设置进行更新。 如果你的环境有此要求,则可以手动应用更新。 例如,应用程序在适用于 Power Apps 的 Web 应用环境中运行。 若要手动应用更新,请执行以下操作:

  1. 在“Web 应用控制”窗格中,打开“设置” 。

  2. 将“.NET Framework 版本”设置为“v4.6” 。

  3. 将“Always On”设置为“打开” 。

  4. 创建以下应用设置:

    应用设置
    APPINSIGHTS_INSTRUMENTATIONKEY Application Insights 资源的 iKey
    APPINSIGHTS_PROFILERFEATURE_VERSION 1.0.0
    DiagnosticServices_EXTENSION_VERSION ~3

活动分析会话太多

最多可以为同一服务计划中运行的四个 Web 应用启用 Profiler。 如果你的 Web 应用超过四个,则 Profiler 可能会引发 Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException。 若要解决此问题,请将一些 Web 应用移到其他服务计划中。

部署错误:目录不为空“D:\home\site\wwwroot\App_Data\jobs”

如果在已启用 Profiler 的情况下将 Web 应用重新部署到 Web 应用资源,可能会看到如下消息:

目录不为空“D:\home\site\wwwroot\App_Data\jobs”

如果通过脚本或通过 Azure Pipelines 运行 Web 部署,则会发生此错误。 解决方法是将以下部署参数添加到 Web 部署任务:

-skip:Directory='.*\\App_Data\\jobs\\continuous\\ApplicationInsightsProfiler.*' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs\\continuous$' -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data\\jobs$'  -skip:skipAction=Delete,objectname='dirPath',absolutepath='.*\\App_Data$'

这些参数将删除 Application Insights Profiler 所用的文件夹,并取消阻止重新部署进程。 它们不影响当前运行的 Profiler 实例。

如何确定 Application Insights Profiler 是否正在运行?

Profiler 在 Web 应用中以连续 Web 作业的形式运行。 可以在 Azure 门户中打开 Web 应用资源。 在“WebJobs”窗格中,查看 ApplicationInsightsProfiler 的状态 。 如果探查器未运行,请打开“日志”获取详细信息。

对 VM 和云服务进行故障排除

云服务 WAD 中附带的探查器中的 bug 已修复。 用于云服务的最新版本的 WAD (1.12.2.0) 适用于所有最新版本的 App Insights SDK。 云服务主机将自动升级 WAD,但不会立即升级。 若要强制升级,可以重新部署服务或重新启动节点。

若要查看 Azure 诊断是否正确配置了 Profiler,请执行以下步骤:

  1. 验证所部署的 Azure 诊断配置的内容是否符合你的预期。

  2. 其次,确保 Azure 诊断在 Profiler 命令行上传递正确的 iKey。

  3. 最后,检查 Profiler 日志文件,以查看 Profiler 是否已运行但返回了错误。

若要检查用于配置 Azure 诊断的设置:

  1. 登录到虚拟机 (VM),然后打开位于此位置的日志文件。 此插件版本在你的计算机上可能会更高。

    对于 VM:

    c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
    

    对于云服务:

    c:\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log  
    
  2. 在该文件中,可以搜索字符串“WadCfg”,找到传递给 VM 用于配置 Azure 诊断的设置。 可以检查 Profiler 接收器使用的 iKey 是否正确。

  3. 检查用于启动 Profiler 的命令行。 用于启动 Profiler 的参数位于以下文件中。 (驱动器可能是 C: 或 D: 并且可能会隐藏目录。)

    对于 VM:

    C:\ProgramData\ApplicationInsightsProfiler\config.json
    

    对于云服务:

    D:\ProgramData\ApplicationInsightsProfiler\config.json
    
  4. 确保 Profiler 命令行中的 iKey 是正确的。

  5. 使用上述 config.json 文件中的路径检查 Profiler 日志文件 BootstrapN.log。 它将显示表示 Profiler 正在使用的设置的调试信息。 此外,还将显示来自 Profiler 的状态和错误消息。

    对于 VM,该文件通常位于此处:

    C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    

    对于云服务:

    C:\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
    

    如果当应用程序接收请求时 Profiler 正在运行,则会显示以下消息:“检测到来自 iKey 的活动”。

    上传跟踪时,会显示以下消息:“开始上传跟踪”。

编辑网络代理或防火墙规则

如果应用程序通过代理或防火墙连接到 Internet,则可能需要更新规则才能与 Profiler 服务通信。

Application Insights Profiler 使用的 IP 包含在 Azure Monitor 服务标记中。 有关详细信息,请参阅服务标记文档