21

什么是 APM?

 3 years ago
source link: https://mp.weixin.qq.com/s/HuFf4F_Bdu2RN8XwOAMJPg
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

YVVNJ3n.gif

APM是指应用程序性能管理或 :point_right: 应用程序性能监控 。您可能会争辩说它们是同一回事,或者也许管理层推断出它们更主动,而仅在应用程序性能方面进行监控。无论哪种方式,APM都是帮助优化和监视应用程序性能的必备工具。

什么是应用程序性能管理(APM)?

按照我的定义,APM或应用程序性能管理在很大程度上是行业或供应商创建的术语,用于管理或监控代码性能,应用程序依赖项,事务时间和整体用户体验的任何事情。

:point_right: 维基百科  说:自2013年上半年以来,APM进入了技术和战略竞争激烈,供应商观点众多的竞争时期。 这引起了市场的动荡,来自不相关背景(包括网络监控,系统管理,应用程序工具和Web性能监控)的供应商纷纷采用APM周围的消息传递。结果 术语“ APM”已被淡化,并演变成一种概念,用于管理跨多个不同计算平台(而不是单个市场)的应用程序性能。

由于APM是与性能相关的所有事物的普遍存在的术语,因此某些供应商使用该术语来表示完全不同的事物。APM可以涵盖几种不同类型的供应商解决方案。

3种APM监控工具:

  • 基于应用程序指标: 一些工具使用各种服务器和应用程序指标,并将其称为APM。他们充其量只能告诉您,您的应用程序收到了多少个请求,以及哪些URL可能很慢。由于他们不执行代码级分析,因此无法告诉您原因;

  • 代码级性能: :point_right: Stackify Retrace, :point_right: New Relic , AppDynamics和的dynaTrace是典型类型的APM产品,这些产品是基于代码分析和事务跟踪;

  • 基于网络的: Extrahop使用术语APM来表示他们根据网络流量衡量应用程序性能的能力。有一个名为NPM的整个产品类别,专注于此类解决方案。

其他一些工具则根据服务器和应用程序度量标准(而非代码级性能)进行监控,有时将其产品称为应用程序性能监控解决方案。了解服务器的CPU或Web服务器的平均响应非常重要且很有帮助,但是APM的目标是进一步深入。

通过利用 :point_right: 代码概要分析和其他数据收集技术,应用程序性能监视工具 可以提供详细的事务跟踪

aYNvMj.png!web

APM就是要尽快了解"为什么"

如果要衡量Web应用程序的性能,则解析访问日志并了解Web请求花费的时间很简单。这将使您大致了解整体性能以及哪些页面运行缓慢。不幸的是,它没有回答 为什么 这个关键问题  。

APM解决方案的核心是了解为什么应用程序中的事务缓慢或失败

例如,开发或运维团队可以从该视图立即得知他们的数据库正在引起一些性能峰值。他们还可以利用其APM来准确确定受影响的数据库查询和Web请求。

QVv2MbI.png!web

APM解决方案可以帮助快速识别常见的应用程序问题:

  1. 跟踪整体应用程序使用情况以了解流量高峰;

  2. 查找应用程序相关性(包括SQL,队列,缓存等)的速度慢或连接问题;

  3. 识别缓慢的SQL查询;

  4. 查找最大量和最慢的网页或交易。

开发人员关注的10个应用性能管理功能

对于开发人员来说,APM实际上是关于数据的,我的意思是大量数据。但是,他们不仅需要数据,还需要从数据中获得可行的见解,以便他们能够快速找到导致应用程序问题的根本原因。

以下是其中大多数支持的一些关键功能。

1.每个网络请求和交易的执行

作为APM的核心,你必须能够衡量应用程序中每个Web请求和事务的性能。然后,你可以使用它来了解访问最多的请求,访问最慢的请求以及应添加到待办事项中以改进的请求。

不过,了解每个Web请求的性能只是一个开始。您可能会从Web服务器访问日志中获得该信息。 真正的关键是理解原因。

2.代码级性能分析

如果你想了解为什么应用程序运行缓慢,引发错误或出现奇怪的错误,则必须深入到代码级别。知道某个Web请求不起作用很重要,而且实际上很容易。弄清楚为什么它不起作用很难,那就很难了。

通过跟踪应用程序一直到 :point_right: 代码级别的工作,您可以潜在地获得有关正在发生的事情的更多见解:

  • 您的代码中哪些关键方法甚至被调用?

  • 哪些方法比较慢?

  • 您的应用是否由于JIT,垃圾收集等原因而运行缓慢?

  • 调用了什么依赖项?

3. 所有应用程序依赖的使用和性能,如数据库、web服务、缓存等

为什么您的应用程序运行缓慢的原因通常归结为流量激增或 :point_right: 应用程序依赖项之一出现问题。

这些是常见类型的问题:

  • 特定的 :point_right: SQL查询速度很慢;

  • SQL数据库服务器已关闭;

  • 外部HTTP Web服务调用失败;

  • 云上共同租户复杂的环境造成的问题。

举一个例子,我们最近在访问Hubspot的API时遇到了一些问题。他们限制了我们,我们唯一会知道的方法是跟踪所有异常,并在APM中看到那些受影响的交易也失败了。

4.各个Web请求或交易的详细跟踪

解决生产中的问题非常困难。 :point_right: 事务跟踪使您能够查看有关代码中正在发生的确切变化以及它们如何影响用户的详细信息,从而使此过程变得更加容易。

跟踪可以包含以下类型的数据:

  • Web请求信息,例如URL等;

  • 用户是谁;

  • 您的代码调用了哪些依赖项(SQL,缓存,HTTP调用等);

  • 记录SQL语句;

  • 应用错误;

  • 代码中的关键方法。

在一条轨迹线索中看到所有这些数据可能会导致短路,从而不得不尝试重现QA中的问题。使用APM解决方案收集详细信息跟踪,几乎可以立即找出根本原因。

5.基本的服务器监控和指标,例如CPU,内存等

出现应用程序问题的原因很多。得益于虚拟化和云技术,如今服务器故障的情况已不那么普遍。但是,它仍然会发生,这是你仍需要监控的事情。监控 :point_right: 服务器CPU和内存等内容也很重要。许多现代Web应用程序通常不受CPU限制,但是它们仍然可以使用大量CPU,这是在云上自动扩展应用程序的有用指标。

6.应用程序框架指标,例如性能计数器,JMX MBean等

服务器指标(例如CPU和内存)很有趣,但是对于开发人员来说,应用程序指标对于真正的应用程序性能监控可能更有价值。开发人员需要监控诸如 :point_right: 垃圾收集,请求队列,事务量,页面加载时间等内容的指标。开发人员可以监控各种 :point_right: Windows性能计数器和 :point_right: JMX MBean。监控Redis, :point_right: Elasticsearch,SQL和其他服务等关键指标也很关键。

7.开发团队或企业创建的自定义应用程序指标

标准服务器和 :point_right: 应用程序指标对于监控应用程序非常有帮助。但是,通过创建和监视自己的自定义指标,您可能会获得更多价值。在Stackify,我们使用它们来执行诸如监控每分钟有多少条日志消息PUSH给我们或处理消息离开队列需要多长时间的事情。这些类型的自定义指标易于创建,对于 :point_right: 监视应用程序性能非常有用。

8.应用程序日志数据

每当生产中出现问题时,您会听到开发人员说的第一件事是“将日志发送给我”。部署应用程序后,日志数据通常是开发人员的耳目。开发人员需要通过集中式日志记录解决方案(如日志管理产品)来访问其日志。幸运的是, :point_right: 日志管理是 :point_right: Retrace中包含的APM功能。大多数APM解决方案都不支持开发人员想要查看的日志!

9.应用错误

我们想要的最后一件事是让用户与我们联系,并告诉我们,我们的应用程序正在给他们提供错误或正在崩溃。作为开发人员,我们需要随时注意这种情况,并不断地为他们提供注意。

错误是发现应用程序问题的第一道防线。在客户打电话告诉我们之前,我们需要查找并修复错误,或者至少是对错误的了解,因为客户发现错误问题,他们不会告诉我们,只会选择新的商家,离开你们这糟糕体验的应用 or 产品。

出色的 :point_right: 错误跟踪,报告和警报对于应用程序性能管理系统中的开发人员绝对至关重要。我强烈建议为新的异常以及监控总体错误率设置警报。每当您对生产进行新的部署时,您都应该观察错误仪表板,以查看是否出现了任何新问题。奇怪的是,您会发现一些新类型的错误,然后可以快速识别并修复这些错误。

10. 真实用户监视(RUM)

了解服务器端应用程序的性能很重要。但是,当今的应用程序使用了太多的 JavaScript ,因此还必须监控浏览器完全加载和呈现你的网页所花费的时间。一个简单的 JavaScript 错误或加载缓慢的 JavaScript 文件可能会完全破坏您的应用程序。 :point_right: 实时用户监控(RUM)是APM的另一个重要功能,开发人员需要全面监视其应用程序。

APM市场和价格

APM市场最早在美国兴起,作为传统软件业务,一直为大型软件公司垄断,在1998-2008年期间,只有像CA、IBM、BMC、微软这样大玩家。但是这种局面在2008年得到改变,随着SaaS服务的普及,出现了New Relic、AppDynamics和Compuware这类新兴IT企业,以SaaS方式进入APM市场。

2008年可以看作APM的SaaS元年。虽然APM市场前景仍宽广,但是在大客户已经为先行者垄断的情况下,新兴的IT运维企业只能选择中小型企业市场,New Relic目标客户就是小型企业和个人开发者。

综合来看,目前美国市场格局是,综合软件公司已占领大客户资源,新兴企业在边缘寻找机会。

APM有两种模式,一种是SaaS模式,典型代表是New Relic、AppDynamics、Stackify这类新兴企业;另一种私有部署模式,以CA、IBM、BMC、微软这类传统软件公司为主。两种模式的客单价、销售方式、商业模式并不相同,前者是SaaS模式,后者更类似于传统软件行业。

国内主流APM厂商主要采用第二种模式,也就是大客户的私有部署。因此,可以作为对标研究的行业包括APM、CDN、传统软件公司。

其中最有代表性公司是 New Relic(NSDQ:NEWR)、用友网络(SH:600588)和网宿科技(SZ:300017)三家公司,分别代表APM市场、软件服务和可比行业。

而国内知名的创业APM公司包括基调(听云)、云智慧(透视宝)、博睿、OneAPM, 但是OneAPM基本套现走了,没有什么价值了,自从16年登录新三板,何晓阳都套现去搞区块链lambda项目了。

开源的APM项目主要包括 :point_right: PinPoint、 :point_right: skywalking、 :point_right: zipkin、美团的 :point_right: cat, 相对于传统的监控软件(Zabbix之流)的区别,APM跟关注在对于系统内部执行、系统间调用的性能瓶颈分析,这样更有利于定位到问题的具体原因,而不仅仅像传统监控软件一样只提供一些零散的监控点和指标,就算告警了也不知道问题是出在哪里。

传统上,应用程序性能管理工具是昂贵的奢侈品,只有大型IT企业才能负担得起。许多APM供应商仍然迎合大型企业的需求,每台服务器每年仍收取 2000$ - 4000$

大多数APM解决方案的配置和使用都非常复杂。如此之多,以至于开发团队甚至都不使用它们。它们最终成为昂贵的交通信号灯和仪表板。一些供应商非常重视 :point_right: 使他们的产品价格适中  并且非常易于使用,因此各种规模的开发和运营团队都可以使用它们, 而Stackify推出的产品 :point_right: Retrace每月仅需 10$

国内的APM厂商基本SAAS不挣钱了,基本用户也比较少,有用户的话也基本都是移动端和RUM的需求,国内环境决定的,愿意花钱的甲方都很介意数据放到云上,一般都喜欢采用私有化、私有云的方式,以项目的形式采购和采用APM产品,而不愿意花钱的客户基本都是采用开源产品 or 自研构建。

iAzy6nR.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK