pinpoint使用详情,参考:https://blog.csdn.net/weixin_43931358/article/details/107671436
pinpoint介绍
现在服务通常由许多不同的组件组成,它们之间进行通信,以及对外部服务进行API调用。如何执行每一个事务通常被当作黑箱。Pinpoint跟踪这些组件之间的事务流,并提供清晰的视图来识别问题区域和潜在的瓶颈。
ServerMap:
通过可视化它们的组件是如何互连的,了解任何分布式系统的拓扑结构。单击一个节点将显示关于组件的详细信息,例如其当前状态和事务计数
Realtime Active Thread Chart(实时活动线程图)
实时监控应用程序内部的活动线程
Request/Response Scatter Chart(请求/响应散点图)
随时间可视化请求计数和响应模式以识别潜在问题。可以通过拖动图表来选择其他细节
CallStack(调用堆栈)
对分布式环境中的每个事务增加代码级可见性,在单个视图中识别瓶颈和故障点
Inspector(检查工具)
查看应用程序的其他细节,如CPU使用、内存/垃圾收集、TPS和JVM参数。
Architecture(架构)
准备工作
准备两台机器,ip地址:
服务端:192.168.1.189
客户端:192.168.1.193
服务端需要安装hbase、pinpoint控制器和pinpointWeb端
客户端这边需要启动的tomcat服务,同时部署客户端组件
服务端部署(服务端服务器上部署)
安装jdk环境
yum install java -y
在/etc/profile中添加java环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre
export CLASSPATH=.:${JAVA_HOME}/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
安装hbase
wget [http://archive.apache.org/dist/hbase/hbase-1.2.12/hbase-1.2.12-bin.tar.gz](http://archive.apache.org/dist/hbase/hbase-1.2.12/hbase-1.2.12-bin.tar.gz)
tar -xvf hbase-1.2.12-bin.tar.gz
mv hbase-1.2.12-bin.tar.gz /usr/local/hbase
进入/usr/local/hbase/conf目录编辑hbase-env.sh文件添加内容:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre
编辑hbase-site.xml文件,添加以下内容
hbase.rootdir
file:///usr/local/hbase/data
hbase.zookeeper.property.dataDir
/usr/local/hbase/zookeper
hbase.zookeeper.property.clientPort
2181
hbase.cluster.distributed
false
启动hbase执行启动脚本
../bin/start-hbase.sh
启动后查看日志有没有异常
less ../logs/hbase-root-master-pinpoint-master.out
导入初始化脚本
wget https://raw.githubusercontent.com/pinpoint-apm/pinpoint/master/hbase/scripts/hbase-create.hbase
执行导入命令
./bin/hbase shell hbase-create.hbase
导入成功后访问hbase主页
查看User Tables数据表有没有导入
进入hbase,输入”status ‘detailed’”可以查看刚才初始化的表,是否存在
服务端安装pinpoint-collector
下载pinpoint客户端、控制器和web端
https://github.com/pinpoint-apm/pinpoint/releases/tag/1.8.5
下载tomcat,将tomcat解压到/usr/local/并改名pp-col
先到pp-col/webapp/执行
rm -rf * && mkdir ROOT
将pinpoint-collector-1.8.5.war包unzip解压到pp-col/webapps/ROOT中
unzip pinpoint-collector-1.8.5.war -d /data/service/pp-col/webapps/ROOT
更改tomcat的server.xml配置
sed -i 's/port="8005"/port="18005"/g' server.xml
sed -i 's/port="8080"/port="18080"/g' server.xml
sed -i 's/port="8443"/port="18443"/g' server.xml
sed -i 's/port="8009"/port="18009"/g' server.xml
sed -i 's/redirectPort="8443"/redirectPort="18443"/g' server.xml
启动tomcat
bin/startup.sh
查看日志是否启动成功
tail -f ../logs/catalina.out
服务端部署pinpoint-web
将tomcat解压到/usr/local/并改名pp-web
将pinpoint-web-1.8.5.war解压到pp-web/webapps/ROOT中
进入tomcat的conf文件夹中,修改server.xml
sed -i 's/port="8005"/port="28005"/g' server.xml
sed -i 's/port="8080"/port="28080"/g' server.xml
sed -i 's/port="8443"/port="28443"/g' server.xml
sed -i 's/port="8009"/port="28009"/g' server.xml
sed -i 's/redirectPort="8443"/redirectPort="28443"/g' server.xml
启动web
bin/startuyp.sh
查看web启动情况
tail -f ../logs/catalina.out
现在可以访问pinpoint,当前没有内容,需要安装pinpoint监控端
客户端部署监控端
转到客户端服务器
我这里将客户端运行的程序和pinpoint客户端放在同一个文件夹中,mkdir /root/pinpoint_agent
将pinpoint-agent-1.8.5.tar.gz监控端解压到/root/pinpoint_agent,我这边为了方便取名agent_2
更改配置文件pinpoint.config,将监控段主机IP填写如下
将后端服务包部署在webapp中
更改catalina启动文件指定agent的jar包
[root@localhost pinpoint_agent]# vim tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/agent_2/pinpoint-bootstrap-1.8.5.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp20211202_2"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=PP-Agent-2"
第一行是pp-agent的jar包位置
第二行是agent的ID,这个ID是唯一的,我是用pp + 今天的日期命名的,只要与其他的项目的ID不重复就好了
第三行是采集项目的名字,这个名字可以随便取,只要各个项目不重复就好了
启动服务
我这边是以docker部署的程序,将webapp、agent和启动脚本挂载上去,也可以直接部署tomcat,将agent部署到/usr/local中,更改tomcat/bin/catalina.sh增加配置,直接启动
docker ps命令查看程序启动状态
启动没有问题,访问刚刚设置好的pinpoint监控主页http://192.168.1.189:28080/
菜单中选择已经配置好的服务
此时访问后端接口,能够自动输出数据流向图以及用户请求次数、请求的响应时长,同时可以选择时间区间,可以开启实时模式(REALTIME)进行监控
左边点开划出窗口,可以看到选中框内的详细信息
弹出选择框的详细信息
点击相应的信息
点击右边的Timeline能看到详细响应时间,可点击进去查看哪个步骤
进入主页右键能进行筛选,请求的路径,成功和失败还有响应时间
点开右上角inspector选项可以看到微服务细节信息,能看到堆内存,JVM的CPU使用频率,响应时长等监控信息
总结一下,pinpoint可以给我们带来以下好处:
- 掌握系统的整体响应速度情况,对系统运行情况心里有底;
- 掌握各节点的响应速度情况,比如第三方服务接口,redis,mysql等;
- 单次请求的具体服务链路耗时情况,定位性能瓶颈;
- 单次请求的具体服务链路请求信息,对于排查问题能提供帮助;
- 监控各服务的JVM、线程池、数据库连接池使用情况,想象一下,如果分布式服务系统中有几十甚至几百个服务节点,要如何来监控每个节点的JVM呢?
总体来说,在pinpoint这类APM监控工具逐渐发展成熟的当下,引入这类工具,对我们日常的开发测试运维工作,是能起到不错的辅助作用的,尤其是在分布式服务系统中,如果没有这类工具,遇到问题时难免慌手慌脚无从下手。
关于是否要在生产环境上部署这类APM监控工具,这里说几点供参考:
- APM监控一定不可以影响业务系统的运行成败,换句话说就是即使APM监控挂了,业务系统也应该能够照常运行着。不要因为引入APM监控,而给整套系统引入了一颗不定时炸弹,这样就得不偿失了。在这一点上,pinpoint应该是OK的,我测试过pinpoint服务端即使挂了,业务系统照样能跑得好好的;
- APM监控是会消耗服务器的资源的,监控粒度越细,消耗越多。在其他文章里人做了各种APM监控工具的性能损耗对比,pinpoint相对是损耗较多的,因为它的监控粒度算是比较细的。我也做过测试,开启pinpoint监控后,性能确实会有8%左右的损耗。但是换个角度来说,目前各种系统的线上环境,CPU等各类资源,经常都是在30%使用率以下运行的,这种情况下,即使再多个损耗10%也是在能接受范围内的;
- 开源APM监控工具还要考虑安全问题,像pinpoint、skywalking这类工具目前好像还没有访问权限之类的控制,要注意不要被乱灌数据,或者被有不良企图的用户访问到各种请求链路详细信息。当然,这类安全问题也是有解决方案的,比如可以IP访问权限控制,或者通过web服务器加上权限验证再进行转发等;
补充
jar包启动指定pinpoint方式:
java -javaagent:D:\Software\pinpoint-agent-1.8.3\pinpoint-bootstrap-1.8.3.jar -Dpinpoint.applicationName=user -Dpinpoint.agentId=user01 -jar User-0.0.1-SNAPSHOT.jar