pinpoint微服务全链路监控安装和使用

pinpoint使用详情,参考:https://blog.csdn.net/weixin_43931358/article/details/107671436

pinpoint介绍

现在服务通常由许多不同的组件组成,它们之间进行通信,以及对外部服务进行API调用。如何执行每一个事务通常被当作黑箱。Pinpoint跟踪这些组件之间的事务流,并提供清晰的视图来识别问题区域和潜在的瓶颈。

image.png

ServerMap:

通过可视化它们的组件是如何互连的,了解任何分布式系统的拓扑结构。单击一个节点将显示关于组件的详细信息,例如其当前状态和事务计数

Realtime Active Thread Chart(实时活动线程图)

实时监控应用程序内部的活动线程

Request/Response Scatter Chart(请求/响应散点图)

随时间可视化请求计数和响应模式以识别潜在问题。可以通过拖动图表来选择其他细节

CallStack(调用堆栈)

对分布式环境中的每个事务增加代码级可见性,在单个视图中识别瓶颈和故障点

image.png

Inspector(检查工具)

查看应用程序的其他细节,如CPU使用、内存/垃圾收集、TPS和JVM参数。

image.png

Architecture(架构)

image.png

准备工作

准备两台机器,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主页

image.png

查看User Tables数据表有没有导入

image.png

进入hbase,输入”status ‘detailed’”可以查看刚才初始化的表,是否存在

image.png

服务端安装pinpoint-collector

下载pinpoint客户端、控制器和web端

https://github.com/pinpoint-apm/pinpoint/releases/tag/1.8.5

image.png

下载tomcat,将tomcat解压到/usr/local/并改名pp-col

image.png

先到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
image.png

更改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监控端

image.png

客户端部署监控端

转到客户端服务器

我这里将客户端运行的程序和pinpoint客户端放在同一个文件夹中,mkdir /root/pinpoint_agent

将pinpoint-agent-1.8.5.tar.gz监控端解压到/root/pinpoint_agent,我这边为了方便取名agent_2

image.png

更改配置文件pinpoint.config,将监控段主机IP填写如下

image.png

将后端服务包部署在webapp中

image.png

更改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"
image.png

第一行是pp-agent的jar包位置

第二行是agent的ID,这个ID是唯一的,我是用pp + 今天的日期命名的,只要与其他的项目的ID不重复就好了

第三行是采集项目的名字,这个名字可以随便取,只要各个项目不重复就好了

启动服务

我这边是以docker部署的程序,将webapp、agent和启动脚本挂载上去,也可以直接部署tomcat,将agent部署到/usr/local中,更改tomcat/bin/catalina.sh增加配置,直接启动

image.png

docker ps命令查看程序启动状态

image.png

启动没有问题,访问刚刚设置好的pinpoint监控主页http://192.168.1.189:28080/

菜单中选择已经配置好的服务

image.png

此时访问后端接口,能够自动输出数据流向图以及用户请求次数、请求的响应时长,同时可以选择时间区间,可以开启实时模式(REALTIME)进行监控

image.png

左边点开划出窗口,可以看到选中框内的详细信息

image.png

弹出选择框的详细信息

image.png

点击相应的信息

image.png

点击右边的Timeline能看到详细响应时间,可点击进去查看哪个步骤

image.png

进入主页右键能进行筛选,请求的路径,成功和失败还有响应时间

image.png
image.png

点开右上角inspector选项可以看到微服务细节信息,能看到堆内存,JVM的CPU使用频率,响应时长等监控信息

image.png
image.png
image.png

总结一下,pinpoint可以给我们带来以下好处:

  1. 掌握系统的整体响应速度情况,对系统运行情况心里有底;
  2. 掌握各节点的响应速度情况,比如第三方服务接口,redis,mysql等;
  3. 单次请求的具体服务链路耗时情况,定位性能瓶颈;
  4. 单次请求的具体服务链路请求信息,对于排查问题能提供帮助;
  5. 监控各服务的JVM、线程池、数据库连接池使用情况,想象一下,如果分布式服务系统中有几十甚至几百个服务节点,要如何来监控每个节点的JVM呢?

总体来说,在pinpoint这类APM监控工具逐渐发展成熟的当下,引入这类工具,对我们日常的开发测试运维工作,是能起到不错的辅助作用的,尤其是在分布式服务系统中,如果没有这类工具,遇到问题时难免慌手慌脚无从下手。

关于是否要在生产环境上部署这类APM监控工具,这里说几点供参考:

  1. APM监控一定不可以影响业务系统的运行成败,换句话说就是即使APM监控挂了,业务系统也应该能够照常运行着。不要因为引入APM监控,而给整套系统引入了一颗不定时炸弹,这样就得不偿失了。在这一点上,pinpoint应该是OK的,我测试过pinpoint服务端即使挂了,业务系统照样能跑得好好的;
  2. APM监控是会消耗服务器的资源的,监控粒度越细,消耗越多。在其他文章里人做了各种APM监控工具的性能损耗对比,pinpoint相对是损耗较多的,因为它的监控粒度算是比较细的。我也做过测试,开启pinpoint监控后,性能确实会有8%左右的损耗。但是换个角度来说,目前各种系统的线上环境,CPU等各类资源,经常都是在30%使用率以下运行的,这种情况下,即使再多个损耗10%也是在能接受范围内的;
  3. 开源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

你可能感兴趣的:(pinpoint微服务全链路监控安装和使用)