Pinpoint是一款开源的APM工具,用于分析大型分布式系统,提供解决方案来处理海量跟踪数据,主要面向基于tomcat的Java 应用。
一.Pinpoint的架构
pinpoint 由以下几部分组成
1.Web服务器
2.Collector收集器
3.Agent
4.HBase数据库
Pinpoint的工作原理是这样:在需要监控的应用主机上安装Pinpoint的agent,agent就是探针,主要功能是采集数据并将其传送到Collector收集器。可以在多台主机,多个应用部署探针,但是Pinpoint的探针只有一种,就是Java类型的agent。
Collector收集器在收到agent传送来的数据后,将监控数据写入HBase数据库中,它的主要功能就是接收数据,起到转发的作用。
HBase是一个分布式的、面向列的开源数据库,用于存储系统的监控数据。Pinpoint Web 服务器从中读取数据,Pinpoint的web UI与用户交互,接收来自用户的请求,根据请求将HBase中的数据进行处理,展示给用户
二.Pinpoint的安装部署
用户首先需要部署JDK1.8,HBase数据库,Pinpoint Collector,Pinpoint Web,Pinpoint Agent,在部署Agent时,需要在被监控的应用所在的主机下载agent,并修改agent文件pinpoint.config文件,修改配置文件profiler.collector.ip=xx.xx.xx.xx,这里填入collector的ip地址,确保指向该地址的9994端口与本机是连通的。
启动监控需要在tomcat的catalina.sh文件中添加三行参数:
CATALINA_OPTS="$ CATALINA_OPTS -javaagent:/xx/pinpoint-agent-1.6.1/pinpoint-bootstrap-1.6.1.jar"
CATALINA_OPTS="$ CATALINA_OPTS -Dpinpoint.applicationName=xxx"
CATALINA_OPTS="$ CATALINA_OPTS -Dpinpoint.agentId=xxx"
其中,第一个路径指向pinpoint-bootstrap的jar包位置(在下载的agent文件中),第二个pinpoint.applicationName表示监控的目标应用的名称,第三 个pinpoint.agentId表示监控目标应用的ID,其中pinpoint.applicationName可以不唯一,pinpoint.agentId要求唯一,如果 pinpoint.applicationName相同但pinpoint.agentId不同,则表示的是同一个应用的集群。
如果是Spring Boot的应用,那就不需要配置tomcat,在运行jar包时把这三行参数加入启动命令即可,例如:
nohup java -javaagent: /xx/pinpoint-agent-1.6.1/pinpoint-bootstrap-1.6.1.jar -Dpinpoint.applicationName=xxx -Dpinpoint.agentId=xxx –jar myapp.jar > log.log &
这样启动java进程后,pinpoint的agent就可以开始收集数据了
Collector收集器和Web服务器都是tomcat服务器,将原生的tomcat修改了部分配置,这两个组件的启动方法都是./startup.sh 。用户在安装时需要修改tomcat 文件conf路径下 server.xml的进程端口号以避免端口被占用
总结: Pinpoint的基础架构与Dynatrace以前的一款产品Appmon有不少共同点,整体架构简洁明了,缺点是只有java类型的agent,没有.NET和Web server的agent。在部署过程中,需要修改很多配置文件,安装难度要比Dynatrace难很多
三. Pinpoint的功能
这是Pinpoint的主页,中间是一个拓扑图,展示被监控的节点与访问用户的请求数。
顶部为一个时间轴,可以选择过去时间段进行数据筛选,展示在屏幕上,update按钮上有个勾,勾选上页面会自动刷新,可以选择时间频率,10s,20s,30s,1min刷新一次。
左上角的选择框是用于选择不同的应用group,如果要将多个监控节点放入同一个group中,就在部署agent时调整参数-Dpinpoint.applicationName=xxx。
链路的层级,Pinpoint前后最多支持4层,而Dynatrace没有层数的限制,可以从首到尾追踪一条完整的链路。
在首页的右侧,是三个图表。第一个图表是反映在选中的时间段内用户请求和响应时间的分布情况。第二个图表是总结所有的请求的响应时间分布。第三个图表是用户动作加载时间分布。用鼠标在图表上截取一段时间,就可以深入分析用户在此时间段的请求
例如:我们选取一个时间段进行深入分析
此页面显示此时间段内所有的用户请求,包括请求的时间,访问ip,URL,以及该web请求调用了哪些方法,以及所消耗的时间,点击每个请求的蓝色方块(mixed view),可以看到每笔请求消耗资源的状况(Heap,PermGen,cpuload)
Pinpoint的请求并不是用户实际操作的请求数,某个用户动作产生的所有请求,例如加载js,css文件,这些一个用户操作所产生的多个请求都会独立统计。所以pinpoint统计出的用户请求数远远大于用户真实操作数量
四.Agent的详细信息
Pinpoint无法监控主机的基础设施指标(例如CPU,内存,网络,磁盘使用率)Dynatrace只需要部署一个agent就可以监控该主机上的所有应用,并且实时监控主机的硬件指标,pinpoint只能监控被监控进程tomcat的资源使用情况,例如:Heap Usage,PermGen Usage,JVM/System Cpu Usage,Transactions Per Second,Active Thread,Data Source这几项
支持的技术:
根据pinpoint的github给出来的资料,pinpoint支持以下技术
JDK 6+
Tomcat 6/7/8/9, Jetty 8/9, JBoss EAP 6/7, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5, Weblogic 10/11g/12c, Undertow
Spring, Spring Boot (Embedded Tomcat, Jetty, Undertow), Spring asynchronous communication
Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient, Akka-http, Apache CXF
Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER, GRPC
ActiveMQ, RabbitMQ, Kafka
MySQL, Oracle, MSSQL(jtds), CUBRID, POSTGRESQL, MARIA
Arcus, Memcached, Redis(Jedis, Lettuce), CASSANDRA, MongoDB, Hbase
iBATIS, MyBatis
DBCP, DBCP2, HIKARICP, DRUID
gson, Jackson, Json Lib, Fastjson
log4j, Logback