当前位置 : 首页 » 文章分类 :  开发  »  Pinpoint

Pinpoint

Pinpoint 是用Java 编写的大型分布式系统的APM(应用性能管理)工具,或者称为调用链跟踪系统、分布式跟踪系统, 通过JavaAgent的机制来做字节码代码植入,追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据。
https://github.com/naver/pinpoint


Pinpoint

SpringBoot配置Pinpoint客户端代理

下载客户端代理 pinpoint-agent-1.8.5.tar.gz
https://github.com/naver/pinpoint/releases

新建目录:mkdir pp-agent
将 pinpoint-agent-1.6.0-SNAPSHOT.tar.gz 拷贝到 pp-agent 目录并解压
解压后里面有个配置文件 pinpoint.config, 配置项 profiler.collector.ip=127.0.0.1 这是指 pinpoint-collector 收集服务器的地址,如果是同一服务器,则不用修改。其它默认。

PP-Agent 作为一个Java探针attach在一个应用程序上(如Tomcat)。
要连接Agent,在运行应用程序时,需要将 $AGENT_PATH/pinpoint-bootstrap-$VERSION.jar 传递给 -javaagent JVM参数:
-javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar
此外,PP-Agent需要2个命令行参数,以便在分布式系统中标识它自身:
-Dpinpoint.applicationName applicationName表示同一种应用,整体长度不超过20个字符。例如:myservice-test
-Dpinpoint.agentId 唯一标识正在运行Agent的应用程序实例。同一个应用的不同实例应该使用不同的agentId,相同的applicationName。整体长度不超过20个字符。例如:myservice-test-001
agentId必须是全局唯一的才能标识应用程序实例。并且共享同一applicationName的所有应用程序都被视为单个服务的多个实例。

1、SpringBoot Example
在java -jar 的启动命令中加入 -javaagent, -Dpinpoint.agentId, -Dpinpoint.applicationName
例:

nohup java -javaagent:/Users/acheron/pinpoint/pp-agent/pinpoint-bootstrap-1.6.0.jar -Dpinpoint.agentId=myservice-001 -Dpinpoint.applicationName=myservice -jar myapp.jar &

2、Tomcat Example
增加 -javaagent, -Dpinpoint.agentId, -Dpinpoint.applicationName 到 Tomcat启动脚本 (catalina.sh) 的CATALINA_OPTS中:
例:

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/pp-agent/pinpoint-bootstrap-1.8.3.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=mer-orderM-prod-046"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=mer-order-middle-prod"

分布式跟踪工具Pinpoint技术入门
http://www.herohuang.com/2017/03/01/apm-pinpoint/

docker部署pinpoint,监控docker中的Springboot项目
https://cloud.tencent.com/developer/article/1384079


常用APM工具

APM(Application Performance Management) ,应用性能管理, 目前市面的系统基本都是参考 Google 的 Dapper (大规模分布式系统的跟踪系统)来做的,通过跟踪请求的处理过程,来对应用系统在前后端处理、服务端调用的性能消耗进行跟踪。

Dapper,大规模分布式系统的跟踪系统
http://bigbully.github.io/Dapper-translation/

Pinpoint

1、Pinpoint
http://naver.github.io/pinpoint/
github地址: https://github.com/naver/pinpoint
是用JAVA开发的,在这个项目的主页还有些别的监控项目也不错https://github.com/naver/,这个是通过JavaAgent的机制来做字节码代码植入,实现加入traceid和抓取性能数据的目的。
NewRelic、Oneapm之类的工具在java平台上的性能分析也是类似的机制。

基本不用修改源码和配置文件,只要在启动命令里指定javaagent参数即可

Zipkin

2、Zipkin
官网: https://zipkin.io/
github地址: https://github.com/openzipkin/zipkin
这个是twitter开源出来的,也是参考Dapper的体系来做的。

Zipkin的java应用端是通过一个叫Brave的组件来实现对应用内部的性能分析数据采集。
Brave的github地址:https://github.com/openzipkin/brave

这个组件通过实现一系列的java拦截器,来做到对http/servlet请求、数据库访问的调用过程跟踪。
然后通过在spring之类的配置文件里加入这些拦截器,完成对java应用的性能数据采集。

需要对Spring、web.xml之类的配置文件做修改,相对麻烦一些

CAT

3、CAT
github地址:https://github.com/dianping/cat
这个是大众点评开源出来的,实现的功能也还是蛮丰富的,国内也有一些公司在用了。
不过他实现跟踪的手段,是要在代码里硬编码写一些“埋点”,也就是侵入式的。
这样做有利有弊,好处是可以在自己需要的地方加埋点,比较有针对性;坏处是必须改动现有系统,很多开发团队不愿意。

因为需要修改源码设置埋点,因此基本不太可能由运维人员单独完成,而必须由开发人员的深度参与了,而很多开发人员是比较抗拒在代码中加入这些东西滴;

SkyWalking

4、SkyWalking
github地址:https://github.com/apache/incubator-skywalking
这也是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。


APM和传统监控的区别

相对于传统的监控软件(Falcon、Zabbix)的区别,APM更关注在对于系统内部执行、系统间调用的性能瓶颈分析,这样更有利于定位到问题的具体原因,传统监控软件只提供一些零散的监控点和指标,就算告警了也不知道问题是出在哪里。

APM和监控系统还是有差别的。监控系统比较简单,只是发现你的系统故障,然后给你报个警。APM算是完整的解决方案,不仅发现问题,给你告警,还给你定位具体的问题在哪里。现在大家都说端到端,就是APM的一个特点,从用户端呈现的问题,找到服务端具体是哪段代码不对。


上一篇 Flyway

下一篇 Kubernetes

阅读
评论
1,388
阅读预计5分钟
创建日期 2019-10-14
修改日期 2019-10-14
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:

评论