一、介紹
Pinpoint是用Java編寫的大型分布式系統的APM(Application Performance Management應用程序性能管理)工具,受Dapper論文的啟發,Pinpoint 通過跟蹤分布式應用之間的調用來提供解決方案,以幫助分析系統的總體結構和內部模塊之間如何相互聯系,2012年7月開始開發,在2015年1月作為一個開源項目啟動, 是一個為大型分布式系統服務的n層架構跟蹤平台。
Pinpoint的特點如下:
- 分布式事務跟蹤,跟蹤跨分布式應用的消息
- 自動檢測應用拓撲,幫助你搞清楚應用的架構
- 水平擴展以便支持大規模服務器集群
- 提供代碼級別的可見性以便輕松定位失敗點和瓶頸
- 使用字節碼檢測技術添加無需修改代碼的新功能
Pinpoint主要由四部分組成:
- Agent:用於收集應用端監控數據,無侵入式,向收集器發送跟蹤數據
- Collector:收集器,處理agent端發送過來的數據,並持久化
- Web:展示系統調用關系、調用詳情、應用狀態等,並支持報警等功能
- HBase:持久化層
Agent的采集原理:
配置Pinpoint主要的點就是安裝配置Agent,通過字節碼增強技術(有的叫動態探針技術)來實現無侵入式的調用鏈采集。其核心實現還是基於JVM的javaAgent機制來實現,Agent附加到應用程序采樣,也叫做埋點,主要實現是在agent配置文件pinpoint.config中修改配置profiler.collector.ip為collector所在服務器ip,這樣才能將采集到的數據發送給collector收集器,然后就是為需要采集的應用程序埋點,在tomcat啟動腳本catalina.sh中配置javaagent:pinpoint-bootstrap-$VERSION.jar的jar包,然后配置下id和應用程序名稱就ok了,windows和linux系統的tomcat稍有不同,windows系統下tomcat的bin目錄下是catalina.bat,是以bat結尾的dos批處理文件,linux系統下是catalina.sh,是以sh結尾的利用shell進行解釋的腳本文件。配置好后啟動就會按配置的agent路徑加載,在啟動的時候agent將在加載應用class文件之前做攔截並修改字節碼,在class方法調用的前后加上鏈路采集邏輯,從而實現鏈路采集功能。所以叫字節碼增強技術,非侵入式是說不需要修改應用的代碼,就可以完成agent的部署。javaAgent的底層機制主要依賴JVMTI ,JVMTI全稱JVM Tool Interface,是JVM暴露出來的一些供用戶擴展的接口集合。JVMTI是基於事件驅動的,JVM每執行到一定的邏輯就會調用一些事件的回調接口(如果有的話),這些接口可以供開發者擴展自己的邏輯。但JVMTI都是一些接口合集,需要有接口的實現,這就用到了java的instrument,可以理解instrument是JVMTI的一種實現,為JVM提供外掛支持。instrument支持啟動時加載和運行時加載兩種方式,分別實現JVMTI的Agent_OnLoad和Agent_OnAttach方法;pinpoint目前采用的是啟動時加載方式。
二、安裝
安裝分為docker方式安裝和手動編譯源碼的方式安裝,也可以通過QuickStart快速安裝,QuickStart是使用的mvn 自帶的tomcat插件來啟動的webUI和collector。隨着部署的服務增多,數據量上來之后,難免需要進行一些參數設置,這個時候麻煩就來了。因此如果最終目的是生產的話,直接按照Installation進行,由於使用docker方式進行安裝較為方便以及學習運用下docker,所以我采用docker的方式進行安裝。
安裝步驟:
1.首先在已經安裝git的條件下執行如下命令,如果沒有安裝git,可以使用yum方式進行安裝,克隆該項目。
git clone https://github.com/naver/pinpoint-docker.git
克隆較慢,時間太長,所以我在windows環境下下載了項目然后傳到了linux服務器上,由於傳的是zip形式的壓縮包所以通過yum安裝了unzip然后對壓縮包解壓。
2.安裝docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
3.將可執行權限應用於二進制文件
sudo chmod +x /usr/local/bin/docker-compose
4.查看是否安裝成功
docker-compose –version
5.進入該目錄
cd pinpoint-docker
6.拉取鏡像並創建運行容器
docker-compose pull && docker-compose up -d
我是分步進行,首先先進行pull操作拉取鏡像,這個過程非常慢,甚至出現了幾次錯誤,然后就重新進行拉取,已經下載好的鏡像不會重新下載。
下載好的鏡像如下:

啟動的容器如下:


三、使用
我自己裝的Linux服務器IP為192.168.0.125,所以下文IP就寫該地址。
1.瀏覽器訪問Pinpoint的web頁面: http://192.168.0.125:8079/,出現頁面如下:

2.瀏覽器訪問HBase頁面:http://192.168.0.125:16010/,出現頁面如下:

3.如果上面兩個頁面都能正常訪問,那么docker方式部署Pinpoint成功。
4.flink是可選項,Pinpoint使用flink預統計數據來優化查詢性能,flink作為目前最先進的流式處理框架,性能優秀,一致性保證,輕量級容錯。瀏覽器訪問flink頁面:http://192.168.0.125:8081/,出現頁面如下:

5.訪問http://192.168.0.125:8000/頁面的任意接口,就可以在web界面查看到訪問信息。

6.首頁相關介紹


