对适用于 .NET 的 Application Insights Profiler 进行故障排除
本文提供了帮助你使用适用于 .NET 的 Application Insights Profiler 的故障排除步骤和信息。
目前,在由世纪互联运营的 Azure 的区域需要进行终结点修改。
应用设置 | 由世纪互联运营的 Azure |
---|---|
ApplicationInsightsProfilerEndpoint | https://profiler.monitor.azure.cn |
ApplicationInsightsEndpoint | https://dc.applicationinsights.azure.cn |
高于 .NET Framework 4.6.2 的版本支持 Profiler。
如果 Web 应用是 ASP.NET Core 应用程序,则必须在支持的最新 ASP.NET Core 运行时上运行。
免费或共享应用服务计划当前不支持适用于 .NET 的 Profiler。 请升级到 Profiler 可开始工作的某一基本计划。
备注
不支持 Azure Functions 消耗计划。 请参阅使用 Application Insights 探查实时 Azure Functions 应用。
如果要查看的数据的期限超过两周,请尝试限制时间筛选器并重试。 七天后将删除跟踪。
在托管应用程序且已启用 .NET Profiler 的每台虚拟机上,Profiler 每小时随机运行 2 分钟。
备注
Application Insights Profiler for .NET 主动运行并收集跟踪时,通常会导致服务器的 CPU 和内存开销增加 5% 至 15%。
存储 .NET Profiler 捕获的数据无需额外付费。 该数据将在 15 天后自动删除。
请检查防火墙或代理是否未阻止你访问此网页。
但是,仅当可将分析数据附加到运行 Profiler 期间所发生的请求时,才会上传分析数据。 .NET Profiler 每小时会收集两分钟的数据。 还可以通过启动分析会话来触发 Profiler。
Profiler 将跟踪消息和自定义事件写入到 Application Insights 资源。 可以使用这些事件来查看 Profiler 的运行方式。
搜索由 .NET Profiler 发送到 Application Insights 资源的跟踪消息和自定义事件。
在 Application Insights 资源中,从顶部菜单中选择“搜索”。
使用以下搜索字符串查找相关数据:
stopprofiler OR startprofiler OR upload OR ServiceProfilerSample
上面的搜索结果包含两个 AI 资源的两个搜索示例:
如果在 Profiler 运行时应用程序未收到请求,则消息会说明由于没有活动而取消上传。
Profiler 已启动,并在检测到它运行期间发生的请求时发送了自定义事件。 如果显示了
ServiceProfilerSample
自定义事件,则表示已捕获某个配置文件,并且该配置文件显示在“Application Insights 性能”窗格中。
如果未显示任何记录,则表明 Profiler 未运行或响应时间过长。 确保已在 Azure 服务上启用 Profiler。
即使探查器已启用,它也有可能不会捕获或上传跟踪,尤其是在以下情况下:
未向应用程序传入请求:
可以手动调用应用程序或创建可用性测试。Application Insights 未确认任何传入遥测:
- 如果有流量传入应用程序:验证 Application Insights 实时指标中是否显示了传入请求。
- 如果
Incoming Requests
图表为空(无数据或显示零):排查 Application Insights 问题。 - 如果在 Azure 应用服务上托管 .NET 应用程序:尝试执行应用服务 .NET 故障排除步骤。
有关采样的探查器设置已关闭:
如果仍未提供探查器跟踪,请检查探查器采样设置。- 打开“Application Insights”>“性能”边栏选项卡。
- 单击“探查器”。
- 单击“触发器”按钮。
- 在“触发器设置”中,确保“采样”切换开关处于打开状态。
仍然没有上传跟踪?
创建支持请求,或咨询 Azure 社区支持人员。 你还可以将产品反馈提交到 Azure 反馈社区。
当两个或多个并行线程与请求相关联时,堆栈查看器中的总时间指标可能大于请求的持续时间。 在这种情况下,总线程时间就会超过实际已用时间。
例如,一个线程可能会等待另一个线程完成。 查看器会尝试检测此情况并省略不相关的等待时间。 这样,它会倾向于显示过多信息,而不是省略关键信息。
如果看到跟踪中出现并行线程,请确定哪些线程处于等待状态,以便可以查明请求的热路径。 通常情况下,快速进入等待状态的线程等待其他线程完成。 请专注于其他线程,忽略等待中线程花费的时间。
以下部分将引导你完成在 Azure 应用服务或 Azure 云服务上使用 Profiler 的故障排除步骤。
要使 .NET Profiler 正常工作,请确保:
Web 应用已启用 Application Insights 并具有正确的设置。
ApplicationInsightsProfiler3 WebJob 正在运行。 若要检查 webjob:
转到 Kudu。 在 Azure 门户中:
- 在应用服务实例中,在左侧窗格中选择“高级工具”。
- 选择“转到”。
在顶部菜单中,选择“工具”>“WebJob”仪表板。 “WebJobs”窗格随即打开。
如果 ApplicationInsightsProfiler3 未显示,请重启应用服务应用程序。
若要查看 WebJob 的详细信息(包括日志),请选择“ApplicationInsightsProfiler3”链接。 “连续 WebJob 详细信息”窗格随即打开。
如果 .NET Profiler 仍然无法正常工作,可以下载日志并提交 Azure 支持票证。
如果通过门户中的 Application Insights 窗格启用 .NET Profiler,则它由诊断服务站点扩展进行管理。 可以转到 https://{site-name}.scm.chinacloudsites.cn/DiagnosticServices
来查看此扩展的状态页。
备注
状态页链接的域因云而异。 此域与应用服务的 Kudu 管理站点相同。
此状态页显示 .NET Profiler 和 Snapshot Debugger 代理的安装状态。 如果出现意外错误,则会显示该错误以及如何修复它的步骤。
你可以使用应用服务的 Kudu 管理站点获取此状态页的基 URL:
- 在 Azure 门户中,打开应用服务应用程序。
- 选择“高级工具”。
- 选择“转到”。
- 在 Kudu 管理站点上:
- 将
/DiagnosticServices
附加到该 URL。 - 选择 Enter。
- 将
其结尾类似于 https://<kudu-url>/DiagnosticServices
。
状态页显示类似于以下示例。
备注
适用于 .NET 的 Application Insights Profiler 的无代码安装遵循 .NET Core 支持策略。 若要详细了解支持的运行时,请参阅 .Net Core 支持策略。
配置 .NET Profiler 时,将对 Web 应用的设置进行更新。 如有必要,可以手动应用更新。
在 Azure 应用服务中,存在“一次仅一个分析会话”的限制。 此限制在 VM 级别跨应用服务计划中运行的所有应用程序和部署槽位强制实施。 此限制同样适用于通过“诊断并解决问题”、Kudu 和适用于 .NET 的 Application Insights Profiler 启动的分析会话。
如果 .NET Profiler 尝试在某个会话运行时启动另一个会话,则会在应用程序日志以及 ApplicationInsightsProfiler3
的连续 WebJob 日志中记录错误。
日志中可能会显示以下消息之一:
Microsoft.ServiceProfiler.Exceptions.TooManyETWSessionException
Error: StartProfiler failed. Details: System.Runtime.InteropServices.COMException (0xE111005E): Exception from HRESULT: 0xE111005E
错误代码 0xE111005E
指示分析会话无法启动,因为另一个会话已在运行中。
若要避免此错误,请将某些 Web 应用移动到其他应用服务计划,或在某些应用程序上禁用 Profiler。 如果使用部署槽位,请务必停止任何未使用的槽位。
如果在已启用 .NET 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$'
这些参数将删除适用于 .NET 的 Application Insights Profiler 所用的文件夹,并取消阻止重新部署进程。 它们不影响当前运行的 Profiler 实例。
Profiler 在 Web 应用中以连续 WebJob 的形式运行。 可以在 Azure 门户中打开 Web 应用资源。 在“WebJobs”窗格中,查看 ApplicationInsightsProfiler 的状态 。 如果探查器未运行,请打开“日志”获取详细信息。
查看 Azure 诊断是否正确配置了 .NET Profiler:
验证所部署的 Azure 诊断配置的内容是否符合你的预期。
确保 Azure 诊断在 Profiler 命令行上传递正确的 iKey。
检查 Profiler 日志文件,以查看 .NET Profiler 是否已运行但返回了错误。
若要检查用于配置 Azure 诊断的设置:
登录到虚拟机 (VM)。
在此位置打开日志文件。 此插件版本在你的计算机上可能会更高。
对于 VM:
c:\WindowsAzure\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
对于 Azure 云服务:
c:\logs\Plugins\Microsoft.Azure.Diagnostics.PaaSDiagnostics\1.11.3.12\DiagnosticsPlugin.log
在该文件中,搜索字符串
WadCfg
,找到传递给 VM 用于配置 Azure 诊断的设置。检查 .NET Profiler 接收器使用的 iKey 是否正确。
检查用于启动 Profiler 的命令行。 命令行参数位于以下文件中(驱动器可以是
c:
或d:
,目录可能已隐藏):对于 VM:
C:\ProgramData\ApplicationInsightsProfiler\config.json
对于 Azure 云服务:
D:\ProgramData\ApplicationInsightsProfiler\config.json
确保 Profiler 命令行中的 iKey 是正确的。
使用上述 config.json 文件中找到的路径,检查 Profiler 日志文件
BootstrapN.log
。 其中显示:- 表示 Profiler 正在使用的设置的调试信息。
- 来自 Profiler 的状态和错误消息。
可在以下位置找到文件:
对于 VM:
C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
对于 Azure 云服务:
C:\Logs\Plugins\Microsoft.Azure.Diagnostics.IaaSDiagnostics\1.17.0.6\ApplicationInsightsProfiler
如果当应用程序接收请求时 .NET Profiler 正在运行,则会显示以下消息:“检测到来自 iKey 的活动”。
上传跟踪时,会显示以下消息:“开始上传跟踪”。
如果应用程序通过代理或防火墙连接到 Internet,则可能需要更新规则才能与 .NET Profiler 通信。
适用于 .NET 的 Application Insights Profiler 使用的 IP 包含在 Azure Monitor 服务标记中。 有关详细信息,请参阅服务标记文档。
如果仍需要帮助,请在 Azure 门户中提交支持票证。 请包含错误消息中的相关 ID。