tutorial porta insights application addapplicationinsightssettings asp.net-mvc azure asp.net-mvc-5 azure-application-insights

asp.net-mvc - insights - porta azure



Clave de instrumentación configurable Application Insights (2)

Todos los métodos que especificó son geniales. Nuestra recomendación es usar una configuración de aplicación web.config y usarla en global.asax.cs para la inicialización estándar. No se enviará telemetría antes de la iniciación cuando enganchemos en OnBeginRequest ().

https://docs.microsoft.com/en-us/azure/application-insights/app-insights-api-custom-events-metrics#a-namedynamic-ikeya-dynamic-instrumentation-key

Otro método que podría funcionar bien es establecer la variable de entorno APPINSIGHTS_INSTRUMENTATIONKEY tal como la recogió el SDK. Por supuesto, eso depende de si tienes múltiples aplicaciones en la misma máquina.

https://github.com/Microsoft/ApplicationInsights-dotnet/blob/v2.2.0/src/Core/Managed/Net40/Extensibility/Implementation/TelemetryConfigurationFactory.cs#L22

¿Cómo puedo configurar la clave de instrumentación de las aplicaciones para que sea configurable de manera tal que permita a un administrador de Azure administrar la configuración para una implementación de App Services de una aplicación web MVC5? ¿Hay algún evento en la inicialización de una aplicación MVC donde se deba hacer esto o está bien hacerlo en prácticamente cualquier punto? Estoy usando la integración de Trace Listener también.

De forma predeterminada, la clave de instrumentación (iKey) se establece en el archivo ApplicationInsights.config . Además, si incluye las partes de JavaScript, iKey se configura nuevamente en el archivo _Layout.cshtml . Estos son dos lugares diferentes con una iKey que necesita administrar.

Deseo poder administrar esta clave a través de App Services -> pestaña Configuración de la aplicación de Azure Portal. Las razones son:

  1. Deseo implementar varias instancias de esta aplicación, cada una con su propia iKey única
  2. Quiero cambiar esta iKey periódicamente (porque razones )
  3. No quiero que este iKey esté almacenado en nuestro repositorio de código (está bien que un iKey "dev" esté en el repositorio de código) ni quiero que sea gestionado por nuestra automatización de compilación (de nuevo, porque hay razones )

Aquí está la implementación que estoy usando actualmente, y parece funcionar. Sin embargo, tenía otras implementaciones que parecían configurar el iKey demasiado pronto o demasiado tarde, ya que parecía que usaría el iKey en el archivo físico web.config desplegado en Azure en lugar de tirar desde la pestaña Configuración de la aplicación desde el Portal. ¿Hay mejores opciones para hacer esto de la mejor manera?

ApplicationInsights.config

<!-- Find the following node and *remove* it. It will have a GUID in it. If you leave this, you may receive some errors even with all of the other changes. --> <InstrumentationKey>{GUID HERE}</InstrumentationKey>

Global.asax.cs

protected void Application_Start() { // Add this first line below Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings["ai:InstrumentationKey"]; // Showing the rest of this so you can see the order of operations AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); AutomapperConfig.Init(); }

web.config

<!-- Add the following to <appSettings> and put your iKey value in here. --> <add key="ai:InstrumentationKey" value="*****" />

_Layout.cshtml (en la sección <head> del HTML. NOTA PARA LECTORES FUTUROS: Recomiendo que no use este fragmento completo, sino que simplemente use la línea que comienza instrumentationKey: e integre esa línea en lo que sea que sea la versión moderna el resto de este fragmento JS!):

<script type = ''text/javascript'' > var appInsights=window.appInsights||function(config) { function r(config){ t[config] = function(){ var i = arguments; t.queue.push(function(){ t[config].apply(t, i)})} } var t = { config:config},u=document,e=window,o=''script'',s=u.createElement(o),i,f;for(s.src=config.url||''//az416426.vo.msecnd.net/scripts/a/ai.0.js'',u.getElementsByTagName(o)[0].parentNode.appendChild(s),t.cookie=u.cookie,t.queue=[],i=[''Event'',''Exception'',''Metric'',''PageView'',''Trace'',''Ajax''];i.length;)r(''track''+i.pop());return r(''setAuthenticatedUserContext''),r(''clearAuthenticatedUserContext''),config.disableExceptionTracking||(i=''onerror'',r(''_''+i),f=e[i],e[i]=function(config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t[''_'' + i](config, r, u, e, o),s}),t }({ instrumentationKey:''@(Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.InstrumentationKey)'' }); window.appInsights=appInsights; appInsights.trackPageView(); </script>