应用程序洞察:没有依赖调用的数据

Application insights: no data for dependency calls

ASP.NET 站点托管在 Azure VM 上。 VM 上安装的 ApplicationInsights 状态监视器。默认 ApplicationInsights.config 由 Visual Studio 中的 "Add AppInsights" 菜单创建,仅添加了自定义初始化程序而不是 ikey:

<Add Type="WebSite.WebSiteTelemetryInitializer, WebSite" />

代码:

public class WebSiteTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {           
            TelemetryConfiguration.Active.InstrumentationKey = WebConfigurationManager.AppSettings["ikey"];

            telemetry.Context.User.Id = Environment.UserName;
            telemetry.Context.Session.Id = Guid.NewGuid().ToString();
            telemetry.Context.Component.Version = typeof(WebSiteTelemetryInitializer).Assembly.GetName().Version.ToString();
        }
    }

一切都按预期工作,但没有性能数据(Cpu,内存)。将 apppool 用户添加到 Performance Monitor Users 组后:

$group = [ADSI]"WinNT://$Env:ComputerName/Performance Monitor Users,group"
$ntAccount = New-Object System.Security.Principal.NTAccount("IIS APPPOOL\DefaultAppPool")
$strSID = $ntAccount.Translate([System.Security.Principal.SecurityIdentifier])
$user = [ADSI]"WinNT://$strSID"
$group.Add($user.Path)

没有依赖调用的数据。

更新 有 3 个重复的跟踪日志:

  1. AI(内部):完成创建扩展的卷影副本, extensionBaseDirectory: C:\inetpub\wwwroot\site\bin, extensionName: Microsoft.ApplicationInsights.Extensions.Intercept 错误 System.UnauthorizedAccessException: Access to the path 'C:\Windows\system32\config\systemprofile' is denied.
  2. AI(内部):扩展附加失败,无法附加,baseFolder:C:\inetpub\wwwroot\site\bin,nativeExtensionName:Microsoft.ApplicationInsights.Extensions.Intercept
  3. AI(内部):[msg=RemoteDependencyModule 失败];[msg=System.InvalidOperationException:附加扩展失败,hresult:2147500037

远程依赖:

好的,这就是阻止 ApplicationInsights 收集依赖项的原因: AI(内部):完成创建扩展的卷影副本,extensionBaseDirectory:C:\inetpub\wwwroot\site\bin,extensionName:Microsoft.ApplicationInsights.Extensions.Intercept,错误 System.UnauthorizedAccessException:访问路径 'C:\Windows\system32\config\systemprofile' 被拒绝。

C:\Windows\system32\config\systemprofile 是为您的进程设置的临时文件夹。您需要更改该过程的临时文件夹,并确保您的应用程序可以在那里写入。 (ApplicationInsights 正在处理分析器使用的本机二进制文件。当您遇到临时 Internet 访问问题时,也会使用 Temp 文件夹。它保存未发送的事件并在连接恢复时发送它们。)

性能计数器:

为了收集性能计数器,运行应用程序池的用户(通常是 ApplicationPoolIdentity)应该是 Performance Monitor Users 组的成员。确保它被添加到那里,你应该在将用户添加到组后执行 iisreset,否则更改将不会生效。

在底部描述: http://blogs.msdn.com/b/visualstudioalm/archive/2014/12/11/updated-application-insights-status-monitor-to-support-12-and-later-application-insights-sdk.aspx

只需添加,您可以通过编辑 applicationsinsights.config 文件的末尾并添加临时文件夹的位置来更改 Application Insights 写入的临时文件夹。这是我所做的:

<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
<StorageFolder>D:\AITempFolder</StorageFolder>

希望这对其他人也有帮助。