目錄
一、前言
二、SkyWalking介紹
2.1 SkyWalking是什么
2.2 SkyWalking核心功能
2.3 SkyWalking整體架構
2.4?SkyWalking主要工作流程
三、前置準備
3.1 搭建SkyWalking服務
3.1.1 下載安裝包
3.1.2 上傳服務器目錄
2.1.3 數據庫持久化配置說明
3.1.4 啟動skywalking服務
3.1.5 訪問控制臺
3.2 搭建springboot工程
3.2.1 導入下面的依賴
3.2.2 配置Dockerfile文件
3.2.3 添加測試接口
3.3 springboot 接入skywalking
四、springboot 制作docker接入skywalking
4.1 修改Dockerfile文件
4.2 工程打包上傳服務器
4.3 制作微服務鏡像
4.4 啟動服務容器
4.5 檢查是否接入成功
五、寫在文末
一、前言
隨著微服務開發模式越來越成熟,微服務的健康檢查、服務鏈接追蹤也成為很多顯示運行的項目必須要考慮的事項。微服務鏈路追蹤在一些大的服務平臺中起著非常重要的作用,不僅可以監控各個服務的健康狀況,也可以協助開發、測試、運維等人員快速排查、分析和定位線上問題,同時也可以監控服務運行過程中各個服務之間的調用情況,性能瓶頸點的定位等,可以說基本涵蓋了服務運行過程中的各項重要指標的可視化,在以springboot為技術框架的微服務生態中,skywalking是一個很好的鏈路追蹤組件,在很多項目中發揮過重要的用場,本文以SpringBoot為例,探討如何在微服務進行容器化之后接入skywalking。
二、SkyWalking介紹
2.1 SkyWalking是什么
?SkyWalking是一個開源的可觀測平臺,用于從服務和云原生等基礎設施收集、分析、聚合以及可視化數據。官網地址:Apache SkyWalking
SkyWalking 提供了一種簡便的方式來清晰地觀測分布式系統。相比較zipkin而言,skywalking利用agent字節碼增強技術實現代碼無侵入,通信方式采用GRPC,性能較好,實現方式是java探針,支持告警,支持JVM監控,支持全局調用統計,UI界面更加強大等優點。
2.2 SkyWalking核心功能
SkyWalking 有哪些功能呢?以下列舉其主要的功能點:
- 監控手段豐富,可以通過語言探針和 service mesh 獲得監控是數據;
- 多種類型的語言自動探針,包括 Java,.NET Core 和 Node.JS;
- 輕量高效,無需大數據平臺,和大量的服務器資源;
- 模塊化,UI、存儲、集群管理都有多種機制可選;
- 支持各類告警機制;
- 提供優秀的可視化解決方案,支持各類監控數據的可視化;
2.3 SkyWalking整體架構
下面是SkyWalking的整體架構圖
從官網提供的Skywalking架構圖來看,分成幾個部分,簡單來說,可以分成下面幾個部分:
- OAP后端
- 負責接收 Agent 發送的 Tracing 和Metric的數據信息,然后進行分析Analysis Core,存儲到外部存儲器 Storage ,最終提供查詢Query 功能
- WEB-UI
- UI負責提供web控制臺,查看鏈路,查看各種指標,性能等
- Agent探針
- Agent負責收集日志數據:Agent以探針的方式,進行請求鏈路的數據采集,并向OAP服務器上報
- Storage存儲
- 數據的存儲層,支持ElasticSearch、Mysql、H2多種方式
2.4?SkyWalking主要工作流程
官網關于SkyWalking的詳細工作流程圖如下
在實際應用中,簡化上面的流程之后其核心工作流程分為下面幾步:
- 數據采集 ,服務通過探針的方式接入數據采集的功能;
- 上報服務器 ,請求鏈路的相關處理行為會上報到OAP服務中;
- 數據存儲 ,進行數據的聚合管理和分析,并存儲在持久層;
- 數據展現 ,通過UI界面進行可視化呈現收集的數據;
三、前置準備
在正式將微服務制作成鏡像并通過docker接入SkyWalking之前,需要做一些前置的準備,參照下面的步驟依次完成。首先確保你后面要使用的服務器的java環境已經準備好。
3.1 搭建SkyWalking服務
3.1.1 下載安裝包
官網安裝包下載地址:Downloads | Apache SkyWalking
下載oap安裝包
-
oap即Skywalking服務端,如下進到官網后,選擇下面這里的包,選擇合適的版本進行下載,這里我選擇9.7.0的版本(版本可以自行選擇);
下載Java Agent包
-
即服務端 agent,用于收集來自客戶端的端點信息和指標信息,然后上報到oap服務端,后續在springboot項目中為了接入skywalking將微服務的指標信息上報到skywalking時,就需要通過該Agent包進行指標收集和上報
在當前的頁面找到Agents ,然后進行下載
3.1.2 上傳服務器目錄
將上面下載的安裝包上傳到服務器指定目錄,并使用下面的命令進行解壓
tar -zxvf apache-skywalking-apm-9.7.0.tar.gz
tar -xvf apache-skywalking-java-agent-9.2.0.tar
2.1.3 數據庫持久化配置說明
默認情況下,如果只是簡單運行skywalking服務做一下集成測試的話,解壓之后使用內置的腳本即可啟動,而在實際項目中,為了保證運行過程中的數據安全性,需要對skywalking服務的運行數據進行持久化存儲,官方提供了多種存儲方式,比如es,mysql ,pg等,默認不做任何配置的話,數據將存儲在h2內存數據庫中,如果需要配置,進入下面的目錄
cd apache-skywalking-apm-bin/config
找到: application.yml 這個文件進行配置即可
關于如何接入數據持久化的操作可以參考另一篇文章,有詳細的介紹:【微服務】springboot整合skywalking使用詳解-CSDN博客
3.1.4 啟動skywalking服務
使用skywalking的服務,核心需要啟動兩個服務
-
oapService.sh,oap的服務啟動腳本
-
webappService.sh,web-ui服務啟動腳本
進入服務啟動腳本的目錄,在這個目錄下提供了服務啟動的相關腳本
cd /apache-skywalking-apm-bin/bin
使用下面的命令進行后臺服務啟動
cd /usr/local/soft/sky/apache-skywalking-apm-bin/bin
#后臺啟動:
./oapService.sh &
./webappService.sh &
使用jps命令檢查一下是否啟動成功,如果正常啟動,可以看到有兩個Java進程
同時,如果你不想分別執行兩個腳本啟動,也可以直接使用目錄下的startup.sh進行啟動,效果是一樣的
服務與端口補充說明:
-
skywalking-oap-server:暴露11800和12800兩個端口,分別為收集監控數據的端口11800和接受前端請求的端口12800,修改端口可以修改config/applicaiton.yml;
-
skywalking-web-ui:服務會占用 8080 端口, 修改端口可以修改webapp/webapp.yml;
3.1.5 訪問控制臺
啟動成功后,可以直接訪問web-ui界面,訪問地址:IP:8080,如果需要修改ui界面的訪問端口,直接修改web-app目錄下的配置文件中的端口即可;
瀏覽器訪問的效果如下:
如果還沒有服務接入進來,頁面上不會展示相關的鏈路追蹤信息,類似于懶加載機制。
3.2 搭建springboot工程
為了接下來對接skywalking,本地需要搭建一個springboot工程,參照下面的步驟快速完成一個工程的搭建和運行。
3.2.1 導入下面的依賴
在pom文件中引入下面的依賴
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><finalName>boot-walking</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
3.2.2 配置Dockerfile文件
后續要通過微服務制作成docker鏡像接入skywalking,需要提前先準備一個Dockerfile,用于構建docker鏡像,參考如下:
FROM openjdk:17-jdk-alpineADD ./boot-walking.jar /app/boot-walking.jarENTRYPOINT ["java", "-jar", "/app/boot-walking.jar"]
3.2.3 添加測試接口
增加一個測試接口,用于后續測試效果
@RestController
public class DockerController {//localhost:8082/index@GetMapping("/index")public String index(){return "Hello Docker";}}
運行項目后測試一下接口,確保可以使用
3.3 springboot 接入skywalking
如果是基于springboot 項目接入skywalking,需要在啟動命令中添加相關的參數,首先找到上面下載到本地的Agent包
然后再在idea中啟動時配置下面的啟動參數選項
-javaagent:E:\code-self\skywalking-agent\skywalking-agent.jar
-DSW_AGENT_NAME=boot-walking
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=服務IP:11800
配置完成,再次啟動服務,此時通過控制臺可以看到,加載了很多與skywalking相關的日志內容
再次訪問一下上面的接口之后,此時再去skywalking控制臺,此時可以發現微服務已經接入進來了
進一步,可以通過服務名稱點進去進一步查看服務里面的相關指標信息
四、springboot 制作docker接入skywalking
通過上面的操作,完成了本地Springboot項目接入skywalking的完整過程,接下來進一步演示如何將springboot工程制作鏡像,并通過docker容器接入skywalking。
4.1 修改Dockerfile文件
在上一步,我們在工程中增加了一個Dockerfile文件,通過這個文件可以制作微服務的鏡像,但是如果需要在docker啟動的時候接入skywalking,還需要增加其他的配置信息,參考下面的配置:
FROM openjdk:17-jdk-alpine
COPY ./boot-walking.jar /boot-walking.jar
COPY ./skywalking-agent /app/skywalking-agentCMD java -javaagent:/app/skywalking-agent/skywalking-agent.jar \-DSW_AGENT_NAME=sky-boot=boot-docker-walking \-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=服務IP:11800 \-jar /boot-walking.jar
4.2 工程打包上傳服務器
將本地的springboot工程打成jar包并上傳到服務器指定目錄
4.3 制作微服務鏡像
使用下面的命令將微服務jar包制作成docker鏡像
docker build -t boot-walking:1.0 .
運行上面的命令進行鏡像構建過程
檢查一下鏡像是否構建成功
4.4 啟動服務容器
使用下面的命令啟動docker容器
docker run -d -it -p 8082:8082 --name=boot-walking-1 boot-walking:1.0
啟動成功后,可以通過docker logs命令進一步檢查下是否正常運行了服務
通過輸出的日志不難看出,與上面springboot接入時啟動類似,在啟動的時候也輸出了很多與skywalking相關的日志。
4.5 檢查是否接入成功
然后訪問下服務器中運行的docker服務接口
此時再去skywalking控制臺檢查一下,此時已經正常接入進來了
同樣可以點進去進一步查看各項指標信息,比如接口的具體執行情況、耗時、執行的鏈路等信息
五、寫在文末
本文通過實際操作完成了如何基于springboot項目接入skyalking的詳細過程,并進一步將springboot項目制作容器對接skyalking的詳細操作,基于此,有興趣的同學還可以繼續研究和完善,比如如何在skywalking中可視化監控微服務中的日志信息等,希望對看到的同學有用哦,本篇到此結束,感謝觀看。