APM工具可以监控接口的每个逻辑的耗时情形,该接口调用了哪些做事以及调用频次,以及系统的运行状况,包括要求量、失落败量、成功量,以及失落败要求对应的接口等信息。这些信息可以帮助我们创造并优化性能瓶颈、定位问题,进而提高系统稳定性,市情上的APM工具:
CAT(开源)
由海内美团点评开源的,基于 Java 措辞开拓,目前供应 Java、C/C++、Node.js、Python、Go 等措辞的客户端,监控数据会全量统计。海内很多公司在用,例如美团点评、携程、拼多多等。CAT 须要开拓职员手动在运用程序中埋点,对代码侵入性比较强。

Zipkin(开源)
由 Twitter 公司开拓并开源,Java 措辞实现。侵入性相对付 CAT 要低一点,须要对web.xml 等干系配置文件进行修正,但依然对系统有一定的侵入性。Zipkin 可以轻松与 Spring Cloud 进行集成,也是 Spring Cloud 推举的 APM 系统。
Pinpoint(开源)
韩国团队开源的 APM 产品,利用了字节码增强技能,只须要在启动时添加启动参数即可实现 APM 功能,对代码无侵入。目前支持 Java 和 PHP 措辞,底层采取 HBase 来存储数据,探针网络的数据粒度非常细,但性能损耗较大,因其涌现的韶光较长,完成度也很高,文档也较为丰富,运用的公司较多。
SkyWalking(开源)
国人开源的产品,2019 年 4 月 17 日 SkyWalking 从 Apache 基金会的孵化器毕业成为顶级项目。目前 SkyWalking 支持 Java、.Net、Node.js 等探针,数据存储支持MySQL、ElasticSearch等。
还有很多不开源的 APM 系统,例如,淘宝鹰眼、Google Dapper 等等。
下面详细先容SkyWalking和Pinpoint两款产品
二、SkywalkingSkywalking是一个可不雅观测性剖析平台和运用性能管理系统,它也是基于OpenTracing规范、开源的AMP系统。Skywalking供应分布式跟踪、做事网格遥测剖析、度量聚合和可视化一体化办理方案。支持Java, .Net Core, PHP, NodeJS, Golang, LUA, c++代理,支持Istio +特使做事网格。
我们在学习Skywalking之前,可以先访问官方供应的掌握台演示
演示地址:http://demo.skywalking.apache.org/
账号:skywalking 密码:skywalking
核心功能
做事、做事实例、端点指标剖析。做事拓扑图剖析做事、做事实例和端点(Endpoint)SLA 剖析慢查询检测告警特点
多措辞自动探针,支持 Java、.NET Code 等多种措辞。为多种开源项目供应了插件,为 Tomcat、 HttpClient、Spring、RabbitMQ、MySQL 等常见根本举动步伐和组件供应了自动探针。微内核 + 插件的架构,存储、集群管理、利用插件凑集都可以进行自由选择。支持告警。精良的可视化效果。三、PinpointPinpoint是一款全链路剖析工具,供应了无侵入式的调用链监控、方法实行详情查看、运用状态信息监控等功能。
做事拓扑图:对全体系统中运用的调用关系进行了可视化的展示,单击某个做事节点,可以显示该节点的详细信息,比如当前节点状态、要求数量等
要求相应散点图:以韶光维度进行要求计数和相应韶光的展示,拖动图表可以选择对应的要求查看实行的详细情形。
要求调用栈查看:对分布式环境中每个要求供应了代码维度的可见性,可以在页面中查看要求针对到代码维度的实行详情,帮助查找要求的瓶颈和故障缘故原由。
运用状态、机器状态检讨:通过这个功能可以查看干系运用程序的其他的一些详细信息,比如CPU利用情形,内存状态、垃圾网络状态,TPS和JVM信息等参数。
架构组成
Pinpoint 紧张由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和 Web UI。
Agent组件:用于网络运用端监控数据,无侵入式,只须要在启动命令中加入部分参数即可
Collector组件:数据网络模块,吸收Agent发送过来的监控数据,并存储到HBase
WebUI:监控展示模块,展示系统调用关系、调用详情、运用状态等,并支持报警等功能
安装支配
#克隆官方供应的docker gitgit clone https://github.com/pinpoint-apm/pinpoint-docker.gitcd pinpoint-dockerdocker-compose pull && docker-compose up -d#flink页面: http://localhost:8081#pipoint页面:http://localhost:8080#quickapp页面:http://localhost:8085
四、Skywalking和Pinpoint比拟
Skywalking的不敷:
针对单个运用的要求热力争,只能看到要求数量,看不到相应韶光分布。运用界面,不能直不雅观看到韶光段内的要求总数量及缺点数量。JVM的监控信息,SW没有PP全面。调用链信息,SW默认只显示入口和组件(如MySQL)调用处的信息,而PP还会显示SpringBean方法的调用信息,更丰富实用,当然SW也可以开启更详细的信息,但是会显示Bean内部方法的所有调用,显得冗余(例如 A调B调C,显示B和C被调用的入口方法就可以了,不用显示B调用自己内部方法的过程)。SW更新快,BUG较多,值得优化和改进的地方大概多,虽然功能强,但是用起来不一定顺手和实用,还须要韶光推敲和打磨。相对而言,PP功能成熟,功能虽然少,但是都比较经典,用起来比较顺手。SW调用链里面DB类型只能看到SQL,看不到参数化SQL的传值,而PP可以。PP支持实时监控、页面实时刷新,而SW不支持。Pinpoint的不敷:
不支持异步实行的调用链追踪(比如多线程、MQ),而SW通过表明可以支持。功能比较少,例如短缺均匀相应、均匀吞吐量等数据,短缺慢做事的统计。调用链信息,可以扩展和丰富的程度,要低于SW(SW可以通过表明扩展)。其余:
对运用性能的影响,实测两者差不多,SW轻微好一些(吞吐量比PP大概高5%——我们做过单个span的性能测试,详细数据就不贴出来了)。实时告警关照,暂未测试,我个人希望有 做事非常、JVM非常、慢做事、高负载等的订阅和关照功能,然而貌似这两个APM都没有很直不雅观的展示出有这方面的能力。总的来说:
PP比较后起之秀SW,要更稳定、易用,而且并没有明显短处SW号称的异步调用链追踪(是有代码侵入性的),我认为PP只要稍加改进也可以支持小公司,推举用PP,等SW成熟之后再说吧有二次开拓实力的公司,需进一步比拟两者的可扩展性、二次开拓效率,选择一个更能知足自己定制需求的APM