SpringBoot制作Docker鏡像接入SkyWalking的詳細(xì)過程
一、前言
隨著微服務(wù)開發(fā)模式越來越成熟,微服務(wù)的健康檢查、服務(wù)鏈接追蹤也成為很多顯示運(yùn)行的項(xiàng)目必須要考慮的事項(xiàng)。微服務(wù)鏈路追蹤在一些大的服務(wù)平臺中起著非常重要的作用,不僅可以監(jiān)控各個服務(wù)的健康狀況,也可以協(xié)助開發(fā)、測試、運(yùn)維等人員快速排查、分析和定位線上問題,同時也可以監(jiān)控服務(wù)運(yùn)行過程中各個服務(wù)之間的調(diào)用情況,性能瓶頸點(diǎn)的定位等,可以說基本涵蓋了服務(wù)運(yùn)行過程中的各項(xiàng)重要指標(biāo)的可視化,在以springboot為技術(shù)框架的微服務(wù)生態(tài)中,skywalking是一個很好的鏈路追蹤組件,在很多項(xiàng)目中發(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ù)實(shí)現(xiàn)代碼無侵入,通信方式采用GRPC,性能較好,實(shí)現(xiàn)方式是java探針,支持告警,支持JVM監(jiān)控,支持全局調(diào)用統(tǒng)計,UI界面更加強(qiáng)大等優(yōu)點(diǎn)。

2.2 SkyWalking核心功能
SkyWalking 有哪些功能呢?以下列舉其主要的功能點(diǎn):
- 監(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ì)工作流程圖如下

在實(shí)際應(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,用于收集來自客戶端的端點(diǎn)信息和指標(biāo)信息,然后上報到oap服務(wù)端,后續(xù)在springboot項(xiàng)目中為了接入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)置的腳本即可啟動,而在實(shí)際項(xiàng)目中,為了保證運(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)行項(xiàng)目后測試一下接口,確??梢允褂?/p>

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

然后再在idea中啟動時配置下面的啟動參數(shù)選項(xiàng)
-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ù)名稱點(diǎn)進(jìn)去進(jìn)一步查看服務(wù)里面的相關(guān)指標(biāo)信息

四、springboot 制作docker接入skywalking
通過上面的操作,完成了本地Springboot項(xiàng)目接入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)來了

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

五、寫在文末
本文通過實(shí)際操作完成了如何基于springboot項(xiàng)目接入skyalking的詳細(xì)過程,并進(jìn)一步將springboot項(xiàng)目制作容器對接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)文章希望大家以后多多支持腳本之家!
- SpringBoot程序打包Docker鏡像的最佳方式
- SpringBoot項(xiàng)目docker分層鏡像構(gòu)建案例
- SpringBoot Docker鏡像分層的優(yōu)化指南
- Docker自定義鏡像的實(shí)現(xiàn)步驟(SpringBoot程序?yàn)槔?
- Docker打包SpringBoot鏡像的實(shí)現(xiàn)方式
- SpringBoot打包成Docker鏡像的項(xiàng)目實(shí)踐
- SpringBoot打包成Docker鏡像的幾種實(shí)現(xiàn)方式
- 一步步教你把SpringBoot項(xiàng)目打包成Docker鏡像
- SpringBoot打包docker鏡像發(fā)布的詳細(xì)步驟
- SpringBoot構(gòu)建Docker鏡像的實(shí)現(xiàn)步驟
相關(guān)文章
springboot shardingjdbc與druid數(shù)據(jù)源沖突問題及解決
這篇文章主要介紹了springboot shardingjdbc與druid數(shù)據(jù)源沖突問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
XML Web 服務(wù) Eclipse實(shí)現(xiàn)sun-jaxws.xml文件的方法
在sun-jaxws.xml文件,可以配置endpoint、handler-chain等內(nèi)容,在這個文件中配置的內(nèi)容會覆蓋在Java代碼中使用注解屬性配置的的內(nèi)容,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2023-11-11
java string類型轉(zhuǎn)換boolean類型的方法
下面小編就為大家?guī)硪黄猨ava string類型轉(zhuǎn)換boolean類型的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11
Springboot 緩存@Cacheable 的引入和使用
@Cacheable是Spring緩存抽象的核心注解,作用是將方法的返回結(jié)果緩存起來,本文給大家介紹Springboot緩存@Cacheable的引入和使用,感興趣的朋友跟隨小編一起看看吧2026-03-03
基于Java數(shù)組實(shí)現(xiàn)循環(huán)隊列的兩種方法小結(jié)
下面小編就為大家分享一篇基于Java數(shù)組實(shí)現(xiàn)循環(huán)隊列的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Java中forEach使用lambda表達(dá)式,數(shù)組和集合的區(qū)別說明
這篇文章主要介紹了Java中forEach使用lambda表達(dá)式,數(shù)組和集合的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
詳解備忘錄模式及其在Java設(shè)計模式編程中的實(shí)現(xiàn)
這篇文章主要介紹了詳解備忘錄模式及其在Java設(shè)計模式編程中的實(shí)現(xiàn),備忘錄模式數(shù)據(jù)的存儲過程中應(yīng)當(dāng)注意淺拷貝和深拷貝的問題,需要的朋友可以參考下2016-04-04
Spring Security基于數(shù)據(jù)庫的ABAC屬性權(quán)限模型實(shí)戰(zhàn)開發(fā)教程
這篇文章主要介紹了Spring Security基于數(shù)據(jù)庫的ABAC屬性權(quán)限模型實(shí)戰(zhàn)開發(fā)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2025-04-04

