我已经使用ApplicationInsights几个月了。 虽然它通常适用于MVC和Web应用程序,但我有一些WebAPI服务应用程序,我想跟踪其使用情况。
例如,我的应用程序中有不同的RESTful API,我想看看每天(或在一段时间内)进行多少次调用以比较使用情况。
ApplicationInsights中的用法选项卡似乎是为HTML Web应用程序量身定制的。
有没有办法将它用于服务?
答案 0 :(得分:2)
如果我正确地提出了您的问题,您希望根据用户确定每个API的使用情况。您已经拥有可用于每个API的请求数据,但无法根据用户进行过滤,因为我们无法跟踪每个遥测事件的用户。
如果您想根据用户或任何属性过滤遥测数据(请求,例外等),您需要在遥测事件的属性中使用它,以便您可以直接过滤它并生成图表。指标资源管理器。为此,您可以创建TelemetryInitializer
。
遥测初始化器允许您添加全局属性以及所有遥测数据,这意味着它将针对从您的应用发送的所有遥测事件执行。以下是跟踪UserID以及每个遥测事件的示例。我假设您将使用Windows身份验证为您设置User.Identity
。只要在Http请求中设置了IPrinicipal
,这也适用于任何其他身份验证(Azure AD,基于证书的身份验证等)。
public class UserTelemetryIntitializer : ITelemetryInitializer
{
public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
{
var context = HttpContext.Current;
if (context == null)
return;
// If user has authenticated, add a property UserID to telemetry which will have
// * domain\\username for Windows Authentication
// * username@domain.com for Azure AD Authentication
if (context.User.Identity.IsAuthenticated)
telemetry.Context.Properties["UserID"] = context.User.Identity.Name;
else
telemetry.Context.Properties["UserID"] = "Null";
}
}
请勿忘记使用ApplicationInsights.config
加载遥测初始值设定项:
<ApplicationInsights>
<TelemetryInitializers>
<!-- Fully qualified type name, assembly name: -->
<Add Type="MvcWebApp.Telemetry.UserTelemetryIntitializer, MvcWebApp"/>
...
</TelemetryInitializers>
</ApplicationInsights>
或者,您也可以使用代码代替加载初始值设定项。在global.asax.cs
或WebApiConfig.cs
:
protected void Application_Start()
{
TelemetryConfiguration.Active.TelemetryInitializers
.Add(new UserTelemetryIntitializer());
}
您可以阅读有关遥测初始化器here的更多信息。