【问题标题】:ApplicationInsights - How to Track WebAPI UsageApplicationInsights - 如何跟踪 WebAPI 使用情况
【发布时间】:2017-05-04 14:00:42
【问题描述】:

我已经使用 ApplicationInsights 几个月了。 虽然它对于一般的 MVC 和 Web 应用程序非常有用,但我有一些 WebAPI 服务应用程序我想跟踪它们的使用情况。

例如,我的应用程序中有不同的 RESTful API,我想查看每天(或一段时间内)进行多少调用以比较使用情况。

ApplicationInsights 中的用法选项卡似乎是为 HTML Web 应用程序量身定制的。

有没有办法将它用于服务?

【问题讨论】:

  • App Insights 跟踪可能不适用于 Web Api 之类的附加信息,但跟踪 Web Api 应该没有问题。您是否缺少某些特定信息?这里的实际问题是什么?
  • @ChrisPratt 我正在尝试跟踪使用情况。我可以毫无问题地跟踪请求。但我需要用法。我希望能够回答“过去 72 小时内有多少用户使用 X API?”的问题
  • 这不是一回事吗?请求就是使用。您是否只是在寻找分析用语中的“唯一”之类的东西,即提出请求的唯一用户?
  • App Insights 中有一个“使用情况”标签,用于跟踪用户、会话和页面浏览量。这不适用于您的 API 吗?
  • @BanksySan 我正在使用 Windows 身份验证,所以我认为这应该不是问题。

标签: c# asp.net-mvc asp.net-web-api azure-application-insights


【解决方案1】:

如果我没有正确回答您的问题,您希望根据用户确定每个 API 的使用情况。您已经为每个 API 提供了可用的请求数据,但由于我们不会跟踪每个遥测事件的用户,因此无法根据用户对其进行过滤。

如果您想根据用户或任何属性过滤遥测数据(请求、异常等),您需要它在遥测事件的属性中可用,以便您可以直接过滤它并在指标浏览器。为此,您可以创建一个TelemetryInitializer

遥测初始化器允许您添加全局属性以及所有遥测数据,这意味着它将针对从您的应用发送的所有遥测事件执行。这是一个跟踪 UserID 以及每个遥测事件的示例。我假设 User.Identity 将为您设置,因为您使用的是 Windows 身份验证。只要在 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.csWebApiConfig.cs

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

您可以阅读有关 Telemetry Initializers here 的更多信息。

【讨论】:

  • 我最终做了与此非常相似的事情。您不需要 UserID 的自定义属性,但无论如何,这一切最终都会奏效。
  • 知道这是旧的,但正如 Issa 所说,您可以使用它:telemetry.Context.User.Id = your_user_id。这可确保在门户中设置和显示正确的属性。
  • 如果用户未通过身份验证,为什么要telemetry.Context.Properties["UserID"] = "Null";
  • @jpgrassi 当没有用户通过身份验证时,而不是设置"NULL" 我不应该设置一些像New.Guid() 这样的随机数吗?
猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多