SpringBoot制作Docker鏡像接入SkyWalking的詳細(xì)過程
一、前言
隨著微服務(wù)開發(fā)模式越來越成熟,微服務(wù)的健康檢查、服務(wù)鏈接追蹤也成為很多顯示運(yùn)行的項目必須要考慮的事項。微服務(wù)鏈路追蹤在一些大的服務(wù)平臺中起著非常重要的作用,不僅可以監(jiān)控各個服務(wù)的健康狀況,也可以協(xié)助開發(fā)、測試、運(yùn)維等人員快速排查、分析和定位線上問題,同時也可以監(jiān)控服務(wù)運(yùn)行過程中各個服務(wù)之間的調(diào)用情況,性能瓶頸點的定位等,可以說基本涵蓋了服務(wù)運(yùn)行過程中的各項重要指標(biāo)的可視化,在以springboot為技術(shù)框架的微服務(wù)生態(tài)中,skywalking是一個很好的鏈路追蹤組件,在很多項目中發(fā)揮過重要的用場,本文以SpringBoot為例,探討如何在微服務(wù)進(jìn)行容器化之后接入skywalking。
二、SkyWalking介紹
2.1 SkyWalking是什么
SkyWalking是一個開源的可觀測平臺,用于從服務(wù)和云原生等基礎(chǔ)設(shè)施收集、分析、聚合以及可視化數(shù)據(jù)。官網(wǎng)地址: Apache SkyWalking
SkyWalking 提供了一種簡便的方式來清晰地觀測分布式系統(tǒng)。相比較zipkin而言,skywalking利用agent字節(jié)碼增強(qiáng)技術(shù)實現(xiàn)代碼無侵入,通信方式采用GRPC,性能較好,實現(xiàn)方式是java探針,支持告警,支持JVM監(jiān)控,支持全局調(diào)用統(tǒng)計,UI界面更加強(qiáng)大等優(yōu)點。

2.2 SkyWalking核心功能
SkyWalking 有哪些功能呢?以下列舉其主要的功能點:
- 監(jiān)控手段豐富,可以通過語言探針和 service mesh 獲得監(jiān)控是數(shù)據(jù);
- 多種類型的語言自動探針,包括 Java,.NET Core 和 Node.JS;
- 輕量高效,無需大數(shù)據(jù)平臺,和大量的服務(wù)器資源;
- 模塊化,UI、存儲、集群管理都有多種機(jī)制可選;
- 支持各類告警機(jī)制;
- 提供優(yōu)秀的可視化解決方案,支持各類監(jiān)控數(shù)據(jù)的可視化;
2.3 SkyWalking整體架構(gòu)
下面是SkyWalking的整體架構(gòu)圖

從官網(wǎng)提供的Skywalking架構(gòu)圖來看,分成幾個部分,簡單來說,可以分成下面幾個部分:
- OAP后端
- 負(fù)責(zé)接收 Agent 發(fā)送的 Tracing 和Metric的數(shù)據(jù)信息,然后進(jìn)行分析Analysis Core,存儲到外部存儲器 Storage ,最終提供查詢Query 功能
- WEB-UI
- UI負(fù)責(zé)提供web控制臺,查看鏈路,查看各種指標(biāo),性能等
- Agent探針
- Agent負(fù)責(zé)收集日志數(shù)據(jù):Agent以探針的方式,進(jìn)行請求鏈路的數(shù)據(jù)采集,并向OAP服務(wù)器上報
- Storage存儲
- 數(shù)據(jù)的存儲層,支持ElasticSearch、Mysql、H2多種方式
2.4 SkyWalking主要工作流程
官網(wǎng)關(guān)于SkyWalking的詳細(xì)工作流程圖如下

在實際應(yīng)用中,簡化上面的流程之后其核心工作流程分為下面幾步:
- 數(shù)據(jù)采集 ,服務(wù)通過探針的方式接入數(shù)據(jù)采集的功能;
- 上報服務(wù)器 ,請求鏈路的相關(guān)處理行為會上報到OAP服務(wù)中;
- 數(shù)據(jù)存儲 ,進(jìn)行數(shù)據(jù)的聚合管理和分析,并存儲在持久層;
- 數(shù)據(jù)展現(xiàn) ,通過UI界面進(jìn)行可視化呈現(xiàn)收集的數(shù)據(jù);

三、前置準(zhǔn)備
在正式將微服務(wù)制作成鏡像并通過docker接入SkyWalking之前,需要做一些前置的準(zhǔn)備,參照下面的步驟依次完成。首先確保你后面要使用的服務(wù)器的java環(huán)境已經(jīng)準(zhǔn)備好。

3.1 搭建SkyWalking服務(wù)
3.1.1 下載安裝包
官網(wǎng)安裝包下載地址: Downloads | Apache SkyWalking

下載oap安裝包
oap即Skywalking服務(wù)端,如下進(jìn)到官網(wǎng)后,選擇下面這里的包,選擇合適的版本進(jìn)行下載,這里我選擇9.7.0的版本(版本可以自行選擇);

下載Java Agent包
即服務(wù)端 agent,用于收集來自客戶端的端點信息和指標(biāo)信息,然后上報到oap服務(wù)端,后續(xù)在springboot項目中為了接入skywalking將微服務(wù)的指標(biāo)信息上報到skywalking時,就需要通過該Agent包進(jìn)行指標(biāo)收集和上報
在當(dāng)前的頁面找到Agents ,然后進(jìn)行下載

3.1.2 上傳服務(wù)器目錄
將上面下載的安裝包上傳到服務(wù)器指定目錄,并使用下面的命令進(jìn)行解壓
tar -zxvf apache-skywalking-apm-9.7.0.tar.gz tar -xvf apache-skywalking-java-agent-9.2.0.tar
1.2.

2.1.3 數(shù)據(jù)庫持久化配置說明
默認(rèn)情況下,如果只是簡單運(yùn)行skywalking服務(wù)做一下集成測試的話,解壓之后使用內(nèi)置的腳本即可啟動,而在實際項目中,為了保證運(yùn)行過程中的數(shù)據(jù)安全性,需要對skywalking服務(wù)的運(yùn)行數(shù)據(jù)進(jìn)行持久化存儲,官方提供了多種存儲方式,比如es,mysql ,pg等,默認(rèn)不做任何配置的話,數(shù)據(jù)將存儲在h2內(nèi)存數(shù)據(jù)庫中,如果需要配置,進(jìn)入下面的目錄
cd apache-skywalking-apm-bin/config
1.
找到: application.yml 這個文件進(jìn)行配置即可


關(guān)于如何接入數(shù)據(jù)持久化的操作可以參考另一篇文章,有詳細(xì)的介紹:【微服務(wù)】springboot整合skywalking使用詳解
3.1.4 啟動skywalking服務(wù)
使用skywalking的服務(wù),核心需要啟動兩個服務(wù)
- oapService.sh,oap的服務(wù)啟動腳本
- webappService.sh,web-ui服務(wù)啟動腳本
進(jìn)入服務(wù)啟動腳本的目錄,在這個目錄下提供了服務(wù)啟動的相關(guān)腳本
cd /apache-skywalking-apm-bin/bin
1.

使用下面的命令進(jìn)行后臺服務(wù)啟動
cd /usr/local/soft/sky/apache-skywalking-apm-bin/bin #后臺啟動: ./oapService.sh & ./webappService.sh &
使用jps命令檢查一下是否啟動成功,如果正常啟動,可以看到有兩個Java進(jìn)程

同時,如果你不想分別執(zhí)行兩個腳本啟動,也可以直接使用目錄下的startup.sh進(jìn)行啟動,效果是一樣的

服務(wù)與端口補(bǔ)充說明:
- skywalking-oap-server:暴露11800和12800兩個端口,分別為收集監(jiān)控數(shù)據(jù)的端口11800和接受前端請求的端口12800,修改端口可以修改config/applicaiton.yml;
- skywalking-web-ui:服務(wù)會占用 8080 端口, 修改端口可以修改webapp/webapp.yml;
3.1.5 訪問控制臺
啟動成功后,可以直接訪問web-ui界面,訪問地址:IP:8080,如果需要修改ui界面的訪問端口,直接修改web-app目錄下的配置文件中的端口即可;

瀏覽器訪問的效果如下:

如果還沒有服務(wù)接入進(jìn)來,頁面上不會展示相關(guān)的鏈路追蹤信息,類似于懶加載機(jī)制。
3.2 搭建springboot工程
為了接下來對接skywalking,本地需要搭建一個springboot工程,參照下面的步驟快速完成一個工程的搭建和運(yùn)行。
3.2.1 導(dǎo)入下面的依賴
在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文件
后續(xù)要通過微服務(wù)制作成docker鏡像接入skywalking,需要提前先準(zhǔn)備一個Dockerfile,用于構(gòu)建docker鏡像,參考如下:
FROM openjdk:17-jdk-alpine ADD ./boot-walking.jar /app/boot-walking.jar ENTRYPOINT ["java", "-jar", "/app/boot-walking.jar"]
3.2.3 添加測試接口
增加一個測試接口,用于后續(xù)測試效果
@RestController
public class DockerController {
//localhost:8082/index
@GetMapping("/index")
public String index(){
return "Hello Docker";
}
}運(yùn)行項目后測試一下接口,確保可以使用

3.3 springboot 接入skywalking
如果是基于springboot 項目接入skywalking,需要在啟動命令中添加相關(guān)的參數(shù),首先找到上面下載到本地的Agent包

然后再在idea中啟動時配置下面的啟動參數(shù)選項
-javaagent:E:\code-self\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAME=boot-walking -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=服務(wù)IP:11800

配置完成,再次啟動服務(wù),此時通過控制臺可以看到,加載了很多與skywalking相關(guān)的日志內(nèi)容

再次訪問一下上面的接口之后,此時再去skywalking控制臺,此時可以發(fā)現(xiàn)微服務(wù)已經(jīng)接入進(jìn)來了

進(jìn)一步,可以通過服務(wù)名稱點進(jìn)去進(jìn)一步查看服務(wù)里面的相關(guān)指標(biāo)信息

四、springboot 制作docker接入skywalking
通過上面的操作,完成了本地Springboot項目接入skywalking的完整過程,接下來進(jìn)一步演示如何將springboot工程制作鏡像,并通過docker容器接入skywalking。
4.1 修改Dockerfile文件
在上一步,我們在工程中增加了一個Dockerfile文件,通過這個文件可以制作微服務(wù)的鏡像,但是如果需要在docker啟動的時候接入skywalking,還需要增加其他的配置信息,參考下面的配置:
FROM openjdk:17-jdk-alpine
COPY ./boot-walking.jar /boot-walking.jar
COPY ./skywalking-agent /app/skywalking-agent
CMD java -javaagent:/app/skywalking-agent/skywalking-agent.jar \
-DSW_AGENT_NAME=sky-boot=boot-docker-walking \
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=服務(wù)IP:11800 \
-jar /boot-walking.jar4.2 工程打包上傳服務(wù)器
將本地的springboot工程打成jar包并上傳到服務(wù)器指定目錄

4.3 制作微服務(wù)鏡像
使用下面的命令將微服務(wù)jar包制作成docker鏡像
docker build -t boot-walking:1.0 .
1.
運(yùn)行上面的命令進(jìn)行鏡像構(gòu)建過程

檢查一下鏡像是否構(gòu)建成功

4.4 啟動服務(wù)容器
使用下面的命令啟動docker容器
docker run -d -it -p 8082:8082 --name=boot-walking-1 boot-walking:1.0
1.
啟動成功后,可以通過docker logs命令進(jìn)一步檢查下是否正常運(yùn)行了服務(wù)


通過輸出的日志不難看出,與上面springboot接入時啟動類似,在啟動的時候也輸出了很多與skywalking相關(guān)的日志。
4.5 檢查是否接入成功
然后訪問下服務(wù)器中運(yùn)行的docker服務(wù)接口

此時再去skywalking控制臺檢查一下,此時已經(jīng)正常接入進(jìn)來了

同樣可以點進(jìn)去進(jìn)一步查看各項指標(biāo)信息,比如接口的具體執(zhí)行情況、耗時、執(zhí)行的鏈路等信息

五、寫在文末
本文通過實際操作完成了如何基于springboot項目接入skyalking的詳細(xì)過程,并進(jìn)一步將springboot項目制作容器對接skyalking的詳細(xì)操作,基于此,有興趣的同學(xué)還可以繼續(xù)研究和完善,比如如何在skywalking中可視化監(jiān)控微服務(wù)中的日志信息等,希望對看到的同學(xué)有用哦,本篇到此結(jié)束,感謝觀看。
到此這篇關(guān)于SpringBoot制作Docker鏡像接入SkyWalking詳解的文章就介紹到這了,更多相關(guān)SpringBoot docker接入SkyWalking內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實踐講解SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式
本篇講解了SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式,通過實踐的方式更通俗易懂,對此不了解的同學(xué)跟著小編往下看吧2021-09-09
SpringBoot使用JavaCV處理rtsp流的示例代碼
這篇文章主要為大家詳細(xì)介紹了SpringBoot使用JavaCV處理rtsp流,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起了解一下2024-02-02
SpringBoot參數(shù)校驗之@Valid的使用詳解
這篇文章主要通過示例為大家詳細(xì)介紹一下介紹了SpringBoot參數(shù)校驗中@Valid的使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-06-06
Java初學(xué)者問題圖解(動力節(jié)點Java學(xué)院整理)
本文通過圖文并茂的形式給大家介紹了java初學(xué)者問題,非常不錯,具有參考借鑒價值,需要的朋友參考下2017-04-04
Java使用百度AI接口實現(xiàn)智能機(jī)器人對話系統(tǒng)
AI已經(jīng)在各行各業(yè)中廣泛應(yīng)用,助力于各式各樣的業(yè)務(wù),而在機(jī)器人對話中,我們可以通過利用百度AI中的自然語言處理、問答知識圖譜等技術(shù),使機(jī)器人可以更加智能化、自然化的為用戶服務(wù),本文介紹Java利用百度AI接口實現(xiàn)智能機(jī)器人對話系統(tǒng)2024-01-01

