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)中的請(qǐng)求流,獲取詳細(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://m.fzitv.net/article/210119.htm
1.2 下載 SkyWalking Agent
同樣在Skywalking的官網(wǎng)中下載Java Agent:https://skywalking.apache.org/downloads/

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

2. 配置Java Agent需要的主要參數(shù)
在啟動(dòng) Spring Boot 應(yīng)用時(shí),添加 SkyWalking agent 配置。用于重寫 agent/config/agent.config 配置文件中的配置參數(shù)值。主要配置參數(shù)如下:
- 解壓后的 SkyWalking agent 文件路徑
-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
- 指定你的服務(wù)名稱,SkyWalking 會(huì)以這個(gè)名稱顯示在監(jiān)控面板中。SW_AGENT_NAME的命名規(guī)則,采用雙冒號(hào) (如CTOS::CONTAINER_SIT),冒號(hào)前的文本字符串將作為組名。
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName} - 指定 SkyWalking 后端服務(wù)的 IP 和端口(默認(rèn)是 11800,若你使用其他端口,請(qǐng)?zhí)鎿Q)。
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}- 考慮到安全因素,部署的skywalking增加了gRPC(11880端口)連接是需要token認(rèn)證。需要看部署時(shí)候是否配置SW_AUTHENTICATION。
agent.authentication=${SW_AGENT_AUTHENTICATION:}2.1 使用jar命令啟動(dòng)
在啟動(dòng) Spring Boot 應(yīng)用時(shí),添加 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啟動(dòng)
2.2.1 打開idea開發(fā)工具Run-》Edit Configurations

2.2.2 配置啟動(dòng)參數(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

方式三
個(gè)人比較喜歡采用環(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 | 注冊(cè)地址 |
| 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 | 注冊(cè)地址 |
| 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)證是否連接成功
啟動(dòng)應(yīng)用后,訪問 SkyWalking 后端(通常是 http://127.0.0.1:8080,取決于你的 SkyWalking 后端配置)查看你的應(yīng)用是否已經(jīng)在 SkyWalking 控制臺(tái)上顯示。

但是這時(shí)候我們發(fā)現(xiàn),打開Log,發(fā)現(xiàn)并沒有日志。如果如果有日志需求,我們可以根據(jù)下一步操作接入服務(wù)日志。
4. 日志對(duì)接
在skywalking的UI端有一個(gè)日志的模塊,用于收集客戶端的日志,默認(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í)候可以替換自己使用的實(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" />
<!-- 控制臺(tái)輸出 -->
<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è)置異步方式上報(bào) -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<neverBlock>true</neverBlock>
<appender-ref ref="console"/>
</appender>
<!--skywalking日志上報(bào)-->
<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)政策:基于時(shí)間創(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級(jí)別以上的日志 -->
<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)政策:基于時(shí)間創(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級(jí)別日志 -->
<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)為主,文檔中存在不足之處請(qǐng)指出,謝謝!
到此這篇關(guān)于Springboot項(xiàng)目集成SkyWalking鏈路追蹤系統(tǒng)實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Springboot SkyWalking鏈路追蹤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Spring Cloud中Hystrix的請(qǐng)求合并
這篇文章主要介紹了詳解Spring Cloud中Hystrix的請(qǐng)求合并,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
Mybatis-plus如何查詢返回對(duì)象內(nèi)有List<String>屬性
在使用Mybatis-Plus進(jìn)行開發(fā)時(shí),我們經(jīng)常會(huì)遇到需要處理一對(duì)多關(guān)系映射的情況,例如,查詢用戶數(shù)據(jù)時(shí),可能需要同時(shí)獲取該用戶管理的所有小區(qū)名稱列表,這要求我們?cè)诜祷氐膶?shí)體類中包含一個(gè)List<String>屬性,用于存放小區(qū)名稱,實(shí)現(xiàn)這一功能2024-10-10
Spring Boot實(shí)現(xiàn)郵件發(fā)送必會(huì)的5種姿勢(shì)
這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)郵件發(fā)送必會(huì)的5種姿勢(shì),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
解析Arthas協(xié)助排查線上skywalking不可用問題
這篇文章主要為大家介紹了解析Arthas協(xié)助排查線上skywalking不可用的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
Spring中使用atomikos+druid實(shí)現(xiàn)經(jīng)典分布式事務(wù)的方法
這篇文章主要介紹了Spring中使用atomikos+druid實(shí)現(xiàn)經(jīng)典分布式事務(wù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06
Java中spring boot validation自定義注解使用方式
這篇文章主要介紹了Java中spring boot validation自定義注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

