Application Insights 使用分析

Web 或移动应用有哪些最热门的功能? 用户是否使用应用实现了其目标? 他们是否中途放弃应用,后来又回头使用了吗? Application Insights 可帮助你有效地深入分析人们如何使用你的应用。 每次更新应用时,都可以评估它在用户那里的运行状况。 了解这些信息后,你便可针对下一开发周期做出数据驱动的决策。

从应用发送遥测数据

通过在应用服务器代码和网页中安装 Application Insights 来获得最佳体验。 应用的客户端和服务器组件将遥测发送回 Azure 门户进行分析。

  1. 服务器代码:ASP.NETAzureJavaNode.js其他应用安装适当的模块。

  2. 网页代码:使用 JavaScript SDK 从网页收集数据。 请参阅 JavaScript SDK 入门

    注意

    对检测密钥引入的支持将于 2025 年 3 月 31 日结束。 检测密钥引入功能将会继续工作,但我们将不再为该功能提供更新或支持。 转换为连接字符串,以利用新功能

    若要了解更多用于监视网站的高级配置,请查看 JavaScript SDK 参考一文。

  3. 移动应用代码:使用 App Center SDK 从应用收集事件。 然后通过遵循此指南将这些事件的副本发送到 Application Insights 进行分析。

  4. 获取遥测数据:在调试模式下运行项目几分钟。 然后在 Application Insights 的“概述”窗格中查看结果。

    发布应用以监视应用性能,并查看用户使用该应用在执行哪些操作。

注意

你可以将 TelemetryChannel_Endpoint_Address 的占位符值替换为此文档中的由世纪互联运营的 Microsoft Azure 区域的实际终结点地址。

浏览用户人口和统计信息

了解人们何时使用了你的应用以及他们最感兴趣的页面。 还可以了解用户所在的位置以及他们使用的浏览器和操作系统。

“用户”和“会话”报告按页面或自定义事件筛选数据。 报告按位置、环境和页面等属性对数据进行细分。 也可以添加自己的筛选器。

显示“用户”选项卡和条形图的屏幕截图。

右侧的见解指出了数据集中的相关模式。

  • “用户”报告统计所选时间段内访问页面的唯一用户数目。 对于 Web 应用,将使用 Cookie 统计用户。 如果某个用户使用不同的浏览器或客户端计算机访问你的站点或者清除其 Cookie,这些活动会被统计多次。
  • 会话报告把访问站点的用户会话数制成表格。 会话表示用户启动的一段活动时段,并以超过半小时的不活动时段结束。

有关用户、会话和事件工具的详细信息,请参阅在 Application Insights 中进行用户、会话和事件分析

保留:有多少个回头用户?

保留可帮助你根据特定时间桶内执行某个业务操作的用户队列,了解用户回头使用其应用的频率。 方法:

  • 了解哪些特定的功能导致某些用户比其他用户回来得更频繁。
  • 基于真实的用户数据构成假设。
  • 确定产品中是否存在保留问题。

“保留”工作簿的屏幕截图,其中显示了有关用户返回使用其应用的频率的信息。

可以使用顶部的保留控件来定义特定的事件和时间范围以计算保留率。 中间的图表根据指定的时间范围提供总体保留百分比的视觉表示形式。 底部的图表显示特定时间段内的各个保留。 这种详细程度可让你更细致地了解用户正在做什么,以及哪些因素可能会影响用户回头。

有关“保留”工作簿的详细信息,请参阅使用 Application Insights 进行 Web 应用程序的用户保留分析

自定义业务事件

要了解应用中的用户交互,请插入代码行以记录自定义事件。 这些事件会跟踪各种用户操作,例如按钮选择或重要的业务事件,例如购买或游戏胜利。

还可以使用单击分析自动收集插件来收集自定义事件。

在某些情况下页面视图可呈现有用的事件,但一般情况下这些事件并不真实。 用户无需购买产品即可打开产品页面。

使用特定的业务事件可以绘制用户在站点中的进度图表。 可以了解用户对不同选项的偏好,以及他们在哪个位置放弃了应用或者遇到了问题。 了解这些信息后,可以针对开发积压工作的优先级做出明智的决策。

可以在应用的客户端记录事件:

      appInsights.trackEvent({name: "incrementCount"});

或者,可以从服务器端记录事件:

    var tc = new Microsoft.ApplicationInsights.TelemetryClient();
    tc.TrackEvent("CreatedAccount", new Dictionary<string,string> {"AccountType":account.Type}, null);
    ...
    tc.TrackEvent("AddedItemToCart", new Dictionary<string,string> {"Item":item.Name}, null);
    ...
    tc.TrackEvent("CompletedPurchase");

可将属性值附加到这些事件,以便在门户检查事件时可以筛选或拆分事件。 此外,还将一组标准属性(例如匿名用户 ID)附加到每个事件,以便你跟踪单个用户的活动序列。

详细了解自定义事件属性

分解事件

在“用户”、“会话”和“事件”工具中,可按用户、事件名称和属性分解自定义事件。

显示按 AnalyticsItemsOperation 筛选并按 AppID 拆分的“事件”选项卡的屏幕截图。

每当处于任何使用体验时,请选择“打开最后一个运行的查询”图标,返回到基础查询。

Azure 门户中的 Application Insights 会话窗格的屏幕截图。突出显示的是“打开最后一个运行的查询”图标。

然后,可以修改基础查询以获取要查找的信息类型。

下面是有关页面视图的基础查询的示例。 继续操作并将其直接粘贴到查询编辑器中以进行测试。

// average pageView duration by name
let timeGrain=5m;
let dataset=pageViews
// additional filters can be applied here
| where timestamp > ago(1d)
| where client_Type == "Browser" ;
// calculate average pageView duration for all pageViews
dataset
| summarize avg(duration) by bin(timestamp, timeGrain)
| extend pageView='Overall'
// render result in a chart
| render timechart

在应用中设计遥测

设计应用的每项功能时,请考虑如何衡量它在用户那里取得的成功。 决定需要记录哪些事件,并一开始就在应用中针对这些事件编写跟踪调用。

A | B 测试

如果不确定哪个功能变体更成功,请同时发布并允许不同的用户访问每个变体。 衡量每个变体的成效,然后转换到统一版本。

在此技术中,你将独特的属性值附加到应用的每个版本发送的所有遥测数据。 为此,可以在活动的 TelemetryContext 中定义属性。 这些默认属性包含在应用程序发送的每个遥测消息中。 它包括自定义消息和标准遥测。

在 Application Insights 门户中根据属性值筛选和拆分数据,以便比较不同的版本。

若要执行此步骤,请设置遥测初始化表达式

    // Telemetry initializer class
    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        // In this example, to differentiate versions, we use the value specified in the AssemblyInfo.cs
        // for ASP.NET apps, or in your project file (.csproj) for the ASP.NET Core apps. Make sure that
        // you set a different assembly version when you deploy your application for A/B testing.
        static readonly string _version = 
            System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
            
        public void Initialize(ITelemetry item)
        {
            item.Context.Component.Version = _version;
        }
    }

对于 ASP.NET Core 应用程序,请将新的遥测初始化表达式添加到 Program.cs 类中的依赖关系注入服务集合。

using Microsoft.ApplicationInsights.Extensibility;

builder.Services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();

后续步骤