使用应用程序洞察力进行用户组跟踪

Usergroup tracking with application insights

我们希望 运行 我们的查询不仅针对用户本身,还针对用户组获取综合浏览量、异常情况等。这将帮助我们优先考虑未来的发展。

所以我的问题是,是否可以向用户添加一个用户组或更好的某种标签,我们可以使用它来查询。

我知道我们可以通过创建所有自定义调用来做到这一点,但是是否有默认方法?如果没有,将这些参数添加到自定义调用的最佳方法是什么?目前我正在使用 javscript 函数 appInsights.setAuthenticatedUserContext() 来传递用户信息

您可以在发送的 any/all 事件中使用自定义属性添加用户组或标签。

https://docs.microsoft.com/en-us/azure/application-insights/app-insights-api-custom-events-metrics

telemetryClient.TrackEvent( "the event", 
   new Dictionary<string,string> { {"UserGroup", theUserGroup } } );

等等

一旦你按照你想要的方式工作,你就可以使用遥测初始化器:

https://docs.microsoft.com/en-us/azure/application-insights/app-insights-api-filtering-sampling#add-properties

并创建一个初始化程序来创建和设置从应用程序发送的 所有 遥测数据的自定义属性,而不是像上面那样仅在您明确编写的调用中发送它。

编辑添加:此外,如果您使用自定义维度设置此信息,您现在可以在 //build 宣布的新使用工具的过滤器中使用它2017 年:https://docs.microsoft.com/en-us/azure/application-insights/app-insights-usage-segmentation

由于您不仅要查询请求,还要查询用户组的综合浏览量、异常情况等,因此您绝对应该选择 TelemetryInitializers。遥测初始化程序允许您将全局属性添加到所有遥测数据,这意味着它们会针对从您的应用程序发送的所有遥测事件执行。

下面的示例显示了如何添加 TelemetryInitializer 来为每个遥测事件添加用户组或任何其他 属性。该示例假设可以从用户的声明列表中获取用户的组标识。然而,它也可以像角色一样简单。您还可以调整它并实现您自己的识别用户组的方式。在这里,我们根据从用户的 Azure AD 声明列表中获得的用户租户进行分组。完成此操作后,您应该能够使用 UserGroup 属性 为您的请求、异常、综合浏览量等查询和创建图表,每个图表都可用。

public class UserGroupTelemetryIntitializer : ITelemetryInitializer
{
    public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
    {
        var context = HttpContext.Current;

        if (context == null)
            return;

        if (context.User.Identity.IsAuthenticated)
        {
            // Retrieve the claim that helps identify the user's group. In this case
            // we retrieve the Tenant ID from the Azure Active Directory claims
            var user = (context.User as System.Security.Claims.ClaimsPrincipal);
            var userGroup = user.Claims.FirstOrDefault(
                x => x.Type == "http://schemas.microsoft.com/identity/claims/tenantid");

            // Add the Value of the claim as the UserGroup property for each telemetry
            if (userGroup != null)
                telemetry.Context.Properties["UserGroup"] = userGroup.Value;
        }
        else
            telemetry.Context.Properties["UserGroup"] = "None";
    }
}

不要忘记加载遥测初始化器,使用 ApplicationInsights.config:

<ApplicationInsights>
  <TelemetryInitializers>
    <!-- Fully qualified type name, assembly name: -->
    <Add Type="MvcWebApp.Telemetry.UserGroupTelemetryIntitializer, MvcWebApp"/>
    ...
  </TelemetryInitializers>
</ApplicationInsights>

或者,您也可以使用代码 而不是 加载初始化程序。在您的 global.asax.csWebApiConfig.cs 中:

protected void Application_Start()
{
    TelemetryConfiguration.Active.TelemetryInitializers
        .Add(new UserGroupTelemetryIntitializer());
}

您可以阅读有关遥测初始化程序的更多信息here