【微服務】SpringBoot制作Docker鏡像接入SkyWalking詳解

目錄

一、前言

二、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中可視化監控微服務中的日志信息等,希望對看到的同學有用哦,本篇到此結束,感謝觀看。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77723.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從零開始構建微博爬蟲與數據分析系統

從零開始構建微博爬蟲與數據分析系統 引言 社交媒體平臺蘊含著海量的信息和數據&#xff0c;通過對這些數據的收集和分析&#xff0c;我們可以挖掘出有價值的見解。本文將詳細介紹如何構建一個完整的微博爬蟲和數據分析系統&#xff0c;從數據爬取、清洗、到多維度分析與可視…

深入探索RAG:用LlamaIndex為大語言模型擴展知識,實現智能檢索增強生成

大型語言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT和Llama&#xff0c;在回答問題方面表現出色&#xff0c;但它們的知識僅限于訓練時所獲取的信息。它們無法訪問私有數據&#xff0c;也無法在訓練截止日期之后學習新知識。那么&#xff0c;核心問題就是……我們如…

【延遲雙刪】簡單解析

使用場景&#xff1a;【高并發】情況下的做【更新操作】 什么是延遲雙刪 首次刪除&#xff1a;當需要更新某個數據項時&#xff0c;首先刪除緩存中的該項。 更新數據庫&#xff1a;接著&#xff0c;更新數據庫中的該項。 短暫延遲&#xff1a;然后等待一段很短的時間&#xff…

解決Windows安全中心顯示空白頁面

1、電腦重裝系統后&#xff0c;發現原本一些軟件打不開了&#xff0c;電腦莫名認為有病毒&#xff0c;自動刪除插件。附圖。 2、第一反應是電腦防火墻的原因&#xff0c;默認威脅防護識別到了病毒軟件&#xff0c;自動刪除。在開始屏幕搜Windows安全中心&#xff0c;打開之后發…

【回眸】error: failed to compile `xxxxxx`重裝rust環境

在ubuntu上安裝軟件報錯 error: failed to compile cxx2flow v0.6.2 Caused by: package cargo-platform v0.1.9 cannot be built because it requires rustc 1.78 or newer, while the currently active rustc version is 1.75.0 Try re-running cargo install with --lo…

算法—冒泡排序—js(教學示例、小數據)

冒泡排序原理 冒泡排序是一種簡單的排序算法&#xff0c;通過重復遍歷數組&#xff0c;比較相鄰元素并交換位置&#xff0c;使較大的元素逐漸“浮”到數組末尾。 特點 時間復雜度&#xff1a;平均 O(n)&#xff0c;最優&#xff08;已有序時&#xff09;O(n) 空間復雜度&#…

linux sysfs的使用

在Linux內核驅動開發中&#xff0c;device_create_file 和 device_remove_file 用于動態創建/刪除設備的 sysfs 屬性文件&#xff0c;常用于暴露設備信息或控制參數。以下是完整示例及詳細說明&#xff1a; 1. 頭文件引入 #include <linux/module.h> #include <linux/…

利用 Deepseek 和 Mermaid 畫流程圖

提示詞 你是一個產品經理&#xff0c;請繪制一個報名比賽的流程圖&#xff0c;要求生成符合Mermaid語法的代碼&#xff0c;具體要求如下&#xff1a; 1.注冊賬號 2.填寫報名信息 3.參加比賽 4.查看比賽結果 生成的結果 flowchart TDA([開始]) --> B[注冊賬號]B --> C{賬…

【圖像標注技巧】目標檢測圖像標注技巧

介紹一些圖像標注技巧。之前引用過別人的文章 yolo目標檢測 技巧 trick 提升模型性能&#xff0c;deep research檢測調研報告也可以進行參考。 拉框類的標注&#xff0c;如果你不確定哪種方法好&#xff0c;你可以把所標注區域的都剪切出來&#xff0c;然后站在屏幕一米之外瞇…

數字信號處理技術架構與功能演進

數字信號處理&#xff08;DSP&#xff09;是通過數字運算實現信號分析、變換、濾波及調制解調的技術領域&#xff0c;其發展過程與技術應用如下&#xff1a; 一、定義與核心功能 技術定義&#xff1a;通過算法將模擬信號轉換為數字形式進行處理&#xff0c;具有高精度、可編程…

瀏覽器上下文通信

文章目錄 瀏覽器上下文通信同源通信同源通信流程同一瀏覽器上下文通信不同瀏覽器上下文通信 跨域通信前端和前端跨域前端和后端跨域 瀏覽器上下文通信 瀏覽器上下文通信分為兩種&#xff1a;同源和跨源。同樣的同源通信也分為同一瀏覽器上下文和不同的瀏覽器上下文。 同源通信…

Linux 離線部署 Docker 18.06.3 終極指南(附一鍵安裝卸載腳本)

Linux 離線部署 Docker 18.06.3 終極指南&#xff08;附一鍵安裝/卸載腳本&#xff09; 摘要&#xff1a;本文針對無外網環境的 Linux 服務器&#xff0c;提供基于二進制包的 Docker 18.06.3 離線安裝全流程指南。包含自動化腳本設計、服務配置優化及安全卸載方案&#xff0c;…

【前端】跟著maxkb學習logicflow流程圖畫法

文章目錄 背景1. 選定學習對象-maxkb應用邏輯編排2. 確定實現框架3. 關鍵邏輯&#xff1a;查看app-node.js4. 學習開始節點繪制流程數據形式 5. 給節點增加表單輸入框遇到過的問題 背景 看看前端如何繪制流程圖&#xff0c;界面好看點。 "logicflow/core": "1.…

Android 12系統靜態壁紙深度定制指南

1. 需求背景與實現原理 在Android 12系統ROM定制開發中&#xff0c;擴展靜態壁紙功能需要深入理解WallpaperManagerService的架構體系。系統壁紙管理通過雙端協作實現&#xff1a; WallpaperManagerService&#xff08;frameworks層&#xff09;&#xff1a;負責壁紙狀態管理、…

相得益彰 — 基于 GraphRAG 事理圖譜驅動的實時金融行情新聞資訊洞察

*本文為亞馬遜云科技博客文章&#xff0c;僅用于技術分享&#xff0c;不構成投資建議或金融決策支持。文中涉及的公司名稱僅用于技術示例&#xff0c;不代表亞馬遜云科技觀點或與這些公司的商業合作關系。 背景介紹 在當今這個信息爆炸的時代&#xff0c;金融市場每天都在產生…

OpenCV---圖像預處理(四)

OpenCV—圖像預處理&#xff08;四&#xff09; 文章目錄 OpenCV---圖像預處理&#xff08;四&#xff09;九&#xff0c;圖像掩膜9.1 制作掩膜9.2 與運算9.3 顏色替換9.3.19.3.2 顏色替換 十&#xff0c;ROI切割十 一&#xff0c;圖像添加水印11.1模板輸入11.2 與運算11.3 圖像…

【MySQL】:數據庫事務管理

一&#xff1a;學習路徑 &#xff08;1&#xff09;下載安裝mysql &#xff08;2&#xff09;學習語言&#xff1a;SQL(操作數據庫&#xff09; &#xff08;3&#xff09;mysql集群&#xff08;提升數據庫存儲效率&#xff09; &#xff08;4&#xff09;SQL使用&#xff0c;M…

內存函數和動態內存管理

目錄 一、memcpy庫函數介紹 1. memcpy的使用 2. memcpy的模擬 二、memmove庫函數介紹 1. memmove的使用 2. memmove的模擬 三、memset庫函數介紹 四、memcmp庫函數介紹 五、動態內存中malloc和free 1. malloc 2. free 六、動態內存中calloc和realloc 1. calloc 2. realloc 七、…

yarn的基本介紹

1.Hadoop的三大結構及各自的作用&#xff1a; Hadoop是一個開源的分布式計算框架&#xff0c;它主要包括三大核心組件&#xff1a;HDFS&#xff08;Hadoop Distributed File System&#xff09;、YARN&#xff08;Yet Another Resource Negotiator&#xff09;和MapReduce。以…

STM32的啟動方式

目錄 一、從主閃存存儲器啟動&#xff08;Main Flash Memory&#xff09; 二、從系統存儲器啟動&#xff08;System Memory&#xff09; 三、從內置SRAM啟動&#xff08;Embedded SRAM&#xff09; 四、從外掛存儲介質啟動的實現方式 1. 存儲介質選型 2. 硬件連接 3. 引…