PinPoint APM搭建全過程


Pinpoint簡介

Pinpoint是一款對Java編寫的大規模分布式系統的APM工具,有些人也喜歡稱呼這類工具為調用鏈系統、分布式跟蹤系統。我們知道,前端向后台發起一個查詢請求,后台服務可能要調用多個服務,每個服務可能又會調用其它服務,最終將結果返回,匯總到頁面上。如果某個環節發生異常,工程師很難准確定位這個問題到底是由哪個服務調用造成的,Pinpoint等相關工具的作用就是追蹤每個請求的完整調用鏈路,收集調用鏈路上每個服務的性能數據,方便工程師能夠快速定位問題。

其架構圖如下:

架構說明:

  • Pinpoint-Collector:收集各種性能數據
  • Pinpoint-Agent:和自己運行的應用關聯起來的探針
  • Pinpoint-Web:將收集到的數據顯示成WEB網頁形式
  • HBase Storage:收集到的數據存到HBase中

Pinpoint搭建

我們這里直接將數據存儲到HDFS中,所以整體規划如下:

IP 主機名 用途
10.2.42.59 collector Pinpoint-collector
10.2.42.60 web Pinpoint-web
10.2.42.61 hbase-master Hadoop/Hbase/zookeeper
10.2.42.62 hbase-slave01 Hadoop/Hbase/zookeeper
10.2.42.63 hbase-slave02 Hadoop/Hbase/zookeeper

軟件版本:

軟件名 版本 下載地址
pinpoint-collector 1.7.1 https://github.com/naver/pinpoint/releases
pinpoint-web 1.7.1 https://github.com/naver/pinpoint/releases
pinpoint-agent 1.7.1 https://github.com/naver/pinpoint/releases
java 1.8.0_131 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
zookeeper 3.4.10 https://archive.apache.org/dist/zookeeper/stable/
hbase 1.2.6 http://apache.mirror.cdnetworks.com/hbase/
hadoop 2.8.4 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.4/
tomcat 8.0.47 https://tomcat.apache.org/download-80.cgi

安裝JDK

解壓JDK到opt目錄下,配置環境變量

tar xf jdk-8u131-linux-x64.tar.gz -C /opt

vim /etc/profile

export JAVA_HOME=/opt/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH

加載環境變量

source /etc/profile

配置免密

配置10.2.42.61,10.2.42.62,10.2.42.63節點之間互信,可以三台同時操作。

ssh-keygen
ssh-copy-id 10.2.42.61
ssh-copy-id 10.2.42.62
ssh-copy-id 10.2.42.63

如果沒有ssh-copy-id,則使用下面命令安裝即可

yum -y install openssh-clients

配置Hosts映射

五台都需要配置hosts映射。
vim /etc/hosts

10.2.42.61	DCA-APP-COM-pinpoint-HBaseMaster
10.2.42.62	DCA-APP-COM-pinpoint-HBaseSlave01
10.2.42.63	DCA-APP-COM-pinpoint-HBaseSlave02

安裝zookeeper集群

解壓安裝包到opt目錄下,三台可以同時操作。

tar xf zookeeper-3.4.10.tar.gz -C /opt/
cd /opt/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/data/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=10.2.42.61:12888:13888
server.2=10.2.42.62:12888:13888
server.3=10.2.42.63:12888:13888

創建數據目錄

mkdir /data/zookeeper/data -p

在10.2.42.61上添加競選ID

echo 1 > /data/zookeeper/data/myid

在10.2.42.62上添加競選ID

echo 2 > /data/zookeeper/data/myid

在10.2.42.63上添加競選ID

echo 3 > /data/zookeeper/data/myid

啟動服務

/opt/zookeeper-3.4.10/bin/zkServer.sh start

查看集群狀態

[root@DCA-APP-COM-pinpoint-HBaseMaster data]# /opt/zookeeper-3.4.10/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

安裝Hadoop集群

namenode 10.2.42.61
datanode01 10.2.42.62
datanode02 10.2.42.63

解壓安裝文件到opt目錄下,注:沒做特別說明,下面操作均在三台機器上同時操作。

tar xf hadoop-2.8.3.tar.gz -C /opt/

進入hadoop配置文件目錄,進行配置

cd /opt/hadoop-2.8.3/etc/hadoop

配置hadoop-env.sh,指定hadoop的java運行環境
vim hadoop-env.sh

#export JAVA_HOME=${JAVA_HOME}     # 默認就是這個,所以實際上這一步可以跳過
export JAVA_HOME=/opt/jdk1.8.0_131

配置core-site.xml,指定訪問hadoop web界面訪問
vim core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://10.2.42.61:9000</value>
  </property>
  <property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/data/hadoop/tmp</value>
  </property>
</configuration>

配置hdfs-site.xml
vim hdfs-site.xml

<configuration>
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>10.2.42.61:50090</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <!-- 指定namenode數據存放臨時目錄,自行創建 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/data/hadoop/dfs/name</value>
  </property>
  <!-- 指定datanode數據存放臨時目錄,自行創建 -->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/data/hadoop/dfs/data</value>
  </property>
</configuration>

配置mapred-site.xml,這是mapreduce的任務配置,可以查看以運行完的作業情況。
vim mapred-site.xml

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
      <value>0.0.0.0:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
      <value>0.0.0.0:19888</value>
  </property>
</configuration>

配置yarn-site.xml,datanode不需要修改這個配置文件。
vim yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
  <name>yarn.resourcemanager.address</name>
  <value>10.2.42.61:8032</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>10.2.42.61:8030</value> 
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>10.2.42.61:8031</value> 
</property>
<property>
  <name>yarn.resourcemanager.admin.address</name>
  <value>10.2.42.61:8033</value> 
</property>
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>10.2.42.61:8088</value> 
</property>
</configuration>

配置datanode,方便namenode調用
vim slaves

10.2.42.62
10.2.42.63

創建數據目錄

mkdir /data/hadoop/tmp -p
mkdir /data/hadoop/dfs/name -p
mkdir /data/hadoop/dfs/data -p

格式化namenode,由於namenode
上的文件系統是 HDFS 的,所以要格式化。

/opt/hadoop-2.8.3/bin/hdfs namenode -format

如下表示格式化成功。
image.png

啟動集群

/opt/hadoop-2.8.3/sbin/start-all.sh

輸出日志如下:
image.png

啟動jobhistory 服務,查看 mapreduce 運行狀態

/opt/hadoop-2.8.3/sbin/mr-jobhistory-daemon.sh start historyserver

通過URL訪問的地址

http://10.2.42.61:50070  #整個hadoop 集群
http://10.2.42.61:50090  #SecondaryNameNode的情況
http://10.2.42.61:8088   #resourcemanager的情況
http://10.2.42.61:19888  #historyserver(MapReduce歷史運行情況)

image.png

配置HBase集群

注:未做特別聲明,一下操作在三個節點同時進行。
**
解壓安裝包到opt目錄下

tar xf hbase-1.2.6-bin.tar.gz -C /opt/

復制hdfs配置文件,這是為了保障hbase和hdfs兩邊的配置文件一致

cp /opt/hadoop-2.8.3/etc/hadoop/hdfs-site.xml /opt/hbase-1.2.6/conf/

配置HBase配置文件
vim hbase-site.xml

<configuration>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>10.2.42.61,10.2.42.62,10.2.42.63</value>
    <description>The directory shared by RegionServers.</description>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/data/zookeeper/zkdata</value>
    <description>
    注意這里的zookeeper數據目錄與hadoop ha的共用,也即要與 zoo.cfg 中配置的一致
    Property from ZooKeeper config zoo.cfg.
    The directory where the snapshot is stored.
    </description>
  </property>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://10.2.42.61:9000/hbase</value>
    <description>The directory shared by RegionServers.
                 官網多次強調這個目錄不要預先創建,hbase會自行創建,否則會做遷移操作,引發錯誤
                 至於端口,有些是8020,有些是9000,看 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 里面的配置,本實驗配置的是
                 dfs.namenode.rpc-address.hdcluster.nn1 , dfs.namenode.rpc-address.hdcluster.nn2
    </description>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>tre</value>
    <description>分布式集群配置,這里要設置為true,如果是單節點的,則設置為false
      The mode the cluster will be in. Possible values are
      false: standalone and pseudo-distributed setups with managed ZooKeeper
      true: fully-distributed with unmanaged ZooKeeper Quorum (see hbase-env.sh)
    </description>
  </property>
</configuration>

配置regionservers文件
vim regionservers

10.2.42.62
10.2.42.63

配置hbase-env.sh,由於我們是自己搭建的zookeeper,所以需要加入下面一段代碼。

export HBASE_MANAGES_ZK=false

啟動集群

/opt/hbase-1.2.6/bin/start-hbase.sh

image.png

查看集群狀態
1、通過URL查看:http://10.2.42.61:16010/master-status
2、通過命令行查看

/opt/hbase-1.2.6/bin/hbase shell
hbase(main):002:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 2.0000 average load

如果報錯:ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
1、先停止HBase:/opt/hbase-1.2.6/bin/stop-hbase.sh
2、啟動regionserver:/opt/hbase-1.2.6/bin/hbase-daemon.sh start regionserver
3、啟動master:/opt/hbase-1.2.6/bin/hbase-daemon.sh start master

初始化HBase的PinPoint庫,hbase-create.hbase是需要下載的。
地址是:https://github.com/naver/pinpoint/tree/master/hbase/scripts

/opt/hbase-1.2.6/bin/hbase shell /root/install/hbase-create.hbase

image.png

配置PinPoint-Collecter

解壓war包到tomcat的webapps目錄下

unzip pinpoint-collector-1.7.1.war -d /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT

配置文件目錄/home/tomcat/apache-tomcat-8.0.47/webapps/ROOT/WEB-INF/classes
修改配置文件hbase.properties

hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
hbase.client.port=2181

......

修改配置文件pinpoint-collector.properties

cluster.enable=true
cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
......
flink.cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
flink.cluster.zookeeper.sessiontimeout=3000

啟動tomcat

/home/tomcat/apache-tomcat-8.0.47/bin/startup.sh

配置PinPoint-WEB

解壓對應的war包到tomcat的webapps目錄

unzip pinpoint-web-1.7.1.war -d /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT

配置文件目錄/home/tomcat/apache-tomcat-8.0.47/webapps/ROOT/WEB-INF/classes
vim hbase.properties

hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
hbase.client.port=2181
......

vim pinpoint-web.properties

cluster.enable=true
cluster.web.tcp.port=9997
cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
cluster.zookeeper.sessiontimeout=30000
cluster.zookeeper.retry.interval=60000
.......

啟動tomcat

/home/tomcat/apache-tomcat-8.0.47/bin/startup.sh

訪問URL:http://10.2.42.60:8080/#/main
image.png

配置探針

復制pinpoint-agent-1.7.1.tar.gz到應用服務器上,解壓到tomcat目錄

tar xf pinpoint-agent-1.7.1.tar.gz -C /home/tomcat

修改配置文件:
vim /home/tomcat/ppagent/pinpoint.config

# ip為pinpoint-collecter的服務器ip
profiler.collector.ip=10.2.42.59

配置tomcat的Catalina.sh啟動腳本,在腳本中加入如下代碼

CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"

如果是jar包,直接用Java啟動,需要跟下面參數

java -javaagent:/home/tomcat/tmp/ppagent/pinpoint-bootstrap-1.7.1.jar -Dpinpoint.agentId=jss-spring-boot-app11201 -Dpinpoint.applicationName=jss-spring-boot-app -jar jssSpringBootDemo-0.0.1-SNAPSHOT.jar

配置完后重啟tomcat,然后在WEB端查看如下:
image.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM