中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

發布時間:2022-03-04 09:43:19 來源:億速云 閱讀:491 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題”這篇文章吧。

1.全鏈路監控的概念

隨著微服務架構的流行,服務按照不同的緯度進行拆分,一次請求往往需要設計到多個微服務程序,這些服務可能使用不同的編程語言開發,不同的團隊開發,可能部署很多歌副本,因此就需要一些可以幫助理解系統行為,用于分析性能問題的工具,以便發生故障的時候,能夠快速定位和解決問題,這個工具就是全鏈路監控組件。

全鏈路監控組件可以監控每個微服務程序之間通信的一個數據指標,可以幫助運維好很好的分析一個請求時如何轉發到各個微服務之間以及微服務之間的調度。

全鏈路性能監控,從整體緯度到局部緯度展示各項指標,將跨應用的所有調度鏈性能信息幾種展現,方便度量整體和局部的性能,并且方面找到故障產生的源頭,生產上可以極大縮短故障的排除時間。

全鏈路監控解決的問題:

  • 請求鏈路追蹤

通過監控可以分析服務之間的調用關系,繪制運行時的拓撲信息,可視化展示。

  • 調用情況衡量

各個調用環節的性能分析,例如吞吐量、響應時間、錯誤次數

  • 容器規劃參考

根據監控數據的分析,可以及時的對微服務進行擴容/縮容、服務降級、流量控制

  • 運行情況反饋

通過監控數據和業務日志快速定位錯誤信息

全鏈路監控工具有很多種,應該從下面幾種方面去選擇

  • 探針的性能消耗

全鏈路監控工具都需要開啟一個探針才能對微服務的鏈路進行監控,因此我們要選擇對服務的影響盡可能的少、數據分析的要快,性能占用小的工具。

  • 代碼的侵入性

部分的鏈路監控工具還需要在應用程序的代碼中集成,我們應該選擇盡可能不改業務程序代碼的同時也能把微服務監控起來的工具,減少開發人員的負擔。

  • 監控緯度

監控的數據要全方面、要到位、監控指標越多越好。

  • 可擴展性

工具可以支持分部署部署,具備良好的擴展性。

主流的鏈路監控工具由zipkin、skywalking、pinpoint。

2.pinpoint鏈路監控組件的介紹

pinpoint是一個APM(應用程序性能管理)的工具,適用于JAVA/PHP編寫的大型分布式系統。

pinpoint的特性:

  • 服務地圖(serverMap):通過可視化分布式系統的模塊和他們之間的相互來展示系統拓撲,點擊某個節點會展示該模塊的詳情,比如當前的狀態和請求數量。

  • 實時活動性線程圖(Realtime Active Thread Chart):實時監控應用內部的活動線程。

  • 請求響應分布圖(Request/Response Scatter Chart):長期可視化請求數量和應答模式來定位潛在問題。

  • 調用棧(CallStack):在分布式環境中為每個調用生成代碼級別的可視圖,在單個視圖中定位瓶頸和失敗點檢查器(Inspector):查看應用上的其他詳細信息,比如CPU使用率、內存/垃圾回收、TPS和JVM參數。

pinpoint架構

pinpoint agent會部署在程序服務器上,程序啟動時會指定agent服務,由pinpoint collector獲取微服務之間的鏈路監控,然后存儲在Hbase數據庫中,pinpoint web ui展示監控數據。

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

3.使用docker部署pinpoint監控組件

pinpoint托管在github上,拉取鏡像非常慢,可以從百度網盤上獲取。

pinpoint對docker-compose的版本也要要求,最好在1.25版本以上。

1.下載docker-compose
# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose 
# chmod a+x /usr/local/bin/docker-compose 

2.下載pinpoint docker部署安裝包
# wget https://codeload.github.com/pinpoint-apm/pinpoint-docker/zip/refs/tags/1.8.5

3.部署pinpoint
# unzip pinpoint-docker-1.8.5.zip
# docker-compose pull && docker-compose up -d

4.如果網速不行,就采用下載的方式部署
#導入pinpoint鏡像
[root@binary-k8s-node2 ~]# cd pinpoint-image/
[root@binary-k8s-node2 pinpoint-image]# for i in `ls`; do docker load -i $i; done
#部署pinpoint
[root@binary-k8s-node2 ~]# unzip pinpoint-docker-1.8.5.zip >/dev/null
[root@binary-k8s-node2 ~]# cd pinpoint-docker-1.8.5/
[root@binary-k8s-node2 pinpoint-docker-1.8.5]# docker-compose up -d
Creating pinpoint-docker-185_zoo2_1 ... done
Creating pinpoint-flink-jobmanager  ... done
Creating pinpoint-docker-185_zoo1_1 ... done
Creating pinpoint-hbase             ... done
Creating pinpoint-mysql             ... done
Creating pinpoint-docker-185_zoo3_1 ... done
Creating pinpoint-flink-taskmanager ... done
Creating pinpoint-collector         ... done
Creating pinpoint-web               ... done
Creating pinpoint-agent             ... done
Creating pinpoint-quickstart        ... done

[root@binary-k8s-node2 pinpoint-docker-1.8.5]# docker-compose ps

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

pinpoint-web容器提供頁面展示,已經將容器的8080端口映射成了8039端口,直接訪問8079端口即可。

pinpoint自帶了一個quickapp的展示模板

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

4.在微服務中集成pinpoint-agent

4.1.pinpoint-agent的接入方式

Tomcat方式接入pinpoint-agent方式
需要修改bin/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"

java -jar啟動程序的方式如下
直接在啟動命令中增加即可
java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=$AGENT_ID
-Dpinpoint.applicationName=$APPLICATION_NAME xxx.jar

-javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar			#agent程序的的jar包
-Dpinpoint.agentId=$AGENT_ID					#程序計入pinpoint的一個id號,每個微服務副本節點都要求唯一
-Dpinpoint.applicationName=$APPLICATION_NAME				#應用組名,一個相同的微服務他們的應用組名要保持一樣

下載pinpoint-agent程序

點擊設置—>installation

https://github.com/pinpoint-apm/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

4.2.配置pinpoint-agent

配置pinpoint-agent,然后將pinpoint-agent目錄拷貝到每一個微服務的程序代碼目錄中。

1.下載pinpoint-agent
[root@binary-k8s-master1 ~]# wget https://github.com/pinpoint-apm/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz

2.配置pinpoint
[root@binary-k8s-master1 ~]# vim pinpoint-agent/pinpoint.config 
profiler.collector.ip=192.168.20.13				#指定pinpoint collector組件的IP地址

3.將pinpoint拷貝到每個微服務的代碼目錄中
[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/{eureka-service,gateway-service,portal-service}
[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/product-service/product-service-biz/
[root@binary-k8s-master1 ~]# cp -rp pinp springcloud/simple-microservice-dev1/stock-service/stock-service-biz/
[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/stock-service/stock-service-biz/

4.3.修改每個微服務程序的Dockerfile接入pinpoint-agent

修改每個微服務程序的Dockerfile,將pinpoint的程序目錄拷貝到容器中,然后在程序的啟動命令中加上pinpoint-agent參數,接入pinpoint,其中-Dpinpoint.agentId字段的值采用pod的名稱來定義,Dpinpoint.applicationName字段的值采用simple-服務名稱來定義。

eureke-service服務

[root@binary-k8s-master1 simple-microservice-dev1]# vim eureka-service/Dockerfile 
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/eureka-service -p
COPY ./target/eureka-service.jar /data/simple-microservice/eureka-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-eureka -Deureka.instance.hostname=${MY_POD_NAME}.eureka-service.simple-ms /data/simple-microservice/eureka-service/eureka-service.jar > /data/simple-microservice/eureka-service/eureka-service.log & \ntail -f /data/simple-microservice/eureka-service/eureka-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh


############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-eureka -Deureka.instance.hostname=${MY_POD_NAME}.eureka-service.simple-ms /data/simple-microservice/eureka-service/eureka-service.jar

gateway-service服務

[root@binary-k8s-master1 simple-microservice-dev1]# vim gateway-service/Dockerfile 
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/gateway-service -p
COPY ./target/gateway-service.jar /data/simple-microservice/gateway-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-gateway /data/simple-microservice/gateway-service/gateway-service.jar > /data/simple-microservice/gateway-service/gateway-service.log & \ntail -f /data/simple-microservice/gateway-service/gateway-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh


############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-gateway /data/simple-microservice/gateway-service/gateway-service.jar

order-service服務

[root@binary-k8s-master1 simple-microservice-dev1]# vim order-service/order-service-biz/Dockerfile 
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/order-service -p
COPY ./target/order-service-biz.jar /data/simple-microservice/order-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-order  /data/simple-microservice/order-service/order-service-biz.jar > /data/simple-microservice/order-service/order-service-biz.log & \ntail -f /data/simple-microservice/order-service/order-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh


############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-order  /data/simple-microservice/order-service/order-service-biz.jar

portal-service服務

[root@binary-k8s-master1 simple-microservice-dev1]# vim portal-service/Dockerfile 
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/portal-service -p
COPY ./target/portal-service.jar /data/simple-microservice/portal-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-portal /data/simple-microservice/portal-service/portal-service.jar > /data/simple-microservice/portal-service/portal-service.log & \ntail -f /data/simple-microservice/portal-service/portal-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh


############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-protal /data/simple-microservice/portal-service/portal-service.jar

product-service服務

[root@binary-k8s-master1 simple-microservice-dev1]# vim product-service/product-service-biz/Dockerfile 
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/product-service -p
COPY ./target/product-service-biz.jar /data/simple-microservice/product-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-product /data/simple-microservice/product-service/product-service-biz.jar > /data/simple-microservice/product-service/product-service-biz.log & \ntail -f /data/simple-microservice/product-service/product-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh


############################################
java -jar -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-product /data/simple-microservice/product-service/product-service-biz.jar

stock-service服務

[root@binary-k8s-master1 simple-microservice-dev1]# vim stock-service/stock-service-biz/Dockerfile 
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/stock-service -p
COPY ./target/stock-service-biz.jar /data/simple-microservice/stock-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-stock /data/simple-microservice/stock-service/stock-service-biz.jar > /data/simple-microservice/stock-service/stock-service-biz.log & \ntail -f /data/simple-microservice/stock-service/stock-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh


java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-stock /data/simple-microservice/stock-service/stock-service-biz.jar

4.4.先將product商品服務接入到pinpoint觀察效果

我們接入pinpoint的Dockerfile已經寫好,直接使用腳本將produce重新部署一下即可。

sh deploy_k8s.sh product-service
[root@binary-k8s-master1 k8s]# kubectl get pod -n simple-ms
NAME                       READY   STATUS    RESTARTS   AGE
eureka-0                   1/1     Running   1          6d17h
eureka-1                   1/1     Running   0          6d17h
eureka-2                   1/1     Running   1          6d17h
gateway-7bb79fdbc4-vvnct   1/1     Running   0          6d11h
order-6694f4c474-rg7kw     1/1     Running   0          6d17h
portal-697fdf95dd-ml86k    1/1     Running   0          6d16h
product-847bb6d9fc-cs692   1/1     Running   0          10m						#重新部署
stock-6cf98bb445-l8gxb     1/1     Running   0          6d19h

product部署好之后在portal門戶網站上購買一個商品,產生product商品微服務的請求,觀察pinpoint上的鏈路狀態。

product商品微服務下單之后會調用stock庫存微服務,stock微服務還沒有接入到pinpoint中,所以在看pinpoint上鏈路監控時,就會發現stock只會以ip的形式展示。

可以在鏈路監控視圖中看到服務之間調用請求的次數,以及是如何調用的。

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

4.5.將所有的微服務接入到pinpoint系統

Dockerfile已經調整好,只需要執行咱們寫好的部署腳本,將所有的微服務根據最新的Dockerfile制作出最新的鏡像,然后在K8S集群中重新部署一下即可。

deploy_k8s腳本不跟任何位置參數就表示將所有的微服務程序全部更新部署。

[root@binary-k8s-master1 k8s]# sh deploy_k8s.sh

在門戶網站中購買兩個商品觀察微服務之間的調用。

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

5.pinpoint監控系統簡單使用

在監控視圖的右側可以選擇不同的微服務副本節點、程序之間的調用、請求成功失敗的次數

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

5.1.查看程序代碼類之間是怎么調用其他微服務的

1)點擊view servers可以隨機切換各個副本節點

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

2)點擊右側最上面的統計圖,然后找到圖中的小點,選中這個小點就會跳轉到代碼調用的頁面

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

3)選中完之后會立即跳轉,然后點擊該請求

請求成功的監控內容

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

請求失敗的監控內容

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

4)這里還會有比之前更豐富的視圖

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

5)點擊mixed view會看到更加豐富的展示視圖

請求成功的

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

請求失敗的

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

5.2.查看微服務的JVM監控信息

1)點擊inspector

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

2)選擇指定的副本節點

這些名稱都是通過在啟動命令中加的-Dpinpoint.agentId=${HOSTNAME}參數生效的

如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題

以上是“如何解決基于Pinpoint對SpringCloud微服務項目實現全鏈路監控的問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴旗县| 启东市| 怀仁县| 酒泉市| 河东区| 滨州市| 富阳市| 凤台县| 瓦房店市| 常州市| 盐亭县| 宜宾县| 都兰县| 东明县| 满洲里市| 容城县| 宽城| 永新县| 普兰店市| 丹江口市| 自治县| 商河县| 太和县| 宁远县| 滨海县| 康保县| 璧山县| 渝中区| 彭州市| 郯城县| 廊坊市| 祁阳县| 天台县| 牟定县| 芜湖县| 宾川县| 龙口市| 德江县| 祁连县| 周宁县| 沈丘县|