开箱即用的性能分析工具pinpoint
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开箱即用的性能分析工具pinpoint相关的知识,希望对你有一定的参考价值。
参考技术A pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控,属于分布式调用链监控组件。它主要的特点是开箱即用、完备的Web界面,对性能影响较小,无侵入式安装探针,小团队懒人的必备佳品。
官网:https://github.com/naver/pinpoint
监控截图如下:
服务器端主要分为三部分:
1.pinpoint-collector.war 控制器,用于接受各客户端传回来的数据,保存在Hbase里。需要部署在中间件(比如tomcat)中
2.pinpoint-web.war 监控界面,即上图这个还不错的Web界面。需要部署在中间件(比如tomcat)中
3.Habse数据库 ,用于存储数据
客户端pinpoint-agent,其实就是一个jar包,主要是放在待监控的目标机器上,随待监控的jvm启动即可。支持tomcat、jboss、spring boot.
以tomcat为例:只需要在tomcat的catalina.sh中加入以下代码即可
安装部署都比较简单,不赘述,参考官网即可
https://github.com/naver/pinpoint/blob/1.7.3/doc/installation.md
注意事项
pinpoint-collector对外开放的三个端口9994\9995\9996,主要用于从agent处获取数据,其中9994为tcp协议,9995及9996均为udp协议,在生产环境开通网络权限时需要注意
还有就是pinpoint-agent并不是把所有的请求都会拦截发送到pinpoint-collector上,只是部分请求(大约20%),因此只能做性能分析告警用,不能作为全数据参考。
主流开源APM:Zipkin/Pinpoint/SkyWalking全面对比
链路追踪在很多公司已经有大量的实践,开源领域能够开箱即用的产品也不少,主流的包括Zipkin、Pinpoint、SkyWalking、CAT等,这里重点对比以下三种优秀的开源APM组件。
- Zipkin:由Twitter公司开放源代码的调用链分析系统,基于spring-cloud-sleuth得到广泛使用,非常轻量。
- Pinpoint:由韩国Naver研发团队开源,专注于链路分析和应用性能监控系统,采用Java语言编写,埋点无侵入,稳定且易用。
- SkyWalking:国产的优秀APM组件,专注于链路和性能监控,埋点无侵入,已加入Apache孵化器,本身也支持OpenTracing规范,是开源APM领域的后起之秀。
这里重点从探针的性能、Collector的可扩展性、调用链路分析、完整的应用拓扑、对于科技人员使用友好程度(部署安装、埋点接入、使用管理)几个方面来进行对比。
1、探针性能
探针的性能是比较关键的指标,毕竟作为公共组件,如果启用链路监控后导致吞吐量大幅下降,这不仅不能被接受,甚至可能造成生产事件。因此在选择APM组件的过程中,必须要经过充分的性能对比测试。不过,要设计公平的性能测试环境来对比这三款方案也并不容易,探针性能与被接入的应用系统自身性能、高吞吐高负载场景、系统间调用关系的复杂度、探针采样频率,甚至Web应用服务器的自身性能都有密切关系,都可能对测试指标造成影响。
从性能测试数据来看,在三种链路监控组件中,SkyWalking的探针对应用系统吞吐量的影响最小,Zipkin居中,Pinpoint的影响最为明显,高峰时甚至可能使性能下降超过10%;同时,启用探针之后,对被接入主机的CPU和内存方面也均会产生一定的性能开销,Zipkin的性能开销最为明显,Pinpoint和SkyWalking则相对较低。综合对比的话,SkyWalking的表现无疑最优。
2、Collector扩展性
Collector是链路工具收集探针或应用埋点时发送的各类数据的关键服务模块,Collector能否水平扩展决定了该链路追踪工具能否支撑大规模服务器集群。
- Zipkin:Agent与服务端之间通过HTTP或消息队列进行通信。推荐基于消息队列异步方式通信,有利于提高吞吐量。
- SkyWalking:Collector支持单机和集群两种模式。Collector与Agent之间使用gRPC协议进行通信。
- Pinpoint:Pinpoint的Collector同样支持单机或集群部署。Pinpoint Agent通过thrift通信框架,发送链路信息到Collector。
3、调用链路数据分析
对调用链路采集到的数据分析越全面,粒度越细越好,如果能够实现代码行级别的数据采集和分析,那么定位故障和性能瓶颈时也更加具体。
- Zipkin的链路监控粒度比较粗(相比较而言),调用链展示只到接口级别。
- SkyWalking支持主流的各类中间件、开发框架、数据库及消息中间件,不过调用链路分析只能说比Zipkin稍稍完备,粒度仍然不够细。SkyWalking社区非常活跃,版本迭代极为迅速,相信随着其版本的快速更迭,功能也会越来越强。
- Pinpoint是这几款APM组件中调用分析较为完备的一款。Pinpoint提供了代码级别的追踪粒度,不仅对每个方法进行记录,甚至对执行的SQL的耗时都做了记录。当然,这有利也有弊,追踪的粒度越细,性能开销也有可能越大,尽管可以通过设置采样率来减少性能方面的影响,但采样率低的话,请求又可能追踪不到,这中间如何平衡,就需要用户自己仔细考量了。不过,若单纯从链路追踪粒度和数据分析方面来看,目前Pinpoint完胜另外两款。
4、完整的应用拓扑
自动分析应用拓扑,能够帮助梳理应用系统之间的调用关系。Zipkin、Pinpoint和SkyWalking这3款APM组件都能实现完整的链路拓扑展示,相对来说,Zipkin展示的拓扑结构主要展示服务与服务之间的调用关系,Pinpoint和SkyWalking的调用拓扑则展示得更加丰富,除了服务与服务之间的调用关系外,过程中涉及的中间件(如DB/Redis)也都有体现。
5、使用友好
不管是Zipkin、SkyWalking,还是Pinpoint,都由4个模块组成。其中SkyWalking和Pinpoint都由Collector、Storage、Agent和Web 4个模块组成。Zipkin没有提供Agent,而是多了一个Query模块,负责查询Storage中存储的数据。
从接入方式来看,SkyWalking和Pinpoint均基于ASM字节码增强技术实现调用拦截和数据收集,可以做到真正的代码无侵入,对代码的侵入性非常低,对开发人员可以实现完全透明,只需要在启动服务器时添加一些参数,就可以完成探针的部署;Zipkin的链路追踪是基于spring-cloud-sleuth,只提供了基本的操作API,如果需要与框架或者项目集成的话,就需要手动添加配置文件或增加代码。
对于探针的扩展性,Zipkin目前能够支持包括Java、Scala、Node、Go、Python、Ruby和C#等主流开发语言和框架。Pinpoint只支持Java和PHP,而SkyWalking目前已支持多种语言,包括Java、C#、PHP、Node.js、Go等,如果企业的系统服务涉及多个开发语言,那么Zipkin和SkyWalking都会是不错的选择。
在数据存储方面,Zipkin基于Cassandra,也能够支持ElasticSearch和MySQL,Pinpoint的后端存储基于HBase(引申出一个问题,选择Pinpoint要有能力运维一套HBase集群),SkyWalking支持的存储很多,包括ElasticSearch、MySQL、TiDB等。
在追踪数据查询方面,Pinpoint无形中也受到HBase自身所能支持查询的限制(HBase只能支持3种方式查询:RowKey精确查找,SCAN范围查找,全表扫描),至今仍不能支持指定TraceID的查询,只支持在视窗界面通过鼠标圈定时间范围后,查看这个范围内的Trace信息。而Zipkin和SkyWalking可以支持多个维度任意组合查询,如时间范围、服务名、Trace状态、请求路径、TraceID等。
Zipkin和SkyWalking都是标配jar包,部署和启动都非常简单,有Java环境即可,而Pinpoint的Collector和Web模块都是war包,运行依赖Web容器。
在UI可视化功能方面,Pinpoint具备完整的链路追踪与应用性能监控解决方案,Web界面功能较为强大;而Zipkin虽说也提供了UI界面,但其功能不及Pinpoint。如果是直接比较原生UI界面功能的话,当前Pinpoint要比SkyWalking和Zipkin稍微好些,尤其是服务调用之间的拓扑图展示。不过如果企业内部开发资源较为丰富的话,Zipkin和SkyWalking都能够进行定制性的二次开发,从而扩展其UI功能。
在监控和告警方面,Zipkin的链路追踪只到接口级,目前也不支持告警。而Pinpoint和SkyWalking都是代码级,且均支持自定义告警规则。不过,Pinpoint配置告警时的用户、用户组信息以及告警规则都保存在MySQL数据库中,如果配置告警规则的话,既要维护HBase又要维护MySQL,维护成本会升高。SkyWalking在config/alarm-settings.xml中配置告警规则,无须其他组件支持,同时告警规则也支持自定义。
总的来说,在易用性和代码侵入方面,Pinpoint和SkyWalking要优于Zipkin;同时Pinpoint相比后起之秀SkyWalking,在稳定性和易用性方面,目前来看仍具优势;在性能方面,Pinpoint明显处于下方,不过整体损耗尚可接受。SkyWalking和Pinpoint都是优秀的调用链追踪+APM监控系统,能够覆盖大部分使用场景,让研发和运维能够实时或准实时地了解应用系统的运行情况。对于二次开发实力强的企业,可以综合对比各方的可扩展性、接入效率、二次开发等方面,选择一个更能满足自己定制需求的全链路监控工具。
以上是关于开箱即用的性能分析工具pinpoint的主要内容,如果未能解决你的问题,请参考以下文章
工作随笔——pinpoint分布式性能监控工具(docker安装)