Pinpoint是什么?
Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。 Pinpoint支持的功能比较丰富,可以支持如下几种功能:
- 服务拓扑图:对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等
- 实时活跃线程图:监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
- 请求响应散点图:以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
- 请求调用栈查看:对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
- 应用状态、机器状态检查:通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。
架构组成
Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和 Web UI。
- Agent组件:用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可
- Collector组件:数据收集模块,接收Agent发送过来的监控数据,并存储到HBase
- WebUI:监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能
部署准备
定义准备两台虚拟机 此处我用
192.168.225.136 (部署 hadoop hbase Collector WebUI 均为单机)
192.168.225.137(部署 Agent以及应用)
安装文档地址:
链接:https://pan.baidu.com/s/1ggIr8QwfMyE01KtMJBw3RQ
提取码:xhgf
第一步-hadoop
## hadoop2.7.3在centos7上部署安装(单机版)
## 首先下载 hadoop2.7.3.tar.gz
## ====================================== 安装jdk ====================================== ##
## 安装之前首先保证Jdk安装成功,未安装可建Linux上安装Jdk1.8
## ====================================== 这里我们首先设置ssh免密登录 ====================================== ##
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
## ====================================== 解压压缩文件 ====================================== ##
## 选择安装路径,我选择的安装目录为 /usr/hadoop
## 切换到/usr
cd /usr
## 创建hadoop文件夹
mkdir hadoop
cd /usr/hadoop
## 将hadoop-2.7.3.tar.gz 拷贝到此文件下
## 解压
tar -zxvf hadoop-2.7.3.tar.gz
## ====================================== 配置hadoop环境变量 ====================================== ##
vim /etc/profile
## 在最后加入
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin
## 生效配置文件
source /etc/profile
## ====================================== 修改hadoop配置 ====================================== ##
## ====================================== 配置hadoop-env.sh ====================================== ##
## 修改/usr/hadoop/hadoop-2.7.3/etc/hadoop/hadoop-env.sh 文件
cd /usr/hadoop/hadoop-2.7.3/etc/hadoop
vi hadoop-env.sh
## 修改env的Java配置
export JAVA_HOME=/data/application/java/jdk1.8
## ====================================== 配置core-site.xml====================================== ##
## 修改/usr/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml 文件
cd /usr/hadoop/hadoop-2.7.3/etc/hadoop
vi core-site.xml
## 将configuration修改为以下格式
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.225.136:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:///usr/hadoop/tmp</value>
</property>
</configuration>
## 其中的IP:192.168.225.131为虚拟机ip,不能设置为localhost,如果用localhost,后面在windows上用saprk连接服务器(虚拟机)上的hive会报异常(win读取的配置也是localhost,这样localhost就为win本地ip了~
## 也可以给ip加个映射,不过因为单机的就没加)。
## ====================================== 配置hdfs-site.xml====================================== ##
## 修改/usr/hadoop/hadoop2.7.3/etc/hadoop/hdfs-site.xml 文件
cd /usr/hadoop/hadoop-2.7.3/etc/hadoop
vi hdfs-site.xml
## 将configuration修改为以下格式
<configuration>
<property>
<name>dfs.name.dir</name>
<value>file:///usr/hadoop/hdfs/name</value>
<description>namenode上存储hdfs名字空间元数据 </description>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///usr/hadoop/hdfs/data</value>
<description>datanode上数据块的物理存储位置</description>
</property>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
## 配置yarn
## ====================================== 配置mapred-site.xml====================================== ##
cd /usr/hadoop/hadoop-2.7.3/etc/hadoop
## 这个是需要你复制一个模版文件出来的
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
## 将configuration修改为以下格式
<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
## ====================================== 配置yarn-site.xm====================================== ##
##修改/usr/hadoop/hadoop-2.7.3/etc/hadoop/yarn-site.xml文件
cd /usr/hadoop/hadoop-2.7.3/etc/hadoop
vi yarn-site.xml
## 将configuration修改为以下格式
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
## ====================================== 启动====================================== ##
## 格式化namenode(是对namenode进行初始化)
hadoop namenode -format
## 注意如下就是成功了 (下面的成功提示是在网上找的,安装是忘记cp了,出现SHUTDOWN_MSG不是报错,真正的错误是出现Error信息)
## 注意如下就是成功了 (下面的成功提示是在网上找的,安装是忘记cp了,出现SHUTDOWN_MSG不是报错,真正的错误是出现Error信息)
## 注意如下就是成功了 (下面的成功提示是在网上找的,安装是忘记cp了,出现SHUTDOWN_MSG不是报错,真正的错误是出现Error信息)
19/01/24 22:45:24 INFO common.Storage: Storage directory /usr/local/hadoop-2.8.5/tmp/dfs/name has been successfully formatted.
19/01/24 22:45:25 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop-2.8.5/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
19/01/24 22:45:25 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop-2.8.5/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 321 bytes saved in 0 seconds.
19/01/24 22:45:25 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
19/01/24 22:45:25 INFO util.ExitUtil: Exiting with status 0
19/01/24 22:45:25 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at cluster-1/192.168.79.131
## 初始化成功后,可正式启动了
cd /usr/hadoop/hadoop-2.7.3/sbin
## 先启动HDFS
./start-dfs.sh
## 再启动YARN
./start-yarn.sh
##如果没有设置免密登录这里需要yes三次并输入你的root密码三次
## jps验证是否成功
[root@chenxm sbin]# jps
2722 NodeManager
2312 SecondaryNameNode
2153 DataNode
2457 ResourceManager
2762 Jps
2029 NameNode
## 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld.service #禁止firewall开机启动
## 通过浏览器访问
http://ip地址:50070 (HDFS管理界面) http://192.168.225.136:50070
http://ip地址:8088 (yarn管理界面) http://192.168.225.136:8088
## 注意在sbin下面有个start-all.sh和stop-all.sh,这是启动和停止所有服务,这样更加快捷
## 注意在sbin下面有个start-all.sh和stop-all.sh,这是启动和停止所有服务,这样更加快捷
## 注意在sbin下面有个start-all.sh和stop-all.sh,这是启动和停止所有服务,这样更加快捷
启动之后再次验证是否启动成功
至此,基本的搭建已经完成
第二步-hbase
## hbase-1.2.9在centos7上部署安装(单机版)
## 首先下载 hbase-1.2.9-bin.tar.gz
## ====================================== 安装jdk ====================================== ##
## 安装之前首先保证Jdk安装成功,未安装可建Linux上安装Jdk1.8
## ====================================== 解压压缩文件 ====================================== ##
## 选择安装路径,我选择的安装目录为 /usr/hbase
## 切换打/usr
cd /usr
## 创建hbase文件夹
mkdir hbase
cd /usr/hbase
## 将hbase-1.2.9-bin.tar.gz 拷贝到此文件下
## 解压
tar -zxvf hbase-1.2.9-bin.tar.gz
## ====================================== 配置hbase环境变量 ====================================== ##
vim /etc/profile
## 在最后加入
export HBASE_HOME=/usr/hbase/hbase-1.2.9
export PATH=$PATH:$HBASE_HOME/bin
## 生效配置文件
source /etc/profile
## 查看hbase版本
hbase version
## ====================================== 修改hbase配置 ====================================== ##
## ====================================== 配置hbase-env.sh ====================================== ##
## 修改/usr/hbase/hbase-1.2.9/conf/hbase-env.sh 文件
cd /usr/hbase/hbase-1.2.9/conf
vi hbase-env.sh
## 修改env的Java配置,如果用到hadoop,一定要把hadoop先安装,在下面加入下面的参数
export JAVA_HOME=/data/application/java/jdk1.8
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export HBASE_HOME=/usr/hbase/hbase-1.2.9
export HBASE_CLASSPATH=/usr/hadoop/hadoop-2.7.3/etc/hadoop
## ====================================== 配置hbase-site.xml ====================================== ##
## 修改/usr/hbase/hbase-1.2.9/conf/hbase-site.xml 文件
cd /usr/hbase/hbase-1.2.9/conf
vi hbase-site.xml
## 将configuration修改为以下格式
<configuration>
<!-- 这个目录是 RegionServer 的共享目录,用来持久化 HBase 特别注意的是 hbase.rootdir 里面的 HDFS 地址是要跟 Hadoop 的 core-site.xml 里面的 fs.defaultFS 的 HDFS 的 IP 地址或者域名、端口必须一致。 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://192.168.225.136:9000/hbase</value>
</property>
<!-- 指定zookeeper端口 -->
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<!-- HBase 的运行模式。为 false 表示单机模式,为 true 表示分布式模式。若为 false,HBase 和 ZooKeeper 会运行在同一个 JVM 中 默认值为 false -->
<property>
<name>hbase.cluster.distributed</name>
<value>false</value>
</property>
<!--ZooKeeper 会话超时。Hbase 把这个值传递改 zk 集群,向它推荐一个会话的最大超时时间。单位是毫秒 默认: 180000 -->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
</configuration>
## 启动hbase,首选切换到hbase的bin文件夹,执行start-hbase.sh
./start-hbase.sh
## 启动成功后,可通过Jps来查看是否安装成功
[root@chenxm bin]# jps
2722 NodeManager
31683 Bootstrap
29398 HMaster
31462 Bootstrap
2312 SecondaryNameNode
39688 Jps
2153 DataNode
2457 ResourceManager
2029 NameNode
## 看到HMaster表示启动成功
## 或者通过浏览器访问,首先用 ss -ntl 命令查看端口16010是否启动 ,如果端口启动成功,则可以通过浏览器访问web查看是否成功
http://192.168.225.136:16010
第三步-pinpoint
## 在搭建pinpoint之前,首先先介绍一下pinpoint
pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控。
它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的,
只需要在被测试的程序启动文件中加上3句话,打下探针,就可以监控整套程序了
APM (Application Performance Management/应用性能管理)工具
架构组成
Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 和 Web UI。
Agent组件:用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可
Collector组件:数据收集模块,接收Agent发送过来的监控数据,并存储到HBase
WebUI:监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能
环境准备:linux服务器3台 作为agent 探针部署地点
ip 容器 agent版本
192.168.225.130 springboot 1.8.0
环境准备:linux服务器1台 作为pinpoint-web以及pinpoint-col 部署地点
ip 容器 pinpoint版本
192.168.225.131 tomcat 1.8.0
## 我们首先安装Collector组件和WebUI
## 在搭建之前,我们首先要去执行pinpoint提供的一个初始化hbase语句,hbase-create.hbase
## 将hbase-create.hbase 拷贝到/usr/hbase文件夹下
## 在切换到 /usr/hbase/hbase-1.2.9/bin路径下
cd /usr/hbase/hbase-1.2.9/bin
## 执行初始化语句
./hbase shell /usr/hbase/hbase-create.hbase
## 执行成功后,可通过hbase的web页面查看是否初始化成功,也可进入hbase
./hbase shell
## 查看表是否都创建成功
hbase(main):001:0> list
##表创建成功后,开始安装collector组件
##因为我是将组建安装 /data/application/pinpoint文件夹下的 ,如果没有则创建文件夹
cd /data/application/pinpoint
## 在此文件夹下面,上传两个tomcat,用来启动Collector和WebUI
## 解压tomcat
tar -zxvf apache-tomcat-8.5.28.tar.gz
mv apache-tomcat-8.5.28 tomcat-col
tar -zxvf apache-tomcat-8.5.28.tar.gz
mv apache-tomcat-8.5.28 tomcat-web
## tomcat解压成功后
##分别将 pinpoint-collector-1.8.0.war放到 /data/application/pinpoint/tomcat-col/webapps文件夹下面
##分别将 pinpoint-web-1.8.0.war放到 /data/application/pinpoint/tomcat-web/webapps文件夹下面
##==================================修改tomcat-col和tomcat-web配置====================================##
# 修改tomcat-col的Tomcat的配置,主要修改端口,避免与tomcat-web的Tomcat的端口冲突。我在原本默认的端口前都加了1,下面是替换的shell命令。
#【注意】最后一条是将tomcat的私有ip开放,需要将localhost替换成本机的ip,我本机的网卡是默认的,如果你本机的网卡不是eth0,需要进行相关的修改。或者直接用"vi"进去,修改localhost
## 切换到conf文件下面
cd /data/application/pinpoint/tomcat-col/conf
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
## 直接进入server.xml 修改host,将localhost换成ip
<Host name="192.168.225.131" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
##启动tomcat
cd /data/application/pinpoint/tomcat-col/bin
./startup.sh
##查看日志
tail -f ../logs/catalina.out
# 修改tomcat-web的Tomcat的配置,主要修改端口,避免与tomcat-col的Tomcat的端口冲突。我在原本默认的端口前都加了2,下面是替换的shell命令。
#【注意】最后一条是将tomcat的私有ip开放,需要将localhost替换成本机的ip,我本机的网卡是默认的,如果你本机的网卡不是eth0,需要进行相关的修改。或者直接用"vi"进去,修改localhost
## 切换到conf文件下面
cd /data/application/pinpoint/tomcat-col/conf
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
## 直接进入server.xml 修改host,将localhost换成ip
<Host name="192.168.225.131" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
##启动tomcat
cd /data/application/pinpoint/tomcat-web/bin
./startup.sh
##查看日志
tail -f ../logs/catalina.out
## 如果都启动成功,可通过浏览器访问
http://192.168.225.131:28080/pinpoint-web-1.8.0
##==================================springboot整合pinpoint-agent-1.8.0===================================##
##因为我的应用是部署到192.168.225.130上面的所以我们需要加agent放在该服务器上面
##将pinpoint-agent-1.8.0.tar.gz放在 /data/application/pinpoint
##解压pinpoint-agent-1.8.0.tar.gz
tar -zxvf pinpoint-agent-1.8.0.tar.gz
## 修改 pinpoint.config文件配置
vi pinpoint.config
将 profiler.collector.ip=192.168.225.131修改为部署 collector组建的ip地址 ,下面的9994,9995,9996端口在collector启动时就自动开启,所以不用修改
profiler.collector.ip=192.168.225.131
## 修改完agent配置文件以后,只需要在springboot的启动文件中加入
-javaagent:/data/application/pinpoint/pinpoint-bootstrap-1.8.0.jar -Dpinpoint.agentId=luckdraw -Dpinpoint.applicationName=luckdraw
## 让启动的脚本变为,具体的启动脚本,根据自己的定,集成agent只需要加入上面的配置
java -javaagent:/data/application/pinpoint/pinpoint-bootstrap-1.8.0.jar -Dpinpoint.agentId=luckdraw -Dpinpoint.applicationName=luckdraw -jar ${JVM_OPTION} -Djava.io.tmpdir="$CACHE_DIR" $RUN_DIR/luckdraw-0.0.1-SNAPSHOT.jar -d"$RUN_DIR">>$RUN_DIR/log &
##具体的pinpoint-bootstrap-1.8.0.jar地址是自己放置agnet的位置,所以根据自己的地址,自己进行相应的修改
##-Dpinpoint.agentId:表示你的agentId,全局唯一
##-Dpinpoint.applicationName:应用名
## 用自己的脚本启动自己的项目,在到http://192.168.225.131:28080/pinpoint-web-1.8.0刷新,就可看到自己的项目在pinpoint中监控起来了
来源:CSDN
作者:CHarit_Cilin
链接:https://blog.csdn.net/CHarit_Cilin/article/details/94739169