Visual Studio 2013

采用 Application Insights 进行新一代开发

Charles Sterling

在过去几年内,软件交付的步伐显著加快。 开发人员已从“瀑布式”方法发展为敏捷方法,进而实现了现今的连续发布节奏。 这样,对更好、更快且更直接的反馈的需求更加迫切。 响应能力是关键。 决策者需要能够提供集成式分析并向整个团队即时提供及时数据的工具。

新版 Microsoft Application Insights 在推出 Visual Studio 2013 时发布,是一组针对高性能交付团队需要回答的主要问题而设计的服务:我们的应用程序是否可用? 应用程序是否正常运转? 我们是否提供了用户想要的功能?

Application Insights 不受操作限制。 为了消除信息传递和加快整个团队的信息流通,它与开发人员和操作人员已使用的工具进行了集成,包括 Visual Studio 和 Visual Studio Online。 这样,所有团队成员都能够轻松地获取需要的信息。

Application Insights 旨在与内置于 Microsoft .NET Framework、Java、Windows Azure 服务、网站、Windows 应用商店应用程序和 Windows Phone 8 应用程序中的服务结合使用。 通过全面的端对端监控,您可以全方位了解应用程序的真实情况,而不仅是一小部分独立数据。

Application Insights 入门

Application Insights 入门很简单。 若要向 Web、Windows Phone 或 Windows 应用商店应用程序添加 Application Insights 遥测功能,请下载 Application Insights Tools for Visual Studio 扩展,该扩展位于 Visual Studio 库 (aka.ms/aivsix) 中。 Visual Studio 的未来版本无需此额外步骤。

对于 Visual Studio 2013 中的新项目,请在创建新项目时选择“将 Application Insights 添加到项目”(请参见图 1)。

Add Application Insights to New Visual Studio 2013 Projects
图 1 将 Application Insights 添加到新 Visual Studio 2013 项目

若要对现有应用程序使用 Application Insights,请右键单击项目并选择“将 Application Insights 遥测功能添加到项目”(请参见图 2)。

Right-Click to Add Application Insights to an Existing Project
图 2 右键单击以将 Application Insights 添加到现有项目

添加 Application Insights 后,您的项目将有三个新的节点,具有可用性监视、性能监视及 Visual Studio Online 中使用情况分析数据的快捷方式(请参见图 3)。

New Nodes Appear in the Enabled Project
图 3 新节点显示在启用的项目中

实施使用情况监视

将 Application Insights 添加到新的或现有项目中后,将立即自动启用对 Web、Windows 应用商店和 Windows Phone 应用程序的使用情况监视。 对于旧版或非 Visual Studio Web 应用程序,您可以通过在应用程序中插入 JavaScript 代码块来添加该相同功能。 您可以通过单击“添加应用程序”(请参见图 4)或转到“控制面板”并选择“获取配置密钥和下载”,来获取此 JavaScript 代码块。

Select Add Application to Add JavaScript Block to Older Apps
图 4 选择“添加应用程序”以向旧版应用程序添加 JavaScript 代码块

实施性能监视

尽管名称如此,性能监视还提供了性能数据以外的大量信息。 它会告知您异常、调用堆栈信息、依赖关系信息、对象分配,甚至有关基础结构的信息。 Microsoft Monitoring Agent (MMA) 还会自动收集您代码中异常和缓慢调用的 IntelliTrace 日志。 在大多数情况下,您只需安装 MMA 即可激活性能监视(MMA 可在 aka.ms/aimma 中找到)。

安装 MMA 时,默认为监视您设备上的所有 Web 应用程序。 这对于开发环境可能很好,但对于具有大量 Web 应用程序的生产服务器而言可能并不理想。 监视应用程序时,MMA 不应导致超过 5% 的性能降低。

若要在您稍候添加的应用程序上启用 MMA,您可以通过以下 Windows PowerShell 命令轻松地手动激活监视:

Start-WebApplicationMonitoring -name "www.microsoft.com/games" -mode Monitor -outputchannel cloud

在 MMA 和 Visual Studio 的未来版本中,您无需采取此步骤。

您还可以在 Java 和 Windows Azure 应用程序中激活性能监视。 开始使用的最简单方法是单击 Application Insights 门户中的“添加应用程序”,正如之前针对实施使用情况监视所述。

实施可用性监视

可用性监视适用于任何 Web 应用程序,无论运行于哪个平台都适用。 只需可以通过 Internet 进行访问即可。 您可以从世界各地测试 Web 应用程序的可用性和性能。 此模块也是最容易开始工作的。

当您选择 Application Insights 中的“可用性”菜单时,系统将提示您提供 Web 应用程序的 URL。 这将创建一个简单的基于 URL 的综合监视器,该监视器只有一个监视位置。

如果您需要监视更复杂的事务,则可能最好使用 Visual Studio 编码的 Web 性能测试。 综合监视器基于通常用于负载测试 Web 应用程序的相同记录功能。 这让您能够测试一组复杂的操作。 若要创建单个 URL 或多步骤综合监视器,请单击绿色的“添加新综合监视器”图标,然后配置所需设置(请参见图 5)。

Configure the Settings for a New Synthetic Monitor
图 5 为新综合监视器配置设置

将 Application Insights 投入使用

在过去一年中,近 100 个内部 Microsoft 团队和外部行业专家试用了 Application Insights 的早期版本,并提供了作为正式技术采用计划一部分的反馈。 他们发现的某些内容出乎开发团队预料,特别是产品所有者和非技术团队成员的浓厚兴趣和参与。

早期采用者认为 Application Insights 的一个关键价值是,它能够通过将所有此类分析信息引入 Visual Studio Online 中的单个位置,从而加快开发周期。

衡量 Web 活动 Wintellect 是关注 Application Insights 的首批外部客户之一,该公司是一家培训和咨询公司。 他们想要了解其新的按需培训产品 WintellectNOW 的课程说明的效果。

通过使用 Application Insights 中的“页面访问数”报告,Wintellect 开发人员可以向“立即注册”按钮添加 JavaScript 函数,类似于:

function trackCourse() { window.__da.trackEvent("Course", window.location.hostname + window.location.pathname, {"CourseID":"Test401"}, {"RatingValue": 400}); }

这样,开发人员能够衡量并直观查看哪些课程说明最有效地推动了实际注册。 有关实施 Application Insights 中自定义事件的更多信息,请参阅 aka.ms/aijs

衡量全球 Web 流量 Wintellect 计划在西班牙马德里举行的 2013 年度 TechEd 欧洲会议上进行展示。 业务人员想要通过简单的方法来衡量公司的出席是否会提高对其欧洲市场产品的认知。

公司使用 Application Insights 设置使用情况报告,并将 TechEd 之前一周的情况与之后一周的情况进行比较。 欧洲的流量增加了 7%,其中西班牙的流量增加了一倍。 Wintellect 无需开发人员进行任何特殊工作来衡量这些结果,因此其技术团队能够专注于可交付内容。

简化查找、修复和发布

Microsoft 也运用 Application Insights。 负责 Microsoft 主网站和主页的服务工程师每天管理超过 400 个应用程序。 他们的首要任务是减少从发现问题到问题得以解决的时间。 通过采用 Application Insights 设置仪表板和警告,他们会收到关于失败的可用性测试、性能事件或性能索引降低的实时通知。 这有助于工程师在客户发现出现任何问题前解决问题。

团队设置了一个可用性监视器,该监视器具有最长允许运行时间,并且具有在超过阀值的任何情况下进行指示的警告。 然后,工程师可以直接从 Web 视图确定失败的原因,或将其下载到 Visual Studio 并按查看 Web 测试结果的方式进行查看。 综合监视器报告指出这些测试只是在进行部署后才开始出现故障。 然后,在进行另一个部署后,继续成功运行。 约 4 小时后,进行了 11 项配置更改。 他们能够将可用性问题直接与实际代码和配置更改重新关联。 这有助于他们立即诊断出事件的根本原因。

通过 Application Insights,您可以在应用程序生成警告之前对其进行优化。 在仪表板中,有“活动警报”、“异常事件”、“性能事件”、“内存事件”及“性能和可靠性”图。 所有这些度量为想要改进应用程序的工程团队提供了易于理解的信息。

选择这些图块中的任意一项都将帮您找到最有可能导致操作的数据。 例如,单击 Application Insights 仪表板中的“性能”图(图 6)将带您进入“性能”页面(图 7)。 在本示例中,您可以看到依赖关系、Web 服务及响应时间之间有密切关联。

The Application Insights Dashboard
图 6 Application Insights 仪表板

The Application Insights Performance Page
图 7 Application Insights 性能页面

单击仪表板中的“内存”、“异常”或“性能事件”图块以转到“事件”页面。 在此,您可以筛选、选择、打开内存诊断会话,启动 IntelliTrace 调试会话或查看引发 Visual Studio 中事件的变更集。

总结

这些仅是少量示例,说明开发团队如何使用 Application Insights 来与运营团队更密切合作,从而更快速地交付更好的软件。 您可以通过 Visual Studio Online 访问 Application Insights (visualstudio.com)。

在后续文章中,我会介绍基于云的负载测试与 Application Insights 的集成。 有关创建 Web 测试的更多信息,请转到 bit.ly/1im10YI。 有关通过 Application Insights 进行可用性监视的更多信息,请转到 bit.ly/1gxgLYk

由于添加代码监视的简易性、与 Visual Studio Online 的紧密集成及节约时间等方面的优势,您一定想了解这些方案,从而实现可以通过 Application Insights 完成的操作。

Charles Sterling 已经在 Microsoft 工作 20 年了。在就职于 Microsoft 之前,他是在美国国家海洋渔业局工作的一名海洋生物学家,从事白令海海洋哺乳动物的研究。作为 Microsoft 产品经理在澳大利亚旅居 6 年后,Sterling 目前回到雷蒙德,担任 Visual Studio 开发团队的高级程序经理。您可以通过 chass@microsoft.com 与他联系。

衷心感谢以下技术专家对本文的审阅:
John Robbins 是 Wintellect 的共同创始人之一,负责公司的咨询和调试服务方面。 他还周游世界,传授他的《Mastering .NET Debugging》(学习 .NET 调试)和《Mastering Windows Debugging》(学习 Windows 调试)课程,从而让各地的开发人员能够学到用于解决人类已知的最困难软件问题的技术。
Cheryl Hammond 是 Northwest Cadence 的 ALM 顾问并领导实践小组,专注于能够提供敏捷性、体系结构和测试实践以改善开发人员的工作生活、加强团队建设并交付更好的软件的方法。