排查无数据问题:适用于 .NET 和 .NET Core 的 Application Insights
本文提供故障排除信息,以帮助解决使用适用于 .NET 和 .NET Core 的 Application Insights 时缺少数据或未显示数据的问题。
注意
本文最近更新为使用 术语 Azure Monitor 日志 而不是 Log Analytics。 日志数据仍存储在 Log Analytics 工作区中,并且仍由同一 Log Analytics 服务收集和分析。 我们正在更新术语,以更好地反映 日志在 Azure Monitor 中的角色。 有关详细信息,请参阅 Azure Monitor 术语更改。
缺少某些遥测数据
示例方案:
在 Application Insights 中,我只看到应用生成的事件的一小部分
- 如果一直看到相同的分数,则可能是因为自适应 采样。 若要确认此原因,请选择“概述>搜索并查看请求或其他事件的实例。 若要查看完整的属性详细信息,请选择“属性”部分底部的省略号 (...) 。 如果请求计数大于 1,则采样操作。
- 你有可能达到了定价计划 的数据速率限制 。 这些限制按分钟应用。
我随机遇到数据丢失
- 检查遥测 通道上是否遇到数据丢失的情况。
- 检查 GitHub 存储库的遥测通道中是否存在任何已知问题。
注意
如果缺少数据,则后端可能会拒绝数据。 出现这种情况的原因有多种,包括以下原因:
- 缺少必填字段。
- 一个或多个字段超出了大小限制。
- SDK 以无提示方式失败,而不是引发异常。
可以使用 Fiddler 等工具或任何其他将检查 HTTP 流量的工具来确认遥测上传成功。 后端将返回“200 正常”HTTP 状态代码,以指示上传成功。 或者,可以使用 SDK 日志 来查看后端是否拒绝数据。
当应用即将停止时,我在控制台应用或 Web 应用中遇到数据丢失
- SDK 通道将遥测数据保存在缓冲区中,并分批发送。 如果应用程序正在关闭,则可能需要显式调用 Flush () 。 行为
Flush()
取决于使用的实际 通道 。 - 根据 .NET Core/.NET Framework 控制台应用程序,主机应用中需要显式调用
Flush()
后跟睡眠。
Application Insights SDK 收集的请求计数与应用程序的 IIS 日志计数不匹配
Internet Information Services (IIS) 记录到达 IIS 的所有请求的计数,并且本质上可能与到达应用程序的总请求数不同。 由于此行为,不能保证 SDK 收集的请求计数与 IIS 日志总数匹配。
没有来自我的服务器的数据
示例方案:
我在 Web 服务器上安装了应用,现在看不到任何遥测数据。 它在我的开发计算机上正常工作
防火墙问题很可能是原因。 为 Application Insights 设置防火墙例外以发送数据。
我在 Web 服务器上安装了 Azure Monitor Application Insights 代理,用于监视现有应用。 我看不到任何结果
请参阅 状态监视器故障排除。
(ASP.NET) 检查 TLS/SSL 客户端设置
如果 ASP.NET 应用程序托管在虚拟机上的 Azure 应用服务 或 IIS 中,则应用程序可能无法连接到 Snapshot Debugger 服务,因为缺少 SSL 安全协议。
Snapshot Debugger 终结点需要 TLS 版本 1.2。 SSL 安全协议集是由 web.config 文件中元素的targetFramework
属性值<system.web>
启用<httpRuntime>
的怪癖之一。 如果目标框架为 4.5.2 或更低版本,则默认情况下不包括 TLS 1.2。
注意
元素 <httpRuntime>
的 targetFramework
属性值与生成应用程序时使用的目标框架无关。
若要检查设置,请打开 web.config 文件并找到 节<system.web>
。 确保 targetFramework
将 设置为 <httpRuntime>
4.6 或更高版本。
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
注意
<httpRuntime>
修改元素targetFramework
的值会更改应用于应用程序的运行时怪癖,并可能导致其他细微的行为更改。 进行此更改后,请务必全面测试应用程序。 有关兼容性更改的完整列表,请参阅 重定向更改。
如果目标框架为 4.7 或更高版本,则 Windows 将确定可用的协议。 在 Azure 应用服务 中,TLS 1.2 可用。 但是,如果使用自己的虚拟机,则可能需要在 OS 中启用 TLS 1.2。
FileNotFoundException:“无法加载文件或程序集 Microsoft.AspNet TelemetryCorrelation”
有关此错误的详细信息,请参阅 GitHub 问题 1610。
从低于版本 2.4 的 Application Insights SDK 升级时,请确保以下更改已应用于 web.config 和 ApplicationInsights.config 文件:
在 web.config中,应有两个 HTTP 模块,而不是一个。 顺序对于某些方案很重要:
<system.webServer> <modules> <add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" preCondition="integratedMode,managedHandler" /> <add name="ApplicationInsightsHttpModule" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /> </modules> </system.webServer>
在 ApplicationInsights.config中,除了
RequestTrackingTelemetryModule
,还应具有以下遥测模块:<TelemetryModules> <Add Type="Microsoft.ApplicationInsights.Web.AspNetDiagnosticTelemetryModule, Microsoft.AI.Web"/> </TelemetryModules>
无法正确升级可能会导致意外异常或未收集遥测数据。
Visual Studio 中没有“添加 Application Insights”选项
示例方案:
在 解决方案资源管理器 中右键单击现有项目时,看不到任何 Application Insights 选项
- 这些工具不支持所有类型的 .NET 项目。 支持 Web 和 Windows Communication Foundation (WCF) 项目。 对于其他项目类型(例如桌面或服务应用程序),你仍然可以 手动将 Application Insights SDK 添加到项目。
- 请确保已Visual Studio 2013 Update 3 或更高版本。 它预装了开发人员分析工具,这些工具提供 Application Insights SDK。
- 选择“工具>扩展和汇报”。 然后检查是否安装并启用Developer Analytics Tools。 如果已安装并启用,请选择“汇报”以查看是否有可用的更新。
- 打开“ 新建项目 ”对话框,然后选择“ ASP.NET Web 应用程序”。 如果看到 Application Insights 选项,则会安装这些工具。 如果没有,请卸载并重新安装开发人员分析工具。
添加 Application Insights 失败
示例方案:
当我尝试将 Application Insights 添加到现有项目时,我看到一条错误消息
可能的原因:
- 与 Application Insights 门户的通信失败。
- Azure 帐户存在问题。
- 你仅对 尝试创建新资源的订阅或组具有读取访问权限。
修复:
- 检查是否为正确的 Azure 帐户提供了登录凭据。
- 在浏览器中,检查你有权访问Azure 门户。 打开 “设置” ,查看是否有任何限制。
- 将 Application Insights 添加到现有项目。 在解决方案资源管理器中,右键单击项目并选择“添加 Application Insights”。
生成服务器上的“NuGet 包缺失”
示例方案:
在开发计算机上调试时,一切都会正常生成,但在生成服务器上收到 NuGet 错误
缺少用于从 Visual Studio 打开 Application Insights 的菜单命令
示例方案:
右键单击项目解决方案资源管理器时,看不到任何 Application Insights 命令,或者看不到“打开 Application Insights”命令
可能的原因:
- 你手动创建了 Application Insights 资源。
- 项目属于 Application Insights 工具不支持的类型。
- Visual Studio 实例中禁用开发人员分析工具。
- 你的 Visual Studio 版本早于 Update 3 Visual Studio 2013。
修复:
- 确保 Visual Studio 版本Visual Studio 2013 Update 3 或更高版本。
- 选择“工具>扩展和汇报”。 检查以确保已安装并启用了Developer Analytics Tools。 如果已安装并启用,请选择“汇报”以查看是否有可用的更新。
- 右键单击解决方案资源管理器中的项目。 如果看到 Application Insights>配置 Application Insights 命令,请使用它将项目连接到 Application Insights 服务中的资源。
否则,开发人员分析工具不直接支持项目类型。 若要查看遥测数据,请登录到Azure 门户,搜索并选择“Application Insights”,然后选择应用程序。
从 Visual Studio 打开 Application Insights 时“访问被拒绝”
示例方案:
“打开 Application Insights”菜单命令将我转到Azure 门户,但出现“拒绝访问”错误
上次在默认浏览器上使用的 Microsoft 登录无法访问 Application Insights 添加到此应用时创建的资源。 有两个可能的原因:
原因 | 解决方案 |
---|---|
你有多个 Microsoft 帐户,可能是工作帐户和个人 Microsoft 帐户。 如果是这种情况,则上次在默认浏览器上使用的登录适用于与有权 将 Application Insights 添加到项目的帐户不同的帐户。 | 在浏览器窗口右上角选择你的姓名并注销。然后使用具有访问权限的帐户登录。 搜索,然后选择 Application Insights 并选择应用程序。 |
其他人向项目添加了 Application Insights,他们忘记了授予你访问创建该项目时所在的 资源组的访问权限 。 | 如果他们使用了组织帐户,则可以将你添加到团队。 或者,他们可以向你授予对资源组的单独访问权限。 |
从 Visual Studio 打开 Application Insights 时“找不到资产”
示例方案:
“打开 Application Insights”菜单命令将我转到Azure 门户,但出现“找不到资产”错误
有两个可能的原因:
- 已删除应用程序的 Application Insights 资源。
- 有人在不更新项目文件的情况下在ApplicationInsights.config中设置或更改了连接字符串。
ApplicationInsights.config文件中的连接字符串控制遥测数据的发送位置。 在 Visual Studio 中使用 命令时,项目文件中的一行控制打开的资源。
应用以下修补程序之一:
- 在“解决方案资源管理器”中,右键单击项目并选择“Application Insights>配置 Application Insights”。 在对话框中,可以选择将遥测数据发送到现有资源,也可以创建一个新资源。
- 直接打开资源。 登录到Azure 门户,搜索并选择“Application Insights”,然后选择应用程序。
在哪里可以找到遥测数据?
示例方案:
我登录到了 Azure 门户,我正在查看 Azure 家庭仪表板。 那么,在哪里可以找到我的 Application Insights 数据?
- 搜索,然后选择“Application Insights”,然后选择应用程序。 如果没有任何项目,则需要 在 Web 项目中添加或配置 Application Insights。 可以浏览显示的摘要图表,查看更多详细信息。
- 在 Visual Studio 中,在调试应用时,选择“ Application Insights ”按钮。
没有服务器数据 (或根本没有数据)
示例方案:
我运行了我的应用,然后在 Microsoft Azure 中打开了 Application Insights 服务,但所有图表都显示“了解如何收集”、“未配置”或仅页面视图和用户数据,但没有服务器数据
在 Visual Studio (F5) 的调试模式下运行应用程序。 使用应用程序生成一些遥测数据。 检查是否可以看到 Visual Studio 输出窗口中记录的事件。
在 Application Insights 门户中,选择“概述>搜索”。 数据通常首先显示在此处。
选择“ 刷新”。 窗格会定期刷新自身,但你也可以手动刷新。 对于较大的时间范围,刷新间隔更长。
验证 连接字符串 是否匹配。 在 Application Insights 门户中应用的“main”窗格上,在“Essentials”下拉列表中,查看“连接字符串”。 然后,在 Visual Studio 的项目中,打开 ApplicationInsights.config 并找到 元素
<ConnectionString>
。 检查两个字符串是否相等。 如果字符串不匹配,请执行下列操作之一:环境 操作 Azure 门户 搜索,然后选择“Application Insights”,然后查找具有正确字符串的应用资源。 Visual Studio 在 Visual Studio 解决方案资源管理器中,右键单击项目并选择“Application Insights>配置”。 重置应用以将遥测数据发送到正确的资源。 如果找不到匹配的字符串,检查,以确保在 Visual Studio 中使用与登录门户相同的登录凭据。
在Azure 门户中,搜索并选择“服务运行状况”。 如果地图有一些警报指示,请等待它们恢复运行状况。 然后关闭并重新打开 Application Insights 应用程序窗格。
查看 我们的状态博客。
你是否为服务器端 SDK 编写了任何可能更改实例或
TelemetryContext
实例中的TelemetryClient
连接字符串的代码? 还是编写了筛选 过多的筛选器或采样配置 ?如果 ApplicationInsights.config编辑,请仔细检查 TelemetryInitializers> 和 <TelemetryProcessors> 元素的配置<。 错误命名的类型或参数可能会导致 SDK 不发送任何数据。
没有有关页面视图、浏览器和使用情况的数据
示例方案:
我在服务器响应时间和服务器请求图表中看到数据,但在页面视图加载时间、浏览器或使用情况窗格中没有数据
数据来自网页中的脚本。
- 如果将 Application Insights 添加到现有 Web 项目, 则必须手动添加脚本。
- 确保 Internet Explorer 未在兼容模式下显示站点。
- 在某些浏览器上使用浏览器的调试功能 (F12,然后选择“ 网络) ”以验证数据是否已发送到
dc.services.visualstudio.com
。
无依赖项或异常数据
无性能数据
性能数据(如 CPU 和 I/O 速率)可用于“设置服务器”>下的以下环境:
- Java Web 服务
- Windows 桌面应用
- 如果安装 Application Insights 代理) ,IIS Web 应用和服务 (
- Azure 云服务
将应用发布到服务器后,没有 (服务器) 数据
- 检查是否已将所有
Microsoft.ApplicationInsights
DLL 与Microsoft.Diagnostics.Instrumentation.Extensions.Intercept.dll
一起复制到服务器。 - 在防火墙中,可能需要 打开一些 TCP 端口。
- 如果必须使用代理发送出公司网络,请在 web.config中设置 <defaultProxy> 元素。
启用 Application Insights 时对性能的影响
在应用程序中启用 Application Insights SDK 有时可能会导致性能问题,例如 CPU 使用率过高、内存泄漏、线程泄漏或 TCP 端口耗尽。 这些问题通常源于应用程序泄漏 Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration
对象。 每个泄漏的实例都会创建两个额外的线程,这会导致进程线程计数随时间推移而不断增加。 如果观察到越来越多的线程,则对于 TelemetryConfiguration 对象的泄漏检查至关重要。
TelemetryConfiguration 泄漏的常见原因
有两个主要原因导致对象泄漏 TelemetryConfiguration
:
在代码中显式创建:如果在
TelemetryConfiguration
代码中创建对象,请确保它们不是为每个 Web 请求无意创建的。 请改用共享的全局实例。 对于.NET Framework应用程序,请使用TelemetryConfiguration.Active
访问全局实例。 对于 .NET Core 应用程序,使用TelemetryConfiguration.CreateDefault()
获取默认配置。不当的服务提供商使用:在 .NET Core 应用程序中,避免在 中
ConfigureServices
调用services.BuildServiceProvider()
。 BuildServiceProvider 方法创建一个新的服务提供程序,用于初始化和读取配置,每次都会生成一个新的TelemetryConfiguration
对象。 如 Visual Studio 针对此编码做法的警告中所述,此类模式可能会导致泄漏,并且不建议这样做。
我以前看过数据,但已停止
是否已达到每月数据点配额? 打开“设置配额和定价”>以了解情况。如果是这样,可以升级计划或为更多容量付费。 请参阅 定价方案。
我看不到我期望的所有数据
如果应用程序发送了大量数据,并且你使用的是适用于 ASP.NET 版本 2.0.0-beta3 或更高版本的 Application Insights SDK, 则自适应采样 功能可能会运行并仅发送一定百分比的遥测数据。
可以禁用它,但我们不建议禁用。 采样旨在正确传输相关遥测数据以用于诊断目的。
客户端 IP 地址为 0.0.0.0
2018 年 2 月 5 日,我们宣布删除了客户端 IP 地址的日志记录。 此建议不会影响地理位置。
注意
如果需要 IP 地址的前三个八进制数,可以使用 遥测初始值设定项 添加自定义属性。 此问题不会影响在 2018 年 2 月 5 日之前收集的数据。
用户遥测中错误的地理数据
城市和国家/地区维度派生自 IP 地址,并非始终准确。 这些 IP 地址首先处理位置,然后更改为要存储的 0.0.0.0。
在 Azure 云服务 中运行时出现异常“找不到方法”
是否为 .NET 长期支持 (LTS) 生成? Azure 云服务 角色不会自动支持早期版本。 在运行应用之前,在每个角色上安装 LTS。
排查日志问题
按照这些说明捕获框架的故障排除日志。
.NET Framework
注意
从版本 2.14 开始,不再需要 Microsoft.AspNet.ApplicationInsights.HostingStartup 包。 SDK 日志现在通过 Microsoft.ApplicationInsights 包收集。 不需要其他包。
修改 ApplicationInsights.config 文件以包含以下 XML 代码:
<TelemetryModules> <Add Type="Microsoft.ApplicationInsights.Extensibility.Implementation.Tracing.FileDiagnosticsTelemetryModule, Microsoft.ApplicationInsights"> <Severity>Verbose</Severity> <LogFileName>mylog.txt</LogFileName> <LogFilePath>C:\\SDKLOGS</LogFilePath> </Add> </TelemetryModules>
应用程序必须对配置的位置具有写入权限。
重启该过程,以便 SDK 选取这些新设置。
完成后还原这些更改。
.NET Core
从 NuGet 安装适用于 ASP.NET Core 包的 Application Insights SDK NuGet 包。 安装的版本必须与 的当前已安装版本
Microsoft.ApplicationInsights
匹配。的最新版本
Microsoft.ApplicationInsights.AspNetCore
是 2.14.0,它指的是Microsoft.ApplicationInsights
版本 2.14.0。 因此,要安装的 的版本Microsoft.ApplicationInsights.AspNetCore
应为 2.14.0。ConfigureServices
修改 Startup.cs 类中的 方法:services.AddSingleton<ITelemetryModule, FileDiagnosticsTelemetryModule>(); services.ConfigureTelemetryModule<FileDiagnosticsTelemetryModule>( (module, options) => { module.LogFilePath = "C:\\SDKLOGS"; module.LogFileName = "mylog.txt"; module.Severity = "Verbose"; } );
应用程序必须对配置的位置具有写入权限。
重启该过程,以便 SDK 选取这些新设置。
完成后还原这些更改。
使用 PerfView 收集日志
PerfView 是一种免费工具,可帮助隔离 CPU、内存和其他问题。
Application Insights SDK 日志 EventSource
具有 PerfView 可以捕获的自我故障排除日志。
若要收集日志,请下载 PerfView 并运行以下命令:
PerfView.exe collect -MaxCollectSec:300 -NoGui /onlyProviders=*Microsoft-ApplicationInsights-Core,*Microsoft-ApplicationInsights-Data,*Microsoft-ApplicationInsights-WindowsServer-TelemetryChannel,*Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Dependency,*Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Web,*Microsoft-ApplicationInsights-Extensibility-DependencyCollector,*Microsoft-ApplicationInsights-Extensibility-HostingStartup,*Microsoft-ApplicationInsights-Extensibility-PerformanceCollector,*Microsoft-ApplicationInsights-Extensibility-EventCounterCollector,*Microsoft-ApplicationInsights-Extensibility-PerformanceCollector-QuickPulse,*Microsoft-ApplicationInsights-Extensibility-Web,*Microsoft-ApplicationInsights-Extensibility-WindowsServer,*Microsoft-ApplicationInsights-WindowsServer-Core,*Microsoft-ApplicationInsights-LoggerProvider,*Microsoft-ApplicationInsights-Extensibility-EventSourceListener,*Microsoft-ApplicationInsights-AspNetCore,*Redfield-Microsoft-ApplicationInsights-Core,*Redfield-Microsoft-ApplicationInsights-Data,*Redfield-Microsoft-ApplicationInsights-WindowsServer-TelemetryChannel,*Redfield-Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Dependency,*Redfield-Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Web,*Redfield-Microsoft-ApplicationInsights-Extensibility-DependencyCollector,*Redfield-Microsoft-ApplicationInsights-Extensibility-PerformanceCollector,*Redfield-Microsoft-ApplicationInsights-Extensibility-EventCounterCollector,*Redfield-Microsoft-ApplicationInsights-Extensibility-PerformanceCollector-QuickPulse,*Redfield-Microsoft-ApplicationInsights-Extensibility-Web,*Redfield-Microsoft-ApplicationInsights-Extensibility-WindowsServer,*Redfield-Microsoft-ApplicationInsights-LoggerProvider,*Redfield-Microsoft-ApplicationInsights-Extensibility-EventSourceListener,*Redfield-Microsoft-ApplicationInsights-AspNetCore
可以根据需要修改这些参数:
参数 | 说明 |
---|---|
MaxCollectSec |
设置此参数以防止 PerfView 无限期运行并影响服务器的性能。 |
OnlyProviders |
将此参数设置为仅从 SDK 收集日志。 可以根据特定的调查自定义此列表。 |
NoGui |
设置此参数以在没有 GUI 的情况下收集日志。 |
有关更多信息,请参阅:
使用 dotnet-trace 收集日志
或者,可以使用跨平台 .NET Core 工具 dotnet-trace 收集日志,以便进一步帮助进行故障排除。 此工具可能对基于 Linux 的环境有所帮助。
安装 dotnet-trace
后,在 bash 中运行以下 dotnet-trace collect 命令:
dotnet-trace collect --process-id <PID> --providers Microsoft-ApplicationInsights-Core,Microsoft-ApplicationInsights-Data,Microsoft-ApplicationInsights-WindowsServer-TelemetryChannel,Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Dependency,Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Web,Microsoft-ApplicationInsights-Extensibility-DependencyCollector,Microsoft-ApplicationInsights-Extensibility-HostingStartup,Microsoft-ApplicationInsights-Extensibility-PerformanceCollector,Microsoft-ApplicationInsights-Extensibility-EventCounterCollector,Microsoft-ApplicationInsights-Extensibility-PerformanceCollector-QuickPulse,Microsoft-ApplicationInsights-Extensibility-Web,Microsoft-ApplicationInsights-Extensibility-WindowsServer,Microsoft-ApplicationInsights-WindowsServer-Core,Microsoft-ApplicationInsights-LoggerProvider,Microsoft-ApplicationInsights-Extensibility-EventSourceListener,Microsoft-ApplicationInsights-AspNetCore,Redfield-Microsoft-ApplicationInsights-Core,Redfield-Microsoft-ApplicationInsights-Data,Redfield-Microsoft-ApplicationInsights-WindowsServer-TelemetryChannel,Redfield-Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Dependency,Redfield-Microsoft-ApplicationInsights-Extensibility-AppMapCorrelation-Web,Redfield-Microsoft-ApplicationInsights-Extensibility-DependencyCollector,Redfield-Microsoft-ApplicationInsights-Extensibility-PerformanceCollector,Redfield-Microsoft-ApplicationInsights-Extensibility-EventCounterCollector,Redfield-Microsoft-ApplicationInsights-Extensibility-PerformanceCollector-QuickPulse,Redfield-Microsoft-ApplicationInsights-Extensibility-Web,Redfield-Microsoft-ApplicationInsights-Extensibility-WindowsServer,Redfield-Microsoft-ApplicationInsights-LoggerProvider,Redfield-Microsoft-ApplicationInsights-Extensibility-EventSourceListener,Redfield-Microsoft-ApplicationInsights-AspNetCore
删除 Application Insights
若要在 Visual Studio 中删除 Application Insights,请按照 在 Visual Studio 中删除 Application Insights 中提供的步骤操作。
它仍然不起作用
有关 Application Insights,请参阅 Microsoft Q&A 页。
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。