SpringBoot制作Docker鏡像接入SkyWalking的詳細(xì)過程
一、前言
隨著微服務(wù)開發(fā)模式越來越成熟,微服務(wù)的健康檢查、服務(wù)鏈接追蹤也成為很多顯示運(yùn)行的項(xiàng)目必須要考慮的事項(xiàng)。微服務(wù)鏈路追蹤在一些大的服務(wù)平臺(tái)中起著非常重要的作用,不僅可以監(jiān)控各個(gè)服務(wù)的健康狀況,也可以協(xié)助開發(fā)、測試、運(yùn)維等人員快速排查、分析和定位線上問題,同時(shí)也可以監(jiān)控服務(wù)運(yùn)行過程中各個(gè)服務(wù)之間的調(diào)用情況,性能瓶頸點(diǎn)的定位等,可以說基本涵蓋了服務(wù)運(yùn)行過程中的各項(xiàng)重要指標(biāo)的可視化,在以springboot為技術(shù)框架的微服務(wù)生態(tài)中,skywalking是一個(gè)很好的鏈路追蹤組件,在很多項(xiàng)目中發(fā)揮過重要的用場,本文以SpringBoot為例,探討如何在微服務(wù)進(jìn)行容器化之后接入skywalking。
二、SkyWalking介紹
2.1 SkyWalking是什么
SkyWalking是一個(gè)開源的可觀測平臺(tái),用于從服務(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)計(jì),UI界面更加強(qiáng)大等優(yōu)點(diǎn)。
2.2 SkyWalking核心功能
SkyWalking 有哪些功能呢?以下列舉其主要的功能點(diǎn):
- 監(jiān)控手段豐富,可以通過語言探針和 service mesh 獲得監(jiān)控是數(shù)據(jù);
- 多種類型的語言自動(dòng)探針,包括 Java,.NET Core 和 Node.JS;
- 輕量高效,無需大數(shù)據(jù)平臺(tái),和大量的服務(wù)器資源;
- 模塊化,UI、存儲(chǔ)、集群管理都有多種機(jī)制可選;
- 支持各類告警機(jī)制;
- 提供優(yōu)秀的可視化解決方案,支持各類監(jiān)控?cái)?shù)據(jù)的可視化;
2.3 SkyWalking整體架構(gòu)
下面是SkyWalking的整體架構(gòu)圖
從官網(wǎng)提供的Skywalking架構(gòu)圖來看,分成幾個(gè)部分,簡單來說,可以分成下面幾個(gè)部分:
- OAP后端
- 負(fù)責(zé)接收 Agent 發(fā)送的 Tracing 和Metric的數(shù)據(jù)信息,然后進(jìn)行分析Analysis Core,存儲(chǔ)到外部存儲(chǔ)器 Storage ,最終提供查詢Query 功能
- WEB-UI
- UI負(fù)責(zé)提供web控制臺(tái),查看鏈路,查看各種指標(biāo),性能等
- Agent探針
- Agent負(fù)責(zé)收集日志數(shù)據(jù):Agent以探針的方式,進(jìn)行請求鏈路的數(shù)據(jù)采集,并向OAP服務(wù)器上報(bào)
- Storage存儲(chǔ)
- 數(shù)據(jù)的存儲(chǔ)層,支持ElasticSearch、Mysql、H2多種方式
2.4 SkyWalking主要工作流程
官網(wǎng)關(guān)于SkyWalking的詳細(xì)工作流程圖如下
在實(shí)際應(yīng)用中,簡化上面的流程之后其核心工作流程分為下面幾步:
- 數(shù)據(jù)采集 ,服務(wù)通過探針的方式接入數(shù)據(jù)采集的功能;
- 上報(bào)服務(wù)器 ,請求鏈路的相關(guān)處理行為會(huì)上報(bào)到OAP服務(wù)中;
- 數(shù)據(jù)存儲(chǔ) ,進(jìn)行數(shù)據(jù)的聚合管理和分析,并存儲(chǔ)在持久層;
- 數(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)信息,然后上報(bào)到oap服務(wù)端,后續(xù)在springboot項(xiàng)目中為了接入skywalking將微服務(wù)的指標(biāo)信息上報(bào)到skywalking時(shí),就需要通過該Agent包進(jìn)行指標(biāo)收集和上報(bà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)置的腳本即可啟動(dòng),而在實(shí)際項(xiàng)目中,為了保證運(yùn)行過程中的數(shù)據(jù)安全性,需要對skywalking服務(wù)的運(yùn)行數(shù)據(jù)進(jìn)行持久化存儲(chǔ),官方提供了多種存儲(chǔ)方式,比如es,mysql ,pg等,默認(rèn)不做任何配置的話,數(shù)據(jù)將存儲(chǔ)在h2內(nèi)存數(shù)據(jù)庫中,如果需要配置,進(jìn)入下面的目錄
cd apache-skywalking-apm-bin/config
1.
找到: application.yml 這個(gè)文件進(jìn)行配置即可
關(guān)于如何接入數(shù)據(jù)持久化的操作可以參考另一篇文章,有詳細(xì)的介紹:【微服務(wù)】springboot整合skywalking使用詳解
3.1.4 啟動(dòng)skywalking服務(wù)
使用skywalking的服務(wù),核心需要啟動(dòng)兩個(gè)服務(wù)
- oapService.sh,oap的服務(wù)啟動(dòng)腳本
- webappService.sh,web-ui服務(wù)啟動(dòng)腳本
進(jìn)入服務(wù)啟動(dòng)腳本的目錄,在這個(gè)目錄下提供了服務(wù)啟動(dòng)的相關(guān)腳本
cd /apache-skywalking-apm-bin/bin
1.
使用下面的命令進(jìn)行后臺(tái)服務(wù)啟動(dòng)
cd /usr/local/soft/sky/apache-skywalking-apm-bin/bin #后臺(tái)啟動(dòng): ./oapService.sh & ./webappService.sh &
使用jps命令檢查一下是否啟動(dòng)成功,如果正常啟動(dòng),可以看到有兩個(gè)Java進(jìn)程
同時(shí),如果你不想分別執(zhí)行兩個(gè)腳本啟動(dòng),也可以直接使用目錄下的startup.sh進(jìn)行啟動(dòng),效果是一樣的
服務(wù)與端口補(bǔ)充說明:
- skywalking-oap-server:暴露11800和12800兩個(gè)端口,分別為收集監(jiān)控?cái)?shù)據(jù)的端口11800和接受前端請求的端口12800,修改端口可以修改config/applicaiton.yml;
- skywalking-web-ui:服務(wù)會(huì)占用 8080 端口, 修改端口可以修改webapp/webapp.yml;
3.1.5 訪問控制臺(tái)
啟動(dòng)成功后,可以直接訪問web-ui界面,訪問地址:IP:8080,如果需要修改ui界面的訪問端口,直接修改web-app目錄下的配置文件中的端口即可;
瀏覽器訪問的效果如下:
如果還沒有服務(wù)接入進(jìn)來,頁面上不會(huì)展示相關(guān)的鏈路追蹤信息,類似于懶加載機(jī)制。
3.2 搭建springboot工程
為了接下來對接skywalking,本地需要搭建一個(gè)springboot工程,參照下面的步驟快速完成一個(gè)工程的搭建和運(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)備一個(gè)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 添加測試接口
增加一個(gè)測試接口,用于后續(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,需要在啟動(dòng)命令中添加相關(guān)的參數(shù),首先找到上面下載到本地的Agent包
然后再在idea中啟動(dòng)時(shí)配置下面的啟動(dòng)參數(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
配置完成,再次啟動(dòng)服務(wù),此時(shí)通過控制臺(tái)可以看到,加載了很多與skywalking相關(guān)的日志內(nèi)容
再次訪問一下上面的接口之后,此時(shí)再去skywalking控制臺(tái),此時(shí)可以發(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文件
在上一步,我們在工程中增加了一個(gè)Dockerfile文件,通過這個(gè)文件可以制作微服務(wù)的鏡像,但是如果需要在docker啟動(dòng)的時(shí)候接入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.jar
4.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 啟動(dòng)服務(wù)容器
使用下面的命令啟動(dòng)docker容器
docker run -d -it -p 8082:8082 --name=boot-walking-1 boot-walking:1.0
1.
啟動(dòng)成功后,可以通過docker logs命令進(jìn)一步檢查下是否正常運(yùn)行了服務(wù)
通過輸出的日志不難看出,與上面springboot接入時(shí)啟動(dòng)類似,在啟動(dòng)的時(shí)候也輸出了很多與skywalking相關(guān)的日志。
4.5 檢查是否接入成功
然后訪問下服務(wù)器中運(yùn)行的docker服務(wù)接口
此時(shí)再去skywalking控制臺(tái)檢查一下,此時(shí)已經(jīng)正常接入進(jìn)來了
同樣可以點(diǎn)進(jìn)去進(jìn)一步查看各項(xiàng)指標(biāo)信息,比如接口的具體執(zhí)行情況、耗時(shí)、執(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)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)踐講解SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式
本篇講解了SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式,通過實(shí)踐的方式更通俗易懂,對此不了解的同學(xué)跟著小編往下看吧2021-09-09SpringBoot使用JavaCV處理rtsp流的示例代碼
這篇文章主要為大家詳細(xì)介紹了SpringBoot使用JavaCV處理rtsp流,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2024-02-02SpringBoot參數(shù)校驗(yàn)之@Valid的使用詳解
這篇文章主要通過示例為大家詳細(xì)介紹一下介紹了SpringBoot參數(shù)校驗(yàn)中@Valid的使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-06-06Java初學(xué)者問題圖解(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
本文通過圖文并茂的形式給大家介紹了java初學(xué)者問題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-04-04springboot項(xiàng)目如何設(shè)置時(shí)區(qū)
這篇文章主要介紹了springboot項(xiàng)目如何設(shè)置時(shí)區(qū)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07聊聊注解@Aspect的AOP實(shí)現(xiàn)操作
這篇文章主要介紹了聊聊注解@Aspect的AOP實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01Java使用百度AI接口實(shí)現(xiàn)智能機(jī)器人對話系統(tǒng)
AI已經(jīng)在各行各業(yè)中廣泛應(yīng)用,助力于各式各樣的業(yè)務(wù),而在機(jī)器人對話中,我們可以通過利用百度AI中的自然語言處理、問答知識(shí)圖譜等技術(shù),使機(jī)器人可以更加智能化、自然化的為用戶服務(wù),本文介紹Java利用百度AI接口實(shí)現(xiàn)智能機(jī)器人對話系統(tǒng)2024-01-01