介绍

当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。

当应用A发出某个请求时,其背后可能有数十个甚至更多的服务被调用,可谓是“牵一发而动全身”。 如果将分布式系统比作高速公路网,每个前端的请求就相当于高速上行驶的车辆,而处理请求的应用就是高速上的收费站,在收费站上将车辆通行信息记录成日志,包括时间、车牌、站点、公路、价格等,如果将所有收费站上的日志整合在一起,便可以通过唯一的车牌号确定该车的完整通行记录;分布式调用系统跟踪和监控就是类比这种思想,对每一次请求进行跟踪,进而明确每个请求所经过的应用、耗时等信息。

安装

https://skyao.gitbooks.io/learning-pinpoint/content/installation/guide.html

官方文档说的很详细

架构说明

Pinpoint-Collector:收集各种性能数据

Pinpoint-Agent:和自己运行的应用关联起来的探针

Pinpoint-Web:将收集到的数据显示成WEB网页形式

HBase Storage:收集到的数据存到HBase中

同类工具

google: Dapper

twitter: Zipkin

淘宝: 鹰眼(EgleEye)

大众点评: CAT

为什么要用Pinpoint

最重要的原因,对代码的零侵入,运用JavaAgent字节码增强技术,只需要加启动参数即可。

使用方式

集成tomcat

修改此tomat的/bin/catalina.sh,在106行左右加入启动参数:

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/Users/mc/pinpoint/pp-agent/pinpoint-bootstrap-1.6.0.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=myapp"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=MyTestPP"

第一行:pinpoint-bootstrap-1.6.0.jar的位置 第二行:这里的agentId必须唯一,标志一个jvm。 第三行:applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationName。

集成spring boot
nohup java -javaagent:/Users/mc/pinpoint/pp-agent/pinpoint-bootstrap-1.6.0.jar -Dpinpoint.agentId=acheron-consumer -Dpinpoint.applicationName=acheron-consumer -jar myapp.jar &

注意

在分布式环境中 有很多不同的实例 pinpoint-agent 配置: pinpoint.agentId 必须为全局唯一标识实例, agentId必须唯一,标志一个jvm pinpoint.applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationName。 collector 地址和接口要在agent上配置 如果部署在不同的服务器上应该注意服务器地址和端口的对应

遇到的问题:

1.配置采样率的问题

https://github.com/naver/pinpoint/issues/3107

采样率取决于各家的业务逻辑,如果被采样的接口调用并发量非常大,那么高采样率开销太大了,搞不好 pinpoint 的 collector 都受不了,这种情况降低采样率得到的数据也非常有参考价值,反之,如果采样的接口总共也没几次调用,那么采样率很低的话,很有可能采样不到,或采到的数据参考价值很低。 而且改成 50 应该不是提高采样率,注释说的是 n 分之 1,想得到 50% 采样率的话,应该改成 2。

2.如何删除一个没有在运行的应用名

例子:
http://xxx/admin/removeApplicationName.pinpoint?applicationName=admin-dev&password=admin

password是web的 pinpoint-web.properties 里面配置的 默认password 为adminhttps://github.com/naver/pinpoint/issues/2340

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐