使用应用程序洞察力进行用户组跟踪
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 } } );
等等
一旦你按照你想要的方式工作,你就可以使用遥测初始化器:
并创建一个初始化程序来创建和设置从应用程序发送的 所有 遥测数据的自定义属性,而不是像上面那样仅在您明确编写的调用中发送它。
编辑添加:此外,如果您使用自定义维度设置此信息,您现在可以在 //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.cs
或 WebApiConfig.cs
中:
protected void Application_Start()
{
TelemetryConfiguration.Active.TelemetryInitializers
.Add(new UserGroupTelemetryIntitializer());
}
您可以阅读有关遥测初始化程序的更多信息here。
我们希望 运行 我们的查询不仅针对用户本身,还针对用户组获取综合浏览量、异常情况等。这将帮助我们优先考虑未来的发展。
所以我的问题是,是否可以向用户添加一个用户组或更好的某种标签,我们可以使用它来查询。
我知道我们可以通过创建所有自定义调用来做到这一点,但是是否有默认方法?如果没有,将这些参数添加到自定义调用的最佳方法是什么?目前我正在使用 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 } } );
等等
一旦你按照你想要的方式工作,你就可以使用遥测初始化器:
并创建一个初始化程序来创建和设置从应用程序发送的 所有 遥测数据的自定义属性,而不是像上面那样仅在您明确编写的调用中发送它。
编辑添加:此外,如果您使用自定义维度设置此信息,您现在可以在 //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.cs
或 WebApiConfig.cs
中:
protected void Application_Start()
{
TelemetryConfiguration.Active.TelemetryInitializers
.Add(new UserGroupTelemetryIntitializer());
}
您可以阅读有关遥测初始化程序的更多信息here。