应用性能管理(APM)综述
1. APM简述
APM (Application Performance Management,即应用性能管理,在分布式领域也称为分布式跟踪管理)对企业的应用系统进行实时监控,它是用于实现对应用程序性能管理和故障管理的系统化的解决方案。
随着分布式系统和微服务架构的应用和发展,应用性能管理成为系统运维管理和网络管理的一个重要方向,它能够对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本(TCO)。应用性能管理APM能够对整个企业的IT系统各个层面进行集中的性能监控,并对有可能出现的性能问题进行及时、准确的分析和处理。它能轻松地从一个IT应用系统中找到故障点,并提供有相关解决建议或方法,从而提高整体的系统性能。一个企业的关键业务应用的性能强大,可以保证企业业务应用系统的高效性和稳定性,为企业带来核心竞争力的提升。
当下成熟的互联网公司都建立有从基础设施到应用程序的全方位监控系统,力求及时发现故障进行处理并为优化程序提供性能数据支持,降低整体运维成本。国内外商业的APM有Compuware、iMaster、博睿Bonree、听云、New Relic、云智慧、OneAPM、AppDyn、Amics等。 本文主要针对Java技术体系介绍APM的框架、核心功能以及业界主流APM工具的功能特点。
2. APM框架
随着互联网技术和应用的快速发展,应用程序本身变得越来越难以管理,因为它们从单体架构转向高度分布的、多层、多元素的分布式应用架构,应用系统在许多情况下依赖于应用程序的开发框架。APM概念框架旨在帮助企业优先考虑在IT系统架构中需要首先关注的方法,以便企业能够快速实施并全面了解五维APM模型。
APM框架-
终端用户体验
衡量从用户请求到数据再返回的流量传输是捕获最终用户体验(EUE)的一部分。此测量的结果称为实时应用程序监视(又称自顶向下监视),它具有被动和主动两个组件。被动监控 通常是使用网络端口镜像实现的无代理设备。主动监控 由预定义的合成探针和Web机器人组成,用于报告系统可用性和业务事务(即业务方自行埋点)。 -
应用架构映射
应用程序发现和依赖关系映射(ADDM)解决方案用于自动执行将事务和应用程序映射到底层基础架构组件的过程。 -
应用事务的分析
关注用户定义的事务或对业务社区有一定意义的URL页面定义。 -
深度应用诊断
深度应用诊断(DDCM)需要安装代理,通常针对中间件,侧重于Web,应用程序和消息服务器。 -
数据分析
获得一组通用的度量标准以收集和报告每个应用程序非常重要,然后标准化有关数据并呈现应用程序性能数据的常见视图。
3. APM核心功能
APM被形象的称为应用程序的私人医生,越来越收到企业的青睐,比起通过日志方式记录关键数据显然要更加实用,APM主要包含如下核心功能:
-
应用系统存活检测
-
应用程序性能指标检测(CPU利用率、内存利用率等)
基于Java体系的应用程序运行时的性能指标可通过Java.lang.Runtime、java.lang.Management中的方法采集。除此之外,著名的Metrics类库也能够通过这些底层技术获取Java程序性能指标。CPU利用率、内存利用率等基础数据的采集仅仅是性能监控的一部分,Metrics提供了更为丰富的五个基本度量类型,可在此基础上开发满足需求的监控指标。
-
应用程序关键事件检测
-
检测数据持久化存储并能够多维度查询
应用程序向APM发送的采集数据,通常都是格式化数据,为了实现节约存储空间、计时查询,通常使用时间序列数据库存储采集数据。采集数据能够利用Grafana展示平台等进行多维度的数据展示。
-
服务调用跟踪
大型系统中每次请求往往都由若干个独立的服务调用组成,一次从上游到下游的调用被称为一次Trace,为了监控程序性能,需要知道每个独立服务的执行时间以及网络通信开销时间,Google曾经发表过一个介绍其内部实现Dapper的论文(强烈建议大家有空看一下,该论文成为APM管理的思想精髓),Twitter参照此论文实现了一个名为Zipkin的服务调用追中系统并已开源。
-
监控告警
当采集到应用程序的性能数据后,除了人为主动的在系统上查看之外,另一个主要的使用功能点就是,监控系统根据设定的报警规则主动报警。实现触发告警有多种方法,常见的方法有:周期性主动轮询采集到的性能数据,并且根据报警规则,进行报警处理;除此之外,通过流式计算方法也可以进行报警处理。
4. 开源APM管理工具
-
PinPoint
韩国开源的一个功能完备的APM系统,支持JVM性能数据采集、服务Trace、告警等功能。它具有应用程序无侵入的应用特性。
-
ZipKin
ZipKin是Twitter开源的Trace工具,通过Java程序中引入客户端,可隐式拦截Http、Thrift等形式服务调用。通过Http、Kafka、Scribe等方式同步监控数据到服务端,ZipKin带有Web UI,但没有告警功能。
-
SkyWalking
Skywalking 是一个开源APM系统,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计。
-
Prometheus
Prometheus从官方介绍来说,他是一个开源的系统监控和报警工具,最初由SoundCloud推出。自2012成立以来,许多公司和组织都采用了Prometheus,项目有一个非常活跃的开发者和用户社区。它是一个独立的开源项目,并独立于任何公司。
-
CAT
CAT是美团点评开源的功能完备的APM系统,支持JVM性能数据采集、服务跟踪、告警等功能,但需要写监控代码。
-
Hawkular
Hawkular是一个功能完备的APM系统,应用程序中嵌入Hawkular客户端,主动将采集数据通过Http或者Kafka传递给Hawkular。Hawkular支持JVM性能数据采集、服务Trace、告警等功能。其中JVM性能数据采集使用JMX,服务Trace使用Zipkin客户端。
大多数企业希望有一个功能完善的APM系统具有JVM性能监控、服务调用追中、监控告警功能,CAT、PinPoint、SkyWalking、Hawkular相对来讲功能更为完备,推荐企业使用。