APM简介
1、什么是APM
APM (应用性能管理) - Application Performance Management & Monitoring
在信息科学和系统控制领域,APM致力于监控和管理应用软件性能和可用性。
通过监测和诊断复杂应用程序的性能问题,来保证软件应用程序的良好运行(预期的服务)。
应用性能管理主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本(TCO)。
一个企业的关键业务应用的性能强大,可以提高竞争力,并取得商业成功,因此,加强应用性能管理(APM)可以产生巨大商业利益。
(京东VS淘宝VS腾讯商城)
APM的覆盖范围包括:终端用户体验,应用架构映射,应用事务的分析,深度应用诊断,和数据分析。
现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体系来做的。
通过跟踪请求的处理过程,来对应用系统在前后端处理、服务端调用的性能消耗进行跟踪。
关于Dapper的介绍可以看这个链接:http://bigbully.github.io/Dapper-translation/
2、apm的主要功能
1)监测企业关键应用性能
过去,企业的IT部门在测量系统性能时,一般重点测量为最终用户提供服务的硬件组件的利用率,如CPU利用率以及通过网络传输的字节数。虽然这种方法也提供了一些宝贵的信息,但却忽视了最重要的因素--最终用户的响应时间。现在通过事务处理过程监测、模拟等手段可真实测量用户响应时间,此外还可以报告谁正在使用某一应用、该应用的使用频率以及用户所进行的事务处理过程是否成功完成。
2)快速定位应用系统性能故障
通过对应用系统各种组件(数据库、中间件)的监测,迅速定位系统故障,如发生Oracle数据库死锁等问题。
3)优化系统性能
精确分析系统各个组件占用系统资源情况,中间件、数据库执行效率,根据应用系统性能要求提出专家建议,保证应用在整个寿命周期内使用的系统资源要求最少,节约TCO。
新一代APM:让整个IT团队参与应用性能监控。
好的APM可以让IT组织中原本孤立的各个方面集中在一起,比如自动生成准确的业务应用系统组件关系视图、关系视图实时更新、准确掌握应用访问逻辑关系等。APM工具可以帮助那些原本一直局限于监控自身领域的管理员,使他们成长为理解应用及其支持基础架构的更有战略价值的性能管理专业人员。
3、常见apm产品介绍
APM产品包括商业产品、开源产品,琳琅满目,非常多,这里就介绍几个常见的,应用比较广泛,广受好评的。
1)Pinpoint
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/
2)SkyWalking
github地址:https://github.com/wu-sheng/sky-walking
wu-sheng/sky-walking
这是国内一位叫吴晟的兄弟开源的,也是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统,在github上也有600+颗星了。
功能相对pinpoint还是稍弱一些,插件还没那么丰富。
3)Zipkin
官网: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
4)CAT (大众点评)
github地址:https://github.com/dianping/cat
GitHub - dianping/cat: Central Application Tracking
这个是大众点评开源出来的,实现的功能也还是蛮丰富的,国内也有一些公司在用了。
不过他实现跟踪的手段,是要在代码里硬编码写一些“埋点”,也就是侵入式的。
这样做有利有弊,好处是可以在自己需要的地方加埋点,比较有针对性;
坏处是必须改动现有系统,很多开发团队不愿意。
5)Xhprof/Xhgui
这两个工具的组合,是针对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:因为需要修改源码设置埋点,因此基本不太可能由运维人员单独完成,而必须由开发人员的深度参与了,而很多开发人员是比较抗拒在代码中加入这些东西滴;
APM简介的更多相关文章
- APM 原理与框架选型
发些存稿:) 0. APM简介 随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂: 不同的服务可能由不同的团队开发.甚至可能使用不同的编程语言来实现 服务有可能 ...
- webrtc中APM(AudioProcessing module)的使用2
这个其实就是从Audio_processing.h中拿出来的. APM should be placed in the signal chain as close to the audio hardw ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- sharding-jdbc源码学习(一)简介
背景 对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级甚至是亿级,并且数据库面临着极高的并发访问.采用Master-Slave复制模式的MySQL架构,只能够对数据库的读进行扩展,而对数据 ...
- 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking
目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...
- 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint
目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...
- 【APM】Pinpoint 安装部署(一)
Pinpoint简介 Pinpoint是用Java / PHP编写的大规模分布式系统的APM(应用程序性能管理)工具.受Dapper的启发,Pinpoint提供了一种解决方案,可通过跟踪跨分布式应用程 ...
- 全链路跟踪skywalking简介
该文章主要包括以下内容: skywalking的简介 skywalking的使用,支持多种调用中间件(httpclent,springmvc,dubbo,mysql等等) skywalking的tra ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
笔记 ============================================= SpringCloud课程笔记.txt 第一章 课程介绍和学习路线 1.微服务架构SpringClou ...
随机推荐
- MyBatis源码探索
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的.SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获 ...
- 创建1M-1T的虚拟磁盘(内存盘)——使用破解版 Primo Ramdisk Server Edition v5.6.0
破解版 Primo Ramdisk Server Edition v5.6.0下载: https://pan.lanzou.com/i0sgcne 步骤: 下载并解压后安装“Primo.Ramdisk ...
- VMware NAT端口映射外网访问虚拟机linux可能会出现的错误总结
博主因为做实验报告的缘故,尝试以NAT的方式从外网远程连接到虚拟机的linux操作系统:https://www.cnblogs.com/jluzhsai/p/3656760.html,本文主要举出在此 ...
- javaweb基础(30)_EL函数库
一.EL函数库介绍 由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用. 这些EL函数在JSTL开发包中进行描述,因此在JSP页 ...
- Luogu [P1958] 上学路线_NOI导刊2009普及(6)
上学路线_NOI导刊2009普及(6) 题目详见:上学路线_NOI导刊2009普及(6) 这是一道基础的DFS(深搜)题,堪称模板,是新手练习搜索与回溯的好题选. 大致思路:从(1,1)开始搜索,每次 ...
- C#继承机制 继承与访问修饰符
继承与访问修饰符 访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性.类的继承中有四个访问修饰符: public protected internal private.使用这些访问修饰符可指定 ...
- head与body(新手向)
网页文档包含了页头(head)与主体(body) 页头 -是对该网页文档进行描绘的主体信息. -至少含有title与meta. meta描述网页的特征,比如字符编码,平时广泛用的utf-8.且meta ...
- 【算法】Fibonacci(斐波那契数列)相关问题
一.列出Fibonacci数列的前N个数 using System; using System.Collections.Generic; using System.Linq; using System ...
- C/C++程序基础 (七)继承和多态
多态 编译时多态:重载 运行时多态:虚函数.根据运行时的类别获取正确的虚指针,从而定位正确的虚函数. 虚函数 虚函数指针:指向虚函数表.多重继承则含有多个基类的虚函数指针. 虚函数表:函数指针集合.普 ...
- ElasticSearch High Level REST API【5】使用模板搜索
ElasticSearch Rest高级API 提供了多种搜索方式,除了前面讲到的search查询,ElasticSearch 还提供了通过模板搜索查询.我个人比较喜欢这种方式. 我们可以通过脚本预选 ...