SpringCloud整合skywalking实现链路追踪和日志采集

1.部署skywalking

https://blog.csdn.net/qq_40942490/article/details/144701194

2.添加依赖

xml 复制代码
        <!-- 日志采集 -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>9.3.0</version>
        </dependency>
        <!-- 自定义链路追踪 《如果不需要就会用默认的》 -->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>9.3.0</version>
        </dependency>

3.增加日志配置文件

增加logback-spring.xml文件:

文件内容如下:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false" scanPeriod="10 seconds">
    <contextName>logback</contextName>

    <property name="log.path" value="./log/bztc-study01"/>


    <!--1. 输出到控制台-->
    <appender name="STDOUT" 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.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

4.打印日志

其中,TID需要打印出来

5. windos环境--在IDEA中配置SkyWalking

下载地址 https://skywalking.apache.org/downloads/

在运行的程序配置jvm参数,如下图所示:

shell 复制代码
-javaagent:C:\Users\admin\Downloads\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=portrait-model
-Dskywalking.collector.backend_service=172.16.2.43:11800

6.skywalking网页查询链路

在搜索框中查询TID:

7.自定义链路追踪

7.1代码中使用traceId
java 复制代码
@RequestMapping("/list")
public List<User> list(){

    //TraceContext可以绑定key-value
    TraceContext.putCorrelation("name", "fox");
    Optional<String> op = TraceContext.getCorrelation("name");
    log.info("name = {} ", op.get());
    //获取跟踪的traceId
    String traceId = TraceContext.traceId();
    log.info("traceId = {} ", traceId);
    return userService.list();
}
7.2@Trace 将方法加入追踪链路

调用链路中显示返回值,以及参数值信息,使用@Tag或者@Tags

@Tag注解中key=方法名 value=returnedObj 返回值 agr[0] 参数

param标识参数,returnedObj标识返回值

java 复制代码
    @RequestMapping("/add")
    @Trace
    @Tag(key = "add",value ="returnedObj")
    public String add() {
        System.out.println("下单成功");
        // String forObject = restTemplate.getForObject("http://localhost:8083/stock/reduct", String.class);
        String forObject = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
        //int a= 1/0;
        return "add order " + forObject;
    }
 
    @RequestMapping("/getById/{id}")
    @Trace
    @Tags({@Tag(key = "getById",value ="returnedObj"),
          @Tag(key="param",value = "arg[0]")
    })
    public String getById(@PathVariable("id") Integer id) {
        return "根据id获取信息";
    }



8.日志收集

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false" scanPeriod="10 seconds">
    <contextName>logback</contextName>

    <property name="log.path" value="./log/bztc-study01"/>


    <!--1. 输出到控制台-->
    <appender name="STDOUT" 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.TraceIdPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
    <!--2. 日志收集-->
    <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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="grpc-log"/>
    </root>
</configuration>

9.重新启动服务 然后查看skywalking网页的Log

相关推荐
Java小生不才2 小时前
Spring AI文生音
java·人工智能·spring
二哈赛车手2 小时前
新人笔记---实现简易版的rag的bm25检索(利用ES),以及RAG上传时的ES与向量数据库双写
java·数据库·笔记·spring·elasticsearch·ai
蜜獾云3 小时前
rocketmq traceId重复问题
spring·rocketmq·java-rocketmq
直奔標竿3 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
薪火铺子5 小时前
Spring Security 6.x 实战指南
java·后端·spring
BING_Algorithm5 小时前
一文搞定 AOP 所有核心知识点
spring boot·后端·spring
budingxiaomoli5 小时前
多机部署,负载均衡-LoadBalancer
运维·spring cloud·负载均衡
Cyan_RA95 小时前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
Java成神之路-7 小时前
多 Filter、多 Interceptor 执行优先级控制方案
spring·java web
java1234_小锋7 小时前
Spring AI 2.0 开发Java Agent智能体 - Spring AI项目调用本地Ollama模型
java·人工智能·spring·spring ai2.0