Pinpoint部署和踩坑記錄

pinpoint是韓國人開源的 APM (Application Performance Management/應用性能管理)工具 - Pinpoint。它基於google Dapper開發,目標就是爲n(n>=1)層架構開發新的跟蹤平臺,爲n層架構的系統提供解決方案。pinpoint能夠對基於java的大規模分佈式系統和應用做調用鏈的跟蹤。pinpoint提供了一個web頁面展示分佈式系統的拓撲圖以及系統這各個組件之間關係。pinpoint 有3個主要組件組成:日誌收集器[Collector]、控制檯[Web]、代理[Agent],採用HBase進行存儲。請結合下文的Pinpoin架構圖來理解各組件之間如何分工合作的。

Pinpoint的特點如下:

  • 分佈式事務跟蹤,跟蹤跨分佈式應用的消息
  • 自動檢測應用拓撲,幫助你搞清楚應用的架構
  • 水平擴展以便支持大規模服務器集羣
  • 提供代碼級別的可見性以便輕鬆定位失敗點和瓶頸
  • 使用字節碼增強技術,添加新功能而無需修改代碼
  • 安裝探針不需要修改哪怕一行代碼及trace server端部署簡單,支持hdfs存儲
  • 具有簡單的閥值觸發報警功能
  • 移植性比較強的,會比較討人喜歡(相比cat)
  • 自定義插件功能(參考https://github.com/naver/pinpoint/wiki/Pinpoint-Plugin-Developer-Guide)

本文的部署方式也適用於最新的1.8.3版。

集羣角色規劃

IP address

Hostname

Service

10.203.11.2

cdh-test-1-4

zk,nn1,zkfc,hmaster,pp_collector,pp_web

10.203.11.3

cdh-test-1-5

zk,nn2,zkfc,hmaster,pp_agent

10.203.11.4

cdh-test-1-1

zk,datanode,nm,hrs,jn

10.203.11.5

cdh-test-1-3

datanode,nm,hrs,jn

10.203.11.6

cdh-test-1-2

datanode,nm,hrs,jn

Pinpoint collctor採集器和web服部署在4號機:

pinpoint agent測試用的項目(tomcat服)部署在5號機:

Pinpoint部署步

1、在cdh-test-1-4主機配JDK、裝hbase、裝Pinpoint的collector和web組件

1.1 需要安裝Java

從oracle官網下載、安裝jdk-1.8.0後,在/etc/profile文件配置環境變量

export PATH=$PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64/bin

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64

export HADOOP_HOME=/tony_soft/hadoop-2.8.4

export HBASE_HOME=/tony_soft/hbase-1.4.9

export ZOOKEEPER_HOME=/tony_soft/zookeeper-3.4.14

使配置生效:source /etc/profile

 

1.2 安裝Hbase

解壓Hbase放入指定目錄

修改 /hbase/conf/hbase-env.sh 中的JAVA_HOME環境變量位置

export JAVA_HOME=/usr/java/jdk8/

在使用JDK8的情況下, hbase-env.sh中這兩行可以註釋,避免啓動警告。

https://upload-images.jianshu.io/upload_images/2435527-63f353aa78f2001f.png?imageMogr2/auto-orient/

修改Hbase的配置信息
[hadoop@cdh-test-1-4 ~]$ grep --color -C 3 "hbase.rootdir" $HBASE_HOME/conf/hbase-site.xml

-->

<configuration>

  <property>

    <name>hbase.rootdir</name>

    <value>hdfs://tony/hbase</value>

    <description>指定hdfs上的HRegionServers共享目錄</description>

  </property>

先啓動hbase(我這裏是hbase集羣模式) cd /tony_soft/hbase/bin && ./start-hbase.sh

再初始化Hbase的pinpoint庫: 執行pinpoint提供的Hbase初始化語句用於創建pinpoint所需的表

./hbase shell /home/pp_res/hbase-create.hbase

創建成功後進到hbase shell可看到16張表已建好:

在web UI也能看到HBase的16張表

1.3 安裝部署pinpointcollector組件

解壓tomcat到指定位置,用於部署pinpoint-collector

cd /home/pp_res/

tar -zxvf apache-tomcat-8.5.40.tar.gz

mv apache-tomcat-8.5.40/ /tony_soft/pp_col

# 修改pp_col的Tomcat配置,修改端口,避免與下面部署的pp_web服務有關端口衝突。

cd /tony_soft/pp_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

解壓pinpoint的collector的war包

cd /home/pp_res/

rm -rf /tony_soft/pp_col/webapps/*     # 清空默認配置

用unzip解壓pinpoint的collector組件:

unzip /tony_soft/pinpoint/resource/pinpoint-collector-1.7.3.war -d /tony_soft/pp_col/webapps/ROOT

(如果沒有unzip,執行yum -y install unzip安裝unzip)

啓動第一個Tomcat服務:cd /tony_soft/pp_col/bin/ && ./startup.sh

成功後可在/tony_soft/pp_col/logs目錄下的 catalina.out看到啓動日誌,查看啓動過程是否出現錯誤

1.4 部署pinpointweb組件

再次解壓Tomcat後move到指定位置,這個tomcat用於部署pp_web

cd /home/pp_res/

tar -zxvf apache-tomcat-8.5.40.tar.gz

mv apache-tomcat-8.5.40/ /tony_soft/pp_web

# 同樣的,修改一下pp_web有關的端口號

cd /tony_soft/pp_web/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

解壓pinpoint web組件的war包

rm -rf /tony_soft/pp_web/webapps/*   # 清空默認配置

unzip pinpoint的web組件

[root@cdh-test-1-4 classes]#  unzip /tony_soft/pinpoint/resource/pinpoint-web-1.7.3.war -d /tony_soft/pp_web/webapps/ROOT

/tony_soft/pp_web/webapps/ROOT/WEB-INF/classes下的配置文件說明:

  • hbase.properties:配置pp_web從哪個數據源獲取採集數據,這裏我只指定Hbase的zk地址(在4號機)

  • jdbc.properties :pp_web連接自身Mysql數據庫的連接認證配置文件

  • sql目錄 pp_web本身有些數據需要存放在MySQL數據庫中,需初始化表結構(執行兩個.sql腳本即可)
  • pinpoint的web組件
  • .properties :這裏pp_web集羣的配置文件(如果你需要pp_web集羣)
  • applicationContext-* .xml :這些文件在未來調優中會用到
  • log4j.xml :日誌相關配置

因爲我要在同一個主機下同時運行兩個Tomcat,需要先幹三件事——

第一件事,先停掉剛纔啓動的collector的tomcat服務,再去配置兩套環境變量:

使這兩組環境變量生效:source /etc/profile

第二件事,server.xml中配置端口不衝突(請參考上文步驟1.3)

第三件事,修改collector組件的Tomcat腳本startup.sh、shutdown.sh,在各自文件末尾都添加這幾行:

export JAVA_HOME=$JAVA_HOME

export PATH=$PATH:$JAVA_HOME/bin 

export CLASSPATH=$JAVA_HOME/lib 

export CATALINA_HOME=$CATALINA_HOME 

export CATALINA_BASE=$CATALINA_BASE

修改web組件的Tomcat的腳本startup.sh、shutdown.sh,在各自文件末尾都添加這幾行:

export JAVA_HOME=$JAVA_HOME

export PATH=$PATH:$JAVA_HOME/bin 

export CLASSPATH=$JAVA_HOME/lib 

export CATALINA_HOME=$CATALINA_2_HOME 

export CATALINA_BASE=$CATALINA_2_BASE

先啓動第一個Tomcat:cd /tony_soft/pp_col/bin/ && ./startup.sh

再啓動第二個Tomcat:cd /tony_soft/pp_web/bin/ && ./startup.sh

同樣的,可以打開catalina.out文件來查看啓動是否完成、啓動過程是否出現錯誤等


pp_col和pp_web啓動完成,可看到相關的端口處於LISTEN狀態,1開頭的端口號是pinpoint collector有關的服務端口,2開頭的是pinpoin web有關的:

去瀏覽器中進行訪問。輸入地址http://${yourIPaddress}:28080 進入PinPoint的Web頁面:

 

 

2、在cdh-test-1-5主機上部署測試項目及PinPoint-Agent組件

首先,也要把所需文件放到cdh-test-1-5主機上的的 /tony_soft/pp_test 目錄下,包括pinpoint-agent-1.7.3.tar.gz、jdk、tomcat、test.war

2.1 參考上文1.1的安裝、配置jdk

 

2.2 部署測試項

解壓tomcat到指定目錄,用於部署測試項目

[root@cdh-test-1-5]# cd /tony_soft/pp_test

[root@cdh-test-1-5 pp_test]# tar -zxvf apache-tomcat-8.5.40.tar.gz

[root@cdh-test-1-5]# mv apache-tomcat-8.5.40  /tony_soft/pp_test/

從war包部署測試項目

cd /tony_soft/pp_test/

rm -rf /tony_soft/pp_test/webapps/*

[root@cdh-test-1-5 bin]# unzip /tony_soft/test.war -d /tony_soft/pp_test/webapps/ROOT

運行後直接訪問8080端口或者8080/test即可。其中/test是會發生異常的,方便後面的警報功能測試。

在繼續安裝pp_agent開始監控應用之前,做一個小結:

(1)如果Hbase不是和pp-web, pp-col裝在一臺機器,需要安裝zookeeper,只需安裝並確認在監聽2181端口

(2)如果zookeeper安裝在獨立機器上,需修改pp_col 和 pp_web的配置文件pinpoint-collector.properties和pinpoint-web.properties,否則會導致pp_col和pp_web模塊無法啓動

 

2.3 安裝配置pp_agent

cd /tony_soft/pp_test

mkdir -p /tony_soft/pp_agent

tar -zxvf pinpoint-agent-1.7.3.tar.gz -C /tony_soft/pp_agent
修改/tony_soft/pp_agent/pinpoint.config,把裏面的 profiler.collector.ip 的值改爲裝有pinpoint collector組件的ip地址。

再去修改啓動腳本/tony_soft/pp_test/bin/catalina.sh,通過添加下列三行來添加探針:

這些探針是爲了agent把被監控應用的相關數據發送到collector。三行代碼分別代表:

  • pp_agent目錄下 pinpoint-bootstrap-1.7.3.jar包的絕對路徑
  • pp_agent的唯一ID,不能與被監控的其他項目相同
  • 被採集項目的名稱,pp_web頁面中下拉框選擇項目時顯示的名字

配置好後啓動測試項目

cd /tony_soft/pp_test/bin/ && ./startup.sh

 

3、Pinpoint的Alarm功能需要MySQL服務

如果要使用Pinpoint的Alarm功能需要MySQL服務支持,否則點擊pp web頁面右上角的齒輪後,其中一些功能(如編輯用戶、用戶組、報警等功能)會出現如圖所示的異常:

所以需要先使用pp_web組件自帶的sql文件創建有關的表

在MYSQL裏面建了兩張表以後,pp_web頁面仍然無法正常顯示User Group,解決辦法請看下文“2019-50-28第三次踩坑記錄”。

最後來看一下pinpoint的架構:

架構中各組件的角色:

pinpoint web UI顯示的內容來自於後端的pinpoint web服務,

pinpoint web服務會去hbase中取數,

collector會把來自於agent的數據採集上來,由collector存入hbase(本案例採用hbase集羣模式,不是單機HBASE)。

Demo展示時,可以把pp collector服務和pp web服務部署在同一個主機上,方便collector接收agent發來的數據後發給web服務,web服務再對hbase讀/寫;agent服務部署在應用端,方便將數據發送給collector。

 

 

======2019-05-27第一次踩坑=======

 

在重啓pp_col和pp_web時出現故障:pp_col能重啓,但是無法啓動pp_web

(1)重啓pp_col、pp_web,pp_col成功重啓、pp_web失敗重啓

(2)重啓pp_web、pp_col,pp_col成功重啓、pp_web失敗重啓

(3)查看相關日誌後發現有is very like to cause memory leak字樣

(4)原因:在4號機上同pp_col和pp_web服致內存不足,致了無法同運行col服和web服。那麼改成pp_col在4號機啓動,pp_web在1號機啓動(http端口號是28080),之後發現在瀏覽器訪問28080端口頁面時打不開。原因很有可能是之前只是放行了從外網訪問4號機IP地址的28080端口,而沒有放行從外網訪問1號機IP地址的28080端口。

所以現在改成在4號機啓動pp_web服務,在1號機啓動pp_col服務。需要修改相關的/etc/profile(CATALINA_HOME、CATALINA_BASE環境變量)、/tony_soft/pp_col/conf/server.xml(有關端口)後成功啓動各自的pp_col、pp_web :

測試的項目日誌也表明啓動成功:

 

 

======2019-05-28第二次踩坑記錄======

 

【解決web頁不顯示應用問題】

昨天和今天都被一個問題困擾,就是web頁面不顯示已添加到pp_agent的java應用,下面是解決過程。

第一次嘗試——

先是分別重啓pp_collector、pp_web、pp_agent、pp_test(java應用程序),仍不顯示被agent打了探針的應用, 如截圖:

第二次嘗試——

檢查過各主機的/etc/hosts文件,檢查過主機間的網絡通信,都沒問題。

百思不得其解,再次查看pinpoint架構圖後突然靈光一閃!聯想到pp_web顯示數據的來源是hbase,hbase的數據來源是collector,而collector的數據由agent發來。既然agent已經隨着java的test應用啓動了,那麼agent是否將應用的數據成功發送到collector了呢?如果成功發送了應用的數據,那麼web頁應該顯示已添加的application呀!然後去檢查/tony_soft/pp_agent/pinpoint.config配置文件,發現配置項profiler.collector.ip寫的不是collector所在的IP地址。推測這個錯誤很可能是導致web頁面的application list下拉框不顯示已添加的application原因。改成collector所在主機的IP地址後,依次重啓pp_collector、pp_web服務、pp_agent、pp_test應用,再去查看web頁,證明推測是對的:

到pp_test也就是測試用的java應用的web頁面http://${yourIP}:8080/多訪問幾下,發現hbase的requests數目也大於0了,證實了推測正確:

 

 

===========2019-50-28第三次踩坑記錄==========

 

【web頁面用戶組管理頁問題】

現象——

爲了將來使用Alarm功能對指定用戶提供告警,需要配置用戶和用戶組。在web頁點擊右上角的齒輪後,發現查看User Group時發現錯誤提示,如截圖:

第一次排查——

進到pp_web服務所在的日誌目錄,查看最新的日誌catalina.out,發現有Unknow database ‘pinpoint’字樣:

2019-05-28 14:04:10 [ERROR](c.n.p.w.c.UserGroupController      ) Exception occurred while trying to CRUD userGroup information

org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Unknown database 'pinpoint')

        at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:289)

然後檢查$CATALINA_HOME//webapps/ROOT/WEB-INF/classes/jdbc.properties,發現日誌裏提到的庫名沒在mysql中:

原因是之前通過兩個.sql腳本初始化的數據庫表都沒在pinpoint庫名下。於是先到數據庫中創建pinpoint庫:

然後分別重啓pp_web、pp_col、test應用,再到web頁面查看User Group,仍然報錯。

 

第二次排查——

通過web頁面的User Group嘗試創建用戶,報錯:

再去查看最新的catalina.out日誌,發現有提示說pinpoint下面的puser表不存在:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'pinpoint.puser' doesn't exist

進到mysql shell檢查之前通過pp_web組件自帶的sql文件創建的表,發現puser表不屬於pinpoint庫

解決辦法是把那些表都拷貝到pinpoint庫下面:

拷貝完以後,不用重啓pp_web服務,到web頁面重新查看和操作用戶和用戶組,發現沒有報錯了:

再添加多個用戶以後,能在mysql shell中查看到該用戶了:

添加用戶組:

創建用戶組成功後,將用戶tony_test1添加到組裏:

 

 

=========下一步=========

 

需要加入更多的JAVA應用到pinpoint-agent當中,以便監控java作業運行情況、方便定位應用故障、方便發現應用的性能問題和大數據集羣的性能問題。

例如,在部署了pinpoint-web、pinpoint-collector、hbase集羣、pinpoint-agent的集羣上,如果想要監控一個通過jar包啓動的應用,那麼可以通過下列方式爲應用部署pinpoint-agent探針:

java -javaagent:/tony_soft/pp_agent/pinpoint-bootstrap-1.7.3.jar \

-Dpinpoint.agentId=pp_agentID_2019-05-28 -Dpinpoint.applicationName=monitor-service \

-jar monitor-service-0.0.1-SNAPSHOT.jar

應用啓動後,可以在web頁的應用列表裏看到:

監控其他java應用的做法也是類似的,就是通過在啓動java應用的時候像剛纔那樣添加啓動參數即可,不需要改java應用的代碼。

jar包monitor-service-0.0.1-SNAPSHOT.jar啓動之後,裏面的應用程序會去查mysql數據庫,那麼pinpoint-agent能跟蹤到,但是我的web頁中的拓撲圖沒顯示MySQL組件,如截圖:

但是,點擊頁面的Inspetor按鈕之後,就能在頁面底部Mysql有關信息,如截圖:

【未完, 待續。。。】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章