Enviar identificadores contextuales de usuario para habilitar las experiencias de uso en Azure Application InsightsSend user context IDs to enable usage experiences in Azure Application Insights

Seguimiento de usuariosTracking users

Application Insights le permite supervisar y realizar un seguimiento de los usuarios a través de un conjunto de herramientas de uso del producto:Application Insights enables you to monitor and track your users through a set of product usage tools:

Para realizar un seguimiento de lo que hace un usuario a lo largo del tiempo, Application Insights necesita un identificador para cada usuario o sesión.In order to track what a user does over time, Application Insights needs an ID for each user or session. Incluya los siguientes identificadores en cada evento personalizado o vista de página.Include the following IDs in every custom event or page view.

  • Usuarios, embudos, retención y cohortes: incluya el identificador de usuario.Users, Funnels, Retention, and Cohorts: Include user ID.
  • Sesiones: incluya el identificador de sesión.Sessions: Include session ID.

Nota

Este es un artículo avanzado que describe los pasos manuales para el seguimiento de la actividad del usuario con Application Insights.This is an advanced article outlining the manual steps for tracking user activity with Application Insights. Con muchas aplicaciones web es posible que estos pasos no sean necesarios, ya que los SDK del servidor predeterminados junto con el SDK de JavaScript del lado cliente o explorador suelen ser suficientes para realizar un seguimiento automático de la actividad del usuario.With many web applications these steps may not be required, as the default server-side SDKs in conjunction with the Client/Browser-side JavaScript SDK, are often sufficient to automatically track user activity. Si no ha configurado la supervisión de cliente además del SDK del lado servidor, hágalo primero y pruébelo para ver si las herramientas de análisis de comportamiento de usuario se ejecutan según lo esperado.If you haven't configured client-side monitoring in addition to the server-side SDK, do that first and test to see if the user behavior analytics tools are performing as expected.

Elección de los identificadores de usuarioChoosing user IDs

Los identificadores de usuario se deben conservar entre las sesiones de usuario para realizar un seguimiento de cómo se comportan los usuarios con el tiempo.User IDs should persist across user sessions to track how users behave over time. Hay varios enfoques para conservar el identificador.There are various approaches for persisting the ID.

  • Una definición de un usuario que ya tiene en su servicio.A definition of a user that you already have in your service.
  • Si el servicio tiene acceso a un explorador, puede pasar a este una cookie con un identificador en ella.If the service has access to a browser, it can pass the browser a cookie with an ID in it. El identificador se conservará siempre que la cookie permanezca en el explorador del usuario.The ID will persist for as long as the cookie remains in the user's browser.
  • Si es necesario, puede usar un nuevo identificador en cada sesión, pero los resultados sobre los usuarios serán limitados.If necessary, you can use a new ID each session, but the results about users will be limited. Por ejemplo, no podrá ver cómo cambia el comportamiento de un usuario con el tiempo.For example, you won't be able to see how a user's behavior changes over time.

El identificador debe ser un GUID u otra cadena lo suficientemente compleja como para identificar de forma única a cada usuario.The ID should be a Guid or another string complex enough to identify each user uniquely. Por ejemplo, podría ser un número aleatorio largo.For example, it could be a long random number.

Si el identificador contiene información de identificación personal sobre el usuario, no es un valor adecuado para enviarlo a Application Insights como identificador de usuario.If the ID contains personally identifying information about the user, it is not an appropriate value to send to Application Insights as a user ID. Puede enviar un identificador de ese tipo como identificador de usuario autenticado, pero no cumplirá el requisito de identificador de usuario para los escenarios de uso.You can send such an ID as an authenticated user ID, but it does not fulfill the user ID requirement for usage scenarios.

Aplicaciones ASP.NET: Establecimiento del contexto de usuario en un inicializador de telemetríaASP.NET apps: Setting the user context in an ITelemetryInitializer

Cree un inicializador de telemetría, tal como se describe aquí en detalle.Create a telemetry initializer, as described in detail here. Pase el id. de sesión a través de la telemetría de solicitudes y establezca Context.User.Id y Context.Session.Id.Pass the session ID through the request telemetry, and set the Context.User.Id and the Context.Session.Id.

Este ejemplo establece el identificador de usuario en un identificador que expira después de la sesión.This example sets the user ID to an identifier that expires after the session. Si es posible, use un identificador de usuario que se conserve entre sesiones.If possible, use a user ID that persists across sessions.

Inicializador de telemetríaTelemetry initializer

using System;
using System.Web;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;

namespace MvcWebRole.Telemetry
{
  /*
   * Custom TelemetryInitializer that sets the user ID.
   *
   */
  public class MyTelemetryInitializer : ITelemetryInitializer
  {
    public void Initialize(ITelemetry telemetry)
    {
        var ctx = HttpContext.Current;

        // If telemetry initializer is called as part of request execution and not from some async thread
        if (ctx != null)
        {
            var requestTelemetry = ctx.GetRequestTelemetry();
 
            // Set the user and session ids from requestTelemetry.Context.User.Id, which is populated in Application_PostAcquireRequestState in Global.asax.cs.
            if (requestTelemetry != null && !string.IsNullOrEmpty(requestTelemetry.Context.User.Id) &&
                (string.IsNullOrEmpty(telemetry.Context.User.Id) || string.IsNullOrEmpty(telemetry.Context.Session.Id)))
            {
                // Set the user id on the Application Insights telemetry item.
                telemetry.Context.User.Id = requestTelemetry.Context.User.Id;
 
                // Set the session id on the Application Insights telemetry item.
                telemetry.Context.Session.Id = requestTelemetry.Context.User.Id;
            }
        }
    }
  }
}

Global.asax.csGlobal.asax.cs

using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace MvcWebRole.Telemetry
{
    public class MvcApplication : HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
 
        protected void Application_PostAcquireRequestState()
        {
            var requestTelemetry = Context.GetRequestTelemetry();
 
            if (HttpContext.Current.Session != null && requestTelemetry != null && string.IsNullOrEmpty(requestTelemetry.Context.User.Id))
            {
                requestTelemetry.Context.User.Id = Session.SessionID;
            }
        }
    }
}

Pasos siguientesNext steps