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 ...
随机推荐
- zabbix 监控项
监控项 概述 监控项是从主机收集的数据信息. 配置主机后,你需要添加一些监控项以开始获取实际数据. 一个监控项是一个独立的指标.快速添加多个监控项的一种方法是将一个预定义的模板附加到主机.然而,为了优 ...
- 判断一个点是否在多边形区域内--C算法
/*函数的输入:(1)当前点的坐标p(2)区域顶点数组pt[]:(3)顶点数nCount 输出: 在区域内返回TRUE,否则返回FALSE. Point类型是一个结构: struct Point { ...
- PHP重定向的三个方法
js的重定向方法:location.href=目标 url(如 https:www.baidu.com); php的重定向方法: header("location: https:www.ba ...
- LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
题意即求一个最小顶点覆盖. 对于没有孤立点的图G=(V,E),最大独立集+最小顶点覆盖= V.(往最大独立集加点) 问题可以变成求树上的最大独立集合. 每个结点的选择和其父节点选不选有关, dp(u, ...
- 运维如何延续自己的职业生涯--萧田国2017年GOPS深圳站演讲内容
正如 萧田国在2017年GOPS深圳站演讲所提及的,运维职业生涯规划,应该是T字型. 关于指导原则,正如腾讯好友@赵建春所言: 如果一个领域不能做到TOP,那就是一种伤害. 运维在编程.开发领域,能做 ...
- runtime运行时,类、对象、isa指针
先查看一段OC源码,关于类的定义: /// An opaque type that represents an Objective-C class. typedef struct objc_class ...
- js常见问题总结归纳
一.使用 typeof bar === "object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱? 首先typeof bar === "object ...
- Linux网络编程之"获取网络天气信息"
需求分析: 1.需要Linux c 网络编程基础, 2.需要了解 http 协议 3.需要天气信息相关api(可以从阿里云上购买,很便宜的!) 4.需要cJSON解析库(因为获取到的天气信息一般是用c ...
- python 用requests请求,报SSL:CERTIFICATE_VERIFY_FAILED错误
https://www.aliyun.com/jiaocheng/437481.html
- Linux企业生产环境用户权限集中管理项目方案案例
企业生产环境用户权限集中管理项目方案案例: 1 问题现状 当前我们公司里服务器上百台,各个服务器上的管理人员很多(开发+运维+架构+DBA+产品+市场),在大家登录使用Linux服务器时,不同职能的员 ...