在 global.asax.cs 中分配后未填充 Insights InstrumentationKey

Posted

技术标签:

【中文标题】在 global.asax.cs 中分配后未填充 Insights InstrumentationKey【英文标题】:Insights InstrumentationKey not populated after assignment in global.asax.cs 【发布时间】:2021-10-14 19:31:47 【问题描述】:

我有一个使用这些 Nuget 包的.NET Framework 4.6.1 Web API 解决方案:

  <package id="Microsoft.ApplicationInsights" version="2.9.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.9.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.9.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.Web" version="2.9.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.WindowsServer" version="2.9.1" targetFramework="net461" />
  <package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.9.1" targetFramework="net461" />
  <package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.5" targetFramework="net461" />

global.asax.cs我有这个代码:

protected void Application_Start()

    TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings[$"Insights-EnvironmentConfig.EnvironmentName"];

    GlobalConfiguration.Configure(WebApiConfig.Register);

我可以确认 ConfigurationManager.AppSettings[] 值检索确实检索到有效的 Insights 键。

在我拥有的控制器中:

public class MyController : ApiController

    TelemetryClient telemetryClient = new TelemetryClient(TelemetryConfiguration.Active);

    [Route("api/DoSomething")]
    [HttpPost]
    public async Task<HttpResponseMessage> DoSomething()
    
        try
        
            // stuff happens
        
        catch (Exception ex)
        
            telemetryClient.TrackException(ex); // does not log
            throw ex;
        
    

如果我在// stuff happens 设置一个停止点(当然那里有实际代码)并检查telemetryClient 我可以看到InstrumentationKey 属性为空。这意味着我需要在实例化 TelemetryClient 类的任何地方添加一行并故意填充它。

我怎样才能让它从global.asax.cs 开始填充?

【问题讨论】:

【参考方案1】:

尝试同时使用 appsetting 属性 ConfigurationManager.AppSettingsWebConfigurationManager.AppSettings 我能够在 Application Insights 上查看 TelemetryConfiguration日志 中的 Instrumentation 密钥。

我们正在TelemetryConfig 中添加我们的检测密钥,该密钥在Telemetryconfig. 中可用

protected void Application_Start()
    
        TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings[$"Insights-EnvironmentConfig.EnvironmentName"];
    
        //TelemetryConfiguration.Active.InstrumentationKey = WebConfigurationManager.AppSettings[$"Insights-EnvironmentConfig.EnvironmentName"];
    
        GlobalConfiguration.Configure(WebApiConfig.Register);
 

【讨论】:

以上是关于在 global.asax.cs 中分配后未填充 Insights InstrumentationKey的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Global.asax.cs 中的 Session_Start 会导致性能问题?

MVC 应用程序 - 从 Global.asax.cs 检索 LoaderExceptions

Global.asax.cs介绍

Global.asax.cs 为 /.aspx 执行子请求时出错。 Server.Transfer

为啥我在 Global.asax.cs 中的 Application_BeginRequest 没有被自托管的 WCF 服务调用

ASP.NET MVC:如何在 Global.asax.cs 中的 Application_Start() 中检测浏览器宽度