pinpoint是什么?
PP是一个开源的 APM (Application Performance Management/应用性能管理)工具,一个分布式事务跟踪系统的平台,是基于Google Dapper的一种实现,作用于基于java的大规模分布式系统,通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。
为什么需要pinpoint?
为什么需要APM?
和如今相比, 过去的因特网的用户数量相对较小,而因特网服务的架构也没那么复杂。web服务通常使用两层(web 服务器和数据库)或三层(web服务器,应用服务器和数据库)架构。然而在如今,随着互联网的成长,需要支持大量的并发连接,并且需要将功能和服务有机结合,导致更加复杂的软件栈组合。更确切地说,比三层层次更多的n层架构变得更加普遍。SOA或者微服务架构成为现实。
系统的复杂度因此提升。 系统越复杂,越难解决问题,例如系统失败或者性能问题。在三层架构中找到解决方案还不是太难,仅仅需要分析3个组件比如web服务器,应用服务器和数据库,而服务器数量也不多。但是,如果问题发生在n层架构中,就需要调查大量的组件和服务器。另一个问题是仅仅分析单个组件很难看到大局;当发生一个低可见度的问题时,系统复杂度越高,就需要更长的时间来查找原因。最糟糕的是,某些情况下我们甚至可能无法查找出来。
所以我们就需要一个APM来解决这个痛点,无论系统多么复杂,都希望能够时刻了解调用链路中每一个环节的性能损耗,并且粒度越小越好。
pinpoint的特点
- 分布式事务跟踪,跟踪跨分布式应用的消息
- 自动检测应用拓扑,帮助你搞清楚应用的架构
- 水平扩展以便支持大规模服务器集群
- 提供代码级别的可见性以便轻松定位失败点和瓶颈
- 使用字节码增强技术,添加新功能而无需修改代码
pinpoint的结构
- Pinpoint-Collector:收集器,收集各种性能数据
- Pinpoint-Agent:探针,与应用服务器(例如tomcat)关联,采集性能数据,传给Collector。
- Pinpoint-Web:UI,展示性能数据
- HBase Storage:存储,保存性能数据
pinpoint-Web概述
分析模块之间的调用流并提供清晰的视图来定位问题区域和潜在瓶颈。 视图主要包括以下几部分:
-
服务器地图(ServerMap)
通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点会展示这个模块的详情,比如它当前的状态和请求数量。
-
实时活动线程图表(Realtime Active Thread Chart)
实时监控应用内部的活动线程。
-
请求/应答分布图表(Request/Response Scatter Chart)
长期可视化请求数量和应答模式来定位潜在问题。通过在图表上拉拽可以选择请求查看更多的详细信息。
-
调用栈(CallStack)
在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点。
-
巡查(Inspector)
查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数。
pinpoint支持的模块
- JDK 6+
- Tomcat 6/7/8, Jetty 8/9, JBoss EAP 6, Resin 4, Websphere 6/7/8
- Spring, Spring Boot (Embedded Tomcat, Jetty)
- Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient
- Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER
- MySQL, Oracle, MSSQL, CUBRID,POSTGRESQL, MARIA
- Arcus, Memcached, Redis, CASSANDRA
- iBATIS, MyBatis
- DBCP, DBCP2, HIKARICP
- gson, Jackson, Json Lib
- log4j, Logback
从这可以看出,PP目前只支持Java应用。PP的探针,只能在Java应用的以上模块中生效,其他模块的性能数据无法收集。像rabbitmq、hibernate等都不可用。
pinpoint技术概述
参考资料
pinpoint源码:github.com/naver/pinpo…
pinpoint官网: naver.github.io/pinpoint/in…
pinpoint安装部署:www.cnblogs.com/yyhh/p/6106…
Google Dapper论文:bigbully.github.io/Dapper-tran…
pinpoint技术概述:github.com/skyao/learn…
pinpoint学习笔记:skyao.gitbooks.io/learning-pi…