Springboot項(xiàng)目集成SkyWalking鏈路追蹤系統(tǒng)實(shí)戰(zhàn)指南
Springboot項(xiàng)目集成SkyWalking鏈路追蹤系統(tǒng)
將 SkyWalking 鏈路追蹤系統(tǒng)集成到 Spring Boot 項(xiàng)目中,可以幫助你監(jiān)控和跟蹤微服務(wù)架構(gòu)中的請求流,獲取詳細(xì)的性能數(shù)據(jù)、調(diào)用鏈信息等。下面是如何在 Spring Boot 項(xiàng)目中集成 SkyWalking 鏈路追蹤的基本步驟。
1. 準(zhǔn)備工作
1.1 部署SkyWalking
使用的版本:9.2.0
參考文檔:使用docker部署spring boot并接入skywalking的方法
網(wǎng)址地址:http://www.dhdzp.com/article/210119.htm
1.2 下載 SkyWalking Agent
同樣在Skywalking的官網(wǎng)中下載Java Agent:https://skywalking.apache.org/downloads/

下載后解壓,獲取目錄skywalking-agent,放在合適的路徑上。

2. 配置Java Agent需要的主要參數(shù)
在啟動 Spring Boot 應(yīng)用時,添加 SkyWalking agent 配置。用于重寫 agent/config/agent.config 配置文件中的配置參數(shù)值。主要配置參數(shù)如下:
- 解壓后的 SkyWalking agent 文件路徑
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
- 指定你的服務(wù)名稱,SkyWalking 會以這個名稱顯示在監(jiān)控面板中。SW_AGENT_NAME的命名規(guī)則,采用雙冒號 (如CTOS::CONTAINER_SIT),冒號前的文本字符串將作為組名。
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName} - 指定 SkyWalking 后端服務(wù)的 IP 和端口(默認(rèn)是 11800,若你使用其他端口,請?zhí)鎿Q)。
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}- 考慮到安全因素,部署的skywalking增加了gRPC(11880端口)連接是需要token認(rèn)證。需要看部署時候是否配置SW_AUTHENTICATION。
agent.authentication=${SW_AGENT_AUTHENTICATION:}2.1 使用jar命令啟動
在啟動 Spring Boot 應(yīng)用時,添加 SkyWalking agent 配置。
把skywalking-agent.jar地址、your-service-name、your-collector-ip:port、your-authentication-token、your-spring-boot-app替換為實(shí)際值。
2.1.1 方式一
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar \ -Dskywalking.agent.service_name=your-service-name \ -Dskywalking.collector.backend_service=your-collector-ip:port \ -Dskywalking.agent.authentication=your-authentication-token \ -jar your-spring-boot-app.jar
2.1.2 方式二
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar=agent.service_name=your-service-name,collector.backend_service=your-collector-ip:port,agent.authentication=your-authentication-token -jar your-spring-boot-app.jar
2.1.3 參數(shù)區(qū)別
通過方式一和方式二,可以看到使用方式一中-D設(shè)置參數(shù)多了skywalking前綴
2.2 利用idea啟動
2.2.1 打開idea開發(fā)工具Run-》Edit Configurations

2.2.2 配置啟動參數(shù)
方式一
點(diǎn)擊Modify options -》Add VM option

方式二
VM option中配置
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar=agent.service_name=your-service-name,collector.backend_service=your-collector-ip:port,agent.authentication=your-authentication-token

方式三
個人比較喜歡采用環(huán)境變量的方法接入,方式如下
VM option中配置
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
點(diǎn)擊Modify options -》Environment variables,新增環(huán)境變量

| 環(huán)境變量 | 描述 |
|---|---|
| SW_AGENT_NAME | 服務(wù)名 |
| SW_AGENT_COLLECTOR_BACKEND_SERVICES | 注冊地址 |
| SSW_AGENT_AUTHENTICATION | gRPC認(rèn)證的token |
2.3 容器化服務(wù)部署(Kubernetes、Docker)
2.3.1 拷貝文件
使用容器化部署,需要把skywalking-agent目錄拷貝在鏡像里面中,利用dockerfile
# 替換image為自己使用的鏡像 FROM image COPY ./skywalking-agent /usr/local/skywalking-agent
使用build命令生成新的基礎(chǔ)鏡像
docker build -t new_image .
2.3.2 環(huán)境變量(ENV)配置
| 環(huán)境變量 | 描述 |
|---|---|
| JAVA_TOOL_OPTIONS | 額外的 JVM |
| SW_AGENT_NAME | 服務(wù)名 |
| SW_AGENT_COLLECTOR_BACKEND_SERVICES | 注冊地址 |
| SSW_AGENT_AUTHENTICATION | gRPC認(rèn)證的token |
JAVA_TOOL_OPTIONS的value配置為
# 替換為skywalking-agent.jar在容器中的實(shí)際地址 -javaagent:/path/to/skywalking-agent/skywalking-agent.jar
3. 驗(yàn)證是否連接成功
啟動應(yīng)用后,訪問 SkyWalking 后端(通常是 http://127.0.0.1:8080,取決于你的 SkyWalking 后端配置)查看你的應(yīng)用是否已經(jīng)在 SkyWalking 控制臺上顯示。

但是這時候我們發(fā)現(xiàn),打開Log,發(fā)現(xiàn)并沒有日志。如果如果有日志需求,我們可以根據(jù)下一步操作接入服務(wù)日志。
4. 日志對接
在skywalking的UI端有一個日志的模塊,用于收集客戶端的日志,默認(rèn)是沒有數(shù)據(jù)的,那么需要如何將項(xiàng)目中產(chǎn)生日志數(shù)據(jù)傳輸?shù)絪kywalking中
4.1 在springboot項(xiàng)目中導(dǎo)入相關(guān)依賴
<!--打印skywalking的TraceId到日志-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>9.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-opentracing</artifactId>
<version>9.2.0</version>
</dependency>部署的時候可以替換自己使用的實(shí)際版本。
4.2 logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<springProperty scope="context" name="applicationName" source="spring.application.name"/>
<!-- 日志存放路徑 -->
<property name="log.path" value="logs/app" />
<!-- 日志輸出格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ,[%X{tid}] [%thread] %-5level %logger{50} - [%method:%line] %msg%n" />
<!-- 控制臺輸出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!-- 設(shè)置異步方式上報 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="console"/>
</appender>
<!--skywalking日志上報-->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
</appender>
<!--日志文件-->
<appender name="file_info" class="ch.qos.logback.core.FileAppender">
<file>${log.path}/info.log</file>
<!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
<!-- 輸出INFO級別以上的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.FileAppender">
<file>${log.path}/error.log</file>
<!-- 循環(huán)政策:基于時間創(chuàng)建日志文件 -->
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
<Pattern>${log.pattern}</Pattern>
</layout>
</encoder>
<!-- 輸出ERROR級別日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="trace">
<appender-ref ref="grpc-log" />
<appender-ref ref="ASYNC"/>
</root>
</configuration>4.3 驗(yàn)證日志是否接入成功

本篇主要以實(shí)戰(zhàn)為主,文檔中存在不足之處請指出,謝謝!
到此這篇關(guān)于Springboot項(xiàng)目集成SkyWalking鏈路追蹤系統(tǒng)實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Springboot SkyWalking鏈路追蹤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven配置文件settings.xml的實(shí)現(xiàn)
Maven是一個用于構(gòu)建和管理Java項(xiàng)目的強(qiáng)大工具,它依賴于設(shè)置文件來配置和管理其行為,其中最重要的之一便是settings.xml文件,本文主要介紹了Maven配置文件settings.xml的實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01
Spring Boot使用AOP實(shí)現(xiàn)REST接口簡易靈活的安全認(rèn)證的方法
這篇文章主要介紹了Spring Boot使用AOP實(shí)現(xiàn)REST接口簡易靈活的安全認(rèn)證的方法,非常具有實(shí)用價值,需要的朋友可以參考下2018-11-11
SpringBoot集成Redis向量數(shù)據(jù)庫實(shí)現(xiàn)相似性搜索功能
Redis?是一個開源(BSD?許可)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲,用作數(shù)據(jù)庫、緩存、消息代理和流式處理引擎,向量檢索的核心原理是通過將文本或數(shù)據(jù)表示為高維向量,并在查詢時根據(jù)向量的相似度進(jìn)行搜索,本文給大家介紹了SpringBoot集成Redis向量數(shù)據(jù)庫實(shí)現(xiàn)相似性搜索功能2024-09-09
提高開發(fā)效率Live?Templates使用技巧詳解
這篇文章主要為大家介紹了提高開發(fā)效率Live?Templates使用技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
mybatis動態(tài)生成sql語句的實(shí)現(xiàn)示例
在MyBatis中,動態(tài)SQL是一個非常重要的特性,它允許我們根據(jù)條件動態(tài)地生成SQL語句,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11

