1、简介:
Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。 Pinpoint支持的功能比较丰富,可以支持如下几种功能:
服务拓扑图:对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等
实时活跃线程图:监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
请求响应散点图:以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
请求调用栈查看:对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
应用状态、机器状态检查:通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。
架构组成
Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和 Web UI。
Agent组件:用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可
Collector组件:数据收集模块,接收Agent发送过来的监控数据,并存储到HBase
WebUI:监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能
1.1、架构图
1.2、github地址是:https://github.com/naver/pinpoint
1.3、以下使用的版本为2021年7月22日更新的最新版(2.3.0)
2、安装环境
1、安装JDK
解压自行安装,环境变量配置如下:
# java config
vim /etc/profile
最后一行加入下面语句:
JAVA_HOME=/usr/java/jdk1.8
JRE_HOME=/usr/java/jdk1.8/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
# 让环境变量生效
source /etc/profile
# 测试java的环境变量是否配置好了
java -version
2.安装hbase
下载地址:http://apache.mirror.cdnetworks.com/hbase/1.7.1/
2.1、解压hbase压缩包 hbase-1.7.1-bin.tar.gz
tar -zxvf hbase-1.7.1-bin.tar.gz
2.2、编辑hbase-env.sh文件,添加JAVA_HOME配置,在27行左右
vim hbase-1.7.1/conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.8/
注释第47行,48行
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m -XX:ReservedCodeCacheSize=256m"
2.3、编辑hbase-site.xml文件,添加数据存储路径和配置
vim hbase-1.7.1/conf/hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>file:///data/hbase</value>
</property>
<property>
#zookeeper地址(本地为hbase自带的zookeeper,另外部署的需要改成相应的ip地址,并将防火墙开启2181端口)
<name>hbase.zookeeper.quorum</name>
<value>127.0.0.1</value>
</property>
<property>
#2181为zookeeper的clientPort
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
2.4、启动hbase
cd hbase-1.7.1/bin
./start-hbase.sh
2.5、输入jps查看启动项
2.6、初始化hbase的pinpoint库
Github上提供了pinpoint在Hbase中初始化的脚本
cd hbase-2.4.4/bin
./hbase shell /mnt/pinpoint/hbase-create.hbase(脚本所在文件位置)
3、部署pinpoint-collector(新版启动方式为jar包启动)
直接启动:
zookeeper默认为本地,可以改为自己的IP地址
java -jar -Dpinpoint.zookeeper.address=127.0.0.1 pinpoint-collector-boot-2.3.0.jar
后台启动并输出日志:
nohup java -jar -Dpinpoint.zookeeper.address=127.0.0.1 pinpoint-collector-boot-2.3.0.jar > console_ppc.log 2>&1 &
4、部署pinpoint-web(新版启动方式为jar包启动)
直接启动:
zookeeper默认为本地,可以改为自己的IP地址
java -jar -Dpinpoint.zookeeper.address=127.0.0.1 pinpoint-web-boot-2.3.0.jar
后台启动并输出日志:
nohup java -jar -Dpinpoint.zookeeper.address=127.0.0.1 pinpoint-web-boot-2.3.0.jar > console_ppc.log 2>&1 &
5、上传pinpoint-agent-2.3.0到要监测项目地址
注意事项:部署web和controller的服务器要将防火墙对外的接口开启,9991、9992、9993、8080、8081
5.1配置pinpoint.conf主要项
profiler.transport.grpc.collector.ip=127.0.0.1#改成自己coltroll部署的ip地址
profiler.collector.ip=127.0.0.1#改成自己coltroll部署的ip地址
# 1 out of n transactions will be sampled where n is the rate. (1: 100%, 20: 5%)
profiler.sampling.rate=1#配置检测请求量
###########################################################
# SPRING BOOT #
###########################################################
profiler.springboot.bootstrap.main:在后面加上要监测的项目jar启动main方法
5.2、启动命令:
springboot启动命令添加:
-javaagent:这边是pinpoint-agent所在位置,-Dpinpoint.profiler.profiles.active=local or relese:启动时配置文件(可不写,默认是pinpoint-root.config配置文件里指定的命令)(文件路径/pinpoint-agent/profile/...)
-Dpinpoint.agentId=clueDiscovery-test :agentid,唯一id,不可重复
-Dpinpoint.applicationName=clueDiscovery-test:agentName,项目名称:可重复
nohup java -javaagent:pinpoint-agent-2.3.0/pinpoint-bootstrap.jar -Dpinpoint.agentId=*** -Dpinpoint.applicationName=*** -jar ***.jar --spring.profiles.active=*** >console-***.log 2>&1 &
Tomcat集成示例
在tomcat 启动脚本(catalina.sh)中添加 -javaagent, -Dpinpoint.agentId, -Dpinpoint.applicationName
JAVA_OPTS="$JAVA_OPTS -javaagent:/home/jyapp/pinpoint-agent/pinpoint-bootstrap-1.7.3.jar"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.agentId=$AGENT_ID"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
注意:
$AGENT_ID - 需改为应用的唯一标记,如 loan-33,代表loan 33服务器
$APPLICATION_NAME - 需改为应用名,如 loan,代表贷款应用