排查无数据问题:适用于 .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.configApplicationInsights.config 文件:

  1. 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>
    
  2. 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 添加到现有项目时,我看到一条错误消息

可能的原因:

修复:

  • 检查是否为正确的 Azure 帐户提供了登录凭据。
  • 在浏览器中,检查你有权访问Azure 门户。 打开 “设置” ,查看是否有任何限制。
  • 将 Application Insights 添加到现有项目。 在解决方案资源管理器中,右键单击项目并选择“添加 Application Insights”。

生成服务器上的“NuGet 包缺失”

示例方案:

在开发计算机上调试时,一切都会正常生成,但在生成服务器上收到 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 输出窗口中记录的事件。

    显示 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 速率)可用于“设置服务器”>下的以下环境:

将应用发布到服务器后,没有 (服务器) 数据

  • 检查是否已将所有 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 包收集。 不需要其他包。

  1. 修改 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>
    

    应用程序必须对配置的位置具有写入权限。

  2. 重启该过程,以便 SDK 选取这些新设置。

  3. 完成后还原这些更改。

.NET Core

  1. 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。

  2. ConfigureServices修改 Startup.cs 类中的 方法:

    services.AddSingleton<ITelemetryModule, FileDiagnosticsTelemetryModule>();
    services.ConfigureTelemetryModule<FileDiagnosticsTelemetryModule>( (module, options) => {
        module.LogFilePath = "C:\\SDKLOGS";
        module.LogFileName = "mylog.txt";
        module.Severity = "Verbose";
    } );
    

    应用程序必须对配置的位置具有写入权限。

  3. 重启该过程,以便 SDK 选取这些新设置。

  4. 完成后还原这些更改。

使用 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 反馈社区提交产品反馈。