Tags: APM
pinpoint調用鏈工具初識
===
在本文中重點講一下pinpoint工具的架構,安裝和部署; html
Pinpoint是一款對Java編寫的大規模分佈式系統的APM工具,有些人也喜歡稱呼這類工具爲調用鏈系統、分佈式跟蹤系統。咱們知道,前端向後臺發起一個查詢請求,後臺服務可能要調用多個服務,每一個服務可能又會調用其它服務,最終將結果返回,彙總到頁面上。若是某個環節發生異常,工程師很難準肯定位這個問題究竟是由哪一個服務調用形成的,Pinpoint等相關工具的做用就是追蹤每一個請求的完整調用鏈路,收集調用鏈路上每一個服務的性能數據,方便工程師可以快速定位問題。
pinpoint對服務器性能的影響很是小(只增長約3%資源利用率),安裝agent是無侵入式的,只須要在被測試的Tomcat中加上3句話,打下探針,就能夠監控整套程序了。相似的工具包括google的Dapper,twitter的Zipkin,淘寶的鷹眼(EdleEye),大衆點評的CAT,還有國內開源的skywalking,商業的聽雲APM工具等;前端
Pinpoint以Hbase做爲存儲的數據庫。HBase是Apache Hadoop的數據庫,可以對大型數據提供隨機、實時的讀寫訪問,是Google的BigTable的開源實現。HBase的目標是存儲並處理大型的數據,更具體地說僅用普通的硬件配置,可以處理成千上萬的行和列所組成的大型數據庫。HBase是一個開源的、分佈式的、多版本的、面向列的存儲模型。能夠直接使用本地文件系統,也可以使用Hadoop的HDFS文件存儲系統。爲了提升數據的可靠性和系統的健壯性,而且發揮HBase處理大型數據的能力,仍是使用HDFS做爲文件存儲系統更佳。
HBase的服務器體系結構聽從簡單的主從服務器架構,它由HRegion Server羣和HBase Master服務器構成。HBase Master負責管理全部的HRegionServer,而HBase中的全部RegionServer都是經過ZooKeeper來協調,並處理HBase服務器運行期間可能遇到的錯誤。
HBase Master Server自己並不存儲HBase中的任何數據,HBase邏輯上的表可能會被劃分紅多個Region,而後存儲到HRegion Server羣中。HBase Master Server中存儲的是從數據到HRegion Server的映射.
HBase的安裝也有三種模式:單機模式、僞分佈模式和徹底分佈式模式,在這裏只介紹徹底分佈模式。前提是Hadoop集羣和Zookeeper已經安裝完畢,並能正確運行。 java
#在第一臺節點上面安裝zookeeper: tar xzvf zookeeper-3.4.8.tar.gz -C /usr/local/ cd /usr/local/ ln -sv zookeeper-3.4.8 zookeeper cd /usr/local/zookeeper mkdir -p data3 mkdir -p logs3 cd /usr/local/zookeeper/conf cp -r zoo_sample.cfg zoo.cfg vim zoo.cfg tickTime=2000 initLimit=5 syncLimit=2 dataDir=/usr/local/zookeeper/data3 dataLogDir=/usr/local/zookeeper/logs3 clientPort=2181 server.189=192.168.1.189:2888:3888 server.190=192.168.1.190:2888:3888 server.191=192.168.1.191:2888:3888 echo "189" >> /usr/local/zookeeper/data3/myid #將服務器的標識內容登記到/usr/local/zookeeper/data3/myid文件中,這個189是個人服務器的IP地址最後一位。 /usr/local/zookeeper/bin/zkServer.sh start #啓動服務 /usr/local/zookeeper/bin/zkServer.sh stop #中止服務 /usr/local/zookeeper/bin/zkServer.sh status #查看主從角色,leader是主角色,follower是從角色
安裝完成zk集羣以後,就須要HDFS文件系統了,由於Hbase數據庫依賴於HDFS文件系統,其實Hbase數據庫也可使用本地文件系統。只不過使用HDFS文件系統更有利用系統的健壯和性能;由於我剛開始接觸Hbase數據庫,對大數據方面的中間件還不是很熟悉,因此個人HDFS文件系統是單機的。而後我把Hbase數據庫安裝的是集羣結構的。分爲Hmaster和HRegionServer。 node
# 安裝hbase數據庫的三臺服務器都必須可以使用root登陸,而且端口是默認端口22 chattr -i /etc/ssh/sshd_config sed -i 's#PermitRootLogin no#PermitRootLogin yes#g' /etc/ssh/sshd_config sed -i 's#AllowUsers ttadm#AllowUsers ttadm root#g' /etc/ssh/sshd_config sed -i 's#10022#22#g' /etc/ssh/sshd_config systemctl restart sshd # 而後再master的這臺機器上面配置公鑰和私鑰,拷貝公鑰到另外兩臺機器 ssh-keygen -t rsa ssh-copy-id 192.168.1.190 ssh-copy-id 192.168.1.191 cd /usr/local/hbase-1.4.10/conf/ vim hbase-env.sh # 這個參數若是是true,表示使用Hbase自帶的zk,由於咱們安裝了獨立的zk集羣,因此須要將這個參數設置爲false export HBASE_MANAGES_ZK=false # The java implementation to use. Java 1.7+ required. export JAVA_HOME=/usr/local/jdk1.8.0_131 # Extra Java CLASSPATH elements. Optional. export HBASE_CLASSPATH=/usr/local/hbase-1.4.10/conf # vim hbase-site.xml <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://192.168.1.189:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 0.98後的新變更,以前版本沒有.port,默認端口爲60000 --> <property> <name>hbase.master.port</name> <value>16000</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>192.168.1.189:2181,192.168.1.190:2181,192.168.1.191:2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/usr/local/zookeeper/data3</value> </property> </configuration> # hbase-site.xml這個配置文件主要配置了Hbase的數據庫存儲路徑,依賴zk的一些信息;Hbase數據庫存儲可使用本地存儲,也可使用HDFS文件系統。若是是本地存儲,格式以下: <name>hbase.rootdir</name> <value>file:/usr/src/pinpoint_resource/hbase-1.2.4/data</value> vim regionservers 192.168.1.189 192.168.1.190 192.168.1.191 # 配置regionserver的服務器地址 cd /usr/local/hbase-1.4.10/bin ./start-hbase.sh # 啓動hbase數據庫,啓動以前須要將hbase的安裝程序和配置文件都拷貝到另外兩臺機器上面,而後配置好免密登陸以後,執行start-hbase.sh以後,會自動在另外兩臺機器上面HRegionServer。檢查的方式就是jps命令 # 兩臺從節點上面查看hbase進程 [root@SZ1PRDOAM00AP010 ~]# jps 17408 HRegionServer #表示hbase的RegionServer 16931 QuorumPeerMain #這個是zk的進程 18475 Bootstrap 24047 Jps # 在主節點上查看hbase進程 [root@SZ1PRDOAM00AP009 conf]# jps 21968 SecondaryNameNode # hdfs文件系統的進程 21793 DataNode #這個是hdfs文件系統的進程,存儲數據 98883 Jps 73397 QuorumPeerMain #zk的進程 81286 Bootstrap 74201 HRegionServer #hbase的進程 21659 NameNode # hdfs文件系統的進程,管理元數據 74061 HMaster # # 初始化pinpoint的數據庫 wget https://github.com/naver/pinpoint/blob/1.8.5/hbase/scripts/hbase-create.hbase hbase shell hbase-create.hbase # 若是須要清除數據,就下載hbase-drop.hbase腳本
Hbase數據庫安裝成功以後,有個web管理頁面能夠查看數據庫表的。http://192.168.1.189:16010/master-status,訪問16010端口就能夠查看了。其中能夠看到咱們剛纔初始化的TABLE. git
由於Hbase數據庫依賴於HDFS文件系統,因此咱們順便說一下安裝HDFS文件系統了。安裝HDFS文件系統首先先按照hadoop. github
Hadoop Common是在Hadoop0.2版本以後分離出來的HDFS和MapReduce獨立子項目的內容,是Hadoop的核心部分,能爲其餘模塊提供一些經常使用工具集,如序列化機制、Hadoop抽象文件系統FileSystem、系統配置工具Configuration,而且在爲其平臺上的軟件開發提供KPI等。其餘Hadoop子項目都是以此爲基礎而創建來的web
HDFS是分佈式文件存儲系統,相似於FAT32,NTFS,是一種文件格式,是底層的HDFS是Hadoop體系中數據存儲管理的基礎,它是一個高度容錯的系統,能檢測和應對硬件故障,在低成本的通用硬件上運行。 shell
Hbase是Hadoop database,即Hadoop數據庫。它是一個適合於非結構化數據存儲的數據庫,HBase基於列的而不是基於行的模式。HBase是一個創建在HDFS之上,面向結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。 Hbase的數據通常都存儲在HDFS上。Hadoop HDFS爲他們提供了高可靠性的底層存儲支持 數據庫
cd /usr/local wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz tar xzvf hadoop-2.9.0.tar.gz cd /usr/local/hadoop-2.9.0/etc/hadoop vim hadoop-env.sh # set JAVA_HOME in this file, so that it is correctly defined on export JAVA_HOME=/usr/local/jdk1.8.0_13 # 查看hadoop版本 cd /usr/local/hadoop-2.9.0/bin [root@SZ1PRDOAM00AP009 bin]# ./hadoop version Hadoop 2.9.0 Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 756ebc8394e473ac25feac05fa493f6d612e6c50 Compiled by arsuresh on 2017-11-13T23:15Z Compiled with protoc 2.5.0 From source with checksum 0a76a9a32a5257331741f8d5932f183 This command was run using /usr/local/hadoop-2.9.0/share/hadoop/common/hadoop-common-2.9.0.jar [root@SZ1PRDOAM00AP009 bin]# # 配置hadoop的環境變量 [root@SZ1PRDOAM00AP009 bin]# cat /etc/profile.d/hadoop.sh export HADOOP_HOME=/usr/local/hadoop export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
安裝完成hadoop以後,咱們接下來安裝hdfs文件系統。HDFS文件系統和Hadoop軟件包是一個,修改幾個配置文件就能夠了; apache
vim /usr/local/hadoop-2.9.0/etc/hadoop/core-site.xml <configuration> <property> <name>fs.default.name</name> <value>hdfs://192.168.1.189:9000</value> </property> </configuration> #配置nameNode:接收請求的地址,客戶端將請求該地址 vim /usr/local/hadoop-2.9.0/etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.name.dir</name> <value>file:///usr/local/hadoop/hdfs/namenode</value> </property> <property> <name>dfs.data.dir</name> <value>file:///usr/local/hadoop/hdfs/datanode</value> </property> </configuration> # 配置數據副本,由於咱們是單機,因此就配置了1副本。存儲目錄是本地文件的目錄。 #ssh免密碼登陸 ssh localhost #若是不支持,按順序執行下面三行命令便可 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 0600 ~/.ssh/authorized_keys #格式化 #初次使用hdfs須要進行格式化 hdfs namenode -format #啓動 #格式化完成之後,咱們就能夠啓動hdfs了 sbin/start-dfs.sh #啓動完成,咱們查看一下hdfs進程 ps -ef|grep hdfs #你會看到:nameNode\dataNode\secondaryNameNode這三個進程,則表示啓動成功,不然到logs下的對應日誌中查看錯誤信息。 #安裝好HDFS文件系統以後,能夠經過web管理頁面查看狀態; http://192.168.1.189:50070/dfshealth.html#tab-overview
pinpoint通常由三個組件組成。分別是pinpoint-Collector用來收集數據,Pinpoint-Web用來展現數據,pinpoint-agent是收集客戶端。Hbase是用來存儲數據。咱們先看看pinpoint-Collector的安裝;
wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-collector-1.8.5.war wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-web-1.8.5.war # pinpoint-collector和pinpoint-web都是war包,運行在tomcat裏面就能夠了.若是在生產環境,建議收集器和web管理界面安裝在不一樣的機器上面; cd /usrl/local/tomcat/webapps/ rm -rf * unzip pinpoint-collector-1.6.1.war -d ROOT cd /usr/local/tomcat/webapps/ROOT/WEB-INF/classes vim pinpoint-collector.properties cluster.zookeeper.address=192.168.1.191 #修改zookeeper地址 vim hbase.properties hbase.client.host=192.168.1.191 hbase.client.port=2181 #配置數據庫存儲的地址 /usr/local/tomcat/bin/startup.sh #啓動tomcat cd /usrl/local/tomcat/webapps/ rm -rf * unzip pinpoint-web-1.8.5.war -d ROOT cd /usr/local/tomcat/webapps/ROOT/WEB-INF/classes vim hbase.properties hbase.client.host=192.168.1.191 hbase.client.port=2181 #配置數據庫存儲的地址 vim pinpoint-web.properties cluster.enable=false cluster.web.tcp.port=9997 cluster.zookeeper.address=192.168.1.191 # web集羣功能禁用掉,而後配置zk的地址 /usr/local/tomcat/bin/startup.sh #啓動tomcat mkdir -p /usr/local/pinpoint-agent cd /usr/local tar xzvf pinpoint-agent-1.8.5.tar.gz -C pinpoint-agent vim pinpoint.config profiler.collector.ip=192.168.1.190 # 配置collector服務器的地址 cd scripts [root@SZ1PRDOAM00AP009 script]# sh networktest.sh CLASSPATH=./tools/pinpoint-tools-1.8.5.jar: 2019-10-15 16:13:17 [INFO ](com.navercorp.pinpoint.bootstrap.config.DefaultProfilerConfig) configuration loaded successfully. UDP-STAT:// SZ1PRDOAM00AP010.bf.cn => 192.168.1.190:9995 [SUCCESS] UDP-SPAN:// SZ1PRDOAM00AP010.bf.cn => 192.168.1.190:9996 [SUCCESS] TCP:// SZ1PRDOAM00AP010.bf.cn => 192.168.1.190:9994 [SUCCESS] [root@SZ1PRDOAM00AP009 script]# #有個網絡測試腳本,能夠測試agent到collector之間的網絡是否正常。我這裏遇到了一個問題,一直是9995端口不通。後續通過排查,將三臺主機的ip和主機名配置到/etc/hosts文件之中就能夠了。 vim /usr/local/tomcat/bin/catalina.sh JAVA_OPTS="$JAVA_OPTS -javaagent:/usr/local/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar" JAVA_OPTS="$JAVA_OPTS -Dpinpoint.agentId=gytest" JAVA_OPTS="$JAVA_OPTS -Dpinpoint.applicationName=gytest01" # 給增長agent,只須要修改catalina.sh啓動腳本就能夠,增長pinpoint的jar包路徑,應用的標識而已; -Dpinpoint.agentId - 惟一標記agent運行所在的應用(如,loan-33) -Dpinpoint.applicationName - 將許多的一樣的應用實例分組爲單一服務(如,loan) # 注意:pinpoint.agentId 必須全局惟一來標識應用實例, 而全部共用相同 pinpoint.applicationName 的應用被當成單個服務的多個實例
差很少有近三個月沒有寫技術博文了,最近老婆生了二胎家裏的事情比較多,加上年末了公司的工做也比較忙,因此一直沒有抽出時間來寫博客了,也但願你們可以諒解。最近我在公司換了一個項目在作,主要是關於統一監控的項目。涉及到了APM鏈路跟蹤,zabbix監控,業務監控等內容,有時間的話我也會將一些經驗分享出來給你們。感謝你們的持續關注。 個人微信公衆號是「雲時代IT運維」,你們能夠掃碼關注。