APM (应用性能管理) - Application Performance Management & Monitoring
在信息科学和系统控制领域,APM致力于监控和管理应用软件性能和可用性。
经过监测和诊断复杂应用程序的性能问题,来保证软件应用程序的良好运行(预期的服务)。
应用性能管理主要指对企业的关键业务应用进行监测、优化,提升企业应用的可靠性和质量,保证用户获得良好的服务,下降IT总拥有成本(TCO)。
一个企业的关键业务应用的性能强大,能够提升竞争力,并取得商业成功,所以,增强应用性能管理(APM)能够产生巨大商业利益。
(京东VS淘宝VS腾讯商城)
APM的覆盖范围包括:终端用户体验,应用架构映射,应用事务的分析,深度应用诊断,和数据分析。
现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体系来作的。
经过跟踪请求的处理过程,来对应用系统在先后端处理、服务端调用的性能消耗进行跟踪。
关于Dapper的介绍能够看这个连接:http://bigbully.github.io/Dapper-translation/java
过去,企业的IT部门在测量系统性能时,通常重点测量为最终用户提供服务的硬件组件的利用率,如CPU利用率以及经过网络传输的字节数。虽然这种方法也提供了一些宝贵的信息,但却忽视了最重要的因素--最终用户的响应时间。如今经过事务处理过程监测、模拟等手段可真实测量用户响应时间,此外还能够报告谁正在使用某一应用、该应用的使用频率以及用户所进行的事务处理过程是否成功完成。python
经过对应用系统各类组件(数据库、中间件)的监测,迅速定位系统故障,如发生Oracle数据库死锁等问题。git
精确分析系统各个组件占用系统资源状况,中间件、数据库执行效率,根据应用系统性能要求提出专家建议,保证应用在整个寿命周期内使用的系统资源要求最少,节约TCO。
新一代APM:让整个IT团队参与应用性能监控。
好的APM可让IT组织中本来孤立的各个方面集中在一块儿,好比自动生成准确的业务应用系统组件关系视图、关系视图实时更新、准确掌握应用访问逻辑关系等。APM工具能够帮助那些本来一直局限于监控自身领域的管理员,使他们成长为理解应用及其支持基础架构的更有战略价值的性能管理专业人员。github
APM产品包括商业产品、开源产品,琳琅满目,很是多,这里就介绍几个常见的,应用比较普遍,广受好评的。web
github地址:https://github.com/naver/pinpoint
Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
Pinpoint是一个用Java编写的大规模分布式开源APM工具。
这个是一个韩国团队开源出来的,经过JavaAgent的机制来作字节码代码植入,实现加入traceid和抓取性能数据的目的。
NewRelic、Oneapm之类的工具在java平台上的性能分析也是相似的机制。
文档:
http://www.herohuang.com/2017/03/01/apm-pinpoint/spring
github地址:https://github.com/wu-sheng/sky-walking
wu-sheng/sky-walking
这是国内一位叫吴晟的兄弟开源的,也是一个对JAVA分布式应用程序集群的业务运行状况进行追踪、告警和分析的系统,在github上也有600+颗星了。
功能相对pinpoint仍是稍弱一些,插件还没那么丰富。数据库
官网:http://zipkin.io/
OpenZipkin · A distributed tracing system
openzipkin/zipkin:GitHub:https://github.com/openzipkin/zipkin
这个是twitter开源出来的,也是参考Dapper的体系来作的。
Zipkin的java应用端是经过一个叫Brave的组件来实现对应用内部的性能分析数据采集。
Brave的github地址:https://github.com/openzipkin/brave
这个组件经过实现一系列的java拦截器,来作到对http/servlet请求、数据库访问的调用过程跟踪。
而后经过在spring之类的配置文件里加入这些拦截器,完成对java应用的性能数据采集。
在线安装
wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'
java -jar zipkin.jar
java应用:https://github.com/spring-cloud/spring-cloud-sleuth
python支持:https://github.com/Yelp/py_zipkin后端
github地址:https://github.com/dianping/cat
GitHub - dianping/cat: Central Application Tracking
这个是大众点评开源出来的,实现的功能也仍是蛮丰富的,国内也有一些公司在用了。
不过他实现跟踪的手段,是要在代码里硬编码写一些“埋点”,也就是侵入式的。
这样作有利有弊,好处是能够在本身须要的地方加埋点,比较有针对性;
坏处是必须改动现有系统,不少开发团队不肯意。网络
这两个工具的组合,是针对PHP应用提供APM能力的工具,也是非侵入式的。
Xhprof github地址:https://github.com/preinheimer/xhprof (Facebook开源出来的)
GitHub - preinheimer/xhprof: XHGUI is a GUI for the XHProf PHP extension, using a database backend, and pretty graphs to make it easy to use and interpret.
Xhgui github地址:https://github.com/perftools/xhgui
GitHub - perftools/xhgui: A graphical interface for XHProf data built on MongoDB架构
前面三个工具里面,推荐的顺序依次是: Pinpoint -> Zipkin -> CAT 。缘由很简单,就是这三个工具对于程序源代码和配置文件的侵入性,是依次递增的:Pinpoint:基本不用修改源码和配置文件,只要在启动命令里指定java agent参数便可,对于运维人员来说最为方便;Zipkin:须要对Spring、web.xml之类的配置文件作修改,相对麻烦一些;CAT:由于须要修改源码设置埋点,所以基本不太可能由运维人员单独完成,而必须由开发人员的深度参与了,而不少开发人员是比较抗拒在代码中加入这些东西滴;