visual tutorial studio porta insights application addapplicationinsightssettings c# asp.net azure-web-sites azure-application-insights

c# - tutorial - Agregar propiedades personalizadas para cada solicitud en las métricas de Application Insights



porta azure (4)

Como lo mencionó Alan, podría implementar la interfaz IContextInitializer para agregar propiedades personalizadas a TODA la telemetría enviada por Application Insights. Sin embargo, también sugeriría buscar en la interfaz de ITelemtryInitializer . Es muy similar al inicializador de contexto, pero se llama para cada pieza de telemetría enviada en lugar de solo en la creación de un cliente de telemetría. Esto me parece más útil para registrar valores de propiedades que podrían cambiar a lo largo de la vida útil de su aplicación, como la información relacionada con el usuario y el inquilino, como mencionó.

Espero que te ayude. Aquí hay una publicación de blog con un ejemplo del uso de ITelemetryInitializer .

Me gustaría agregar propiedades personalizadas a las métricas tomadas por Application Insights a cada solicitud de mi aplicación. Por ejemplo, quiero agregar el inicio de sesión del usuario y el código del inquilino, como puedo segmentar / agrupar las métricas en el portal de Azure.

La página de documentos relevante parece ser esta: establecer valores de propiedad predeterminados

Pero el ejemplo es para un evento (es decir, gameTelemetry.TrackEvent("WinGame"); ), no para una solicitud HTTP:

var context = new TelemetryContext(); context.Properties["Game"] = currentGame.Name; var gameTelemetry = new TelemetryClient(context); gameTelemetry.TrackEvent("WinGame");

Mis preguntas :

  1. ¿Cuál es el código relevante para una solicitud, ya que no tengo un código específico en este momento (parece ser administrado automáticamente por el SDK de App Insights): es suficiente crear un TelemetryContext ? ¿Debo crear también un TelemetryClient y, de ser así, debería vincularlo a la solicitud actual? Cómo ?
  2. ¿Dónde debo poner este código? ¿Está bien en el método Application_BeginRequest de global.asax ?

En ese documento, desplácese hacia abajo unas pocas líneas hasta donde se habla de crear una implementación de IContextInitializer. Puede llamar a eso en cualquier método que se llame antes de que comience a funcionar la telemetría.

Sus propiedades personalizadas se agregarán a todos los eventos, excepciones, métricas, solicitudes, todo.


En relación con la primera pregunta "cómo agregar un evento personalizado a mi solicitud / cuál es el código relevante para una solicitud", creo que la principal confusión aquí está relacionada con la asignación de nombres.

Lo primero que debemos señalar es que hay diferentes tipos de información que podemos capturar con Application Insights:

  1. Evento personalizado
  2. Solicitud
  3. Excepción
  4. Rastro
  5. Vista de pagina
  6. Dependencia

Una vez que sepamos esto, podemos decir que TrackEvent está relacionado con "Eventos personalizados", ya que TrackRequest está relacionado con Solicitudes.

Cuando queremos guardar una solicitud, lo que debemos hacer es lo siguiente:

var request = new RequestTelemetry(); var client = new TelemetryClient(); request.Name = "My Request"; client.TrackRequest(countEvent);

Así que imaginemos que tanto el inicio de sesión del usuario como el código del inquilino son cadenas. Podríamos hacer una nueva solicitud solo para registrar esta información usando el siguiente código:

public void LogUserNameAndTenant(string userName, string tenantCode) { var request = new RequestTelemetry(); request.Name = "My Request"; request.Context.Properties["User Name"] = userName; request.Context.Properties["Tenant Code"] = tenantCode; var client = new TelemetryClient(); client.TrackRequest(request); }

Hacer solo un TelemetryContext no será suficiente, porque necesitamos una forma de enviar la información, y ahí es donde TelemetryClient se instala.

Espero que ayude.


Parece que es posible agregar nuevas propiedades a la solicitud existente usando ITelemetryInitializer como se menciona here .

Creé una clase de muestra como se indica a continuación y agregué una nueva propiedad llamada "LoggedInUser" para solicitar telemetría.

public class CustomTelemetry : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { var requestTelemetry = telemetry as RequestTelemetry; if (requestTelemetry == null) return; requestTelemetry.Properties.Add("LoggedInUserName", "DummyUser"); } }

Registre esta clase en el evento de inicio de aplicación. El siguiente ejemplo está tallado de la aplicación MVC de muestra que creé

public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); TelemetryConfiguration.Active.TelemetryInitializers .Add(new CustomTelemetry()); } }

Ahora puede ver la propiedad personalizada "LoggedInUserName" se muestra en el grupo Personalizado de propiedades de solicitud. (Por favor, consulte la captura de pantalla a continuación)

Appinsight con propiedad personalizada.