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

相关推荐
阁阁下25 分钟前
springcloud configClient获取configServer信息失败导致启动configClient注入失败报错解决
后端·spring·spring cloud
whisperrr.1 小时前
【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean
xml·java·spring
天上掉下来个程小白1 小时前
HttpClient-03.入门案例-发送POST方式请求
java·spring·httpclient·苍穹外卖
robin_suli2 小时前
Spring事务的传播机制
android·java·spring
暮乘白帝过重山3 小时前
Singleton和Prototype的作用域与饿汉式/懒汉式的初始化方式
spring·原型模式·prototype·饿汉式·singleton·懒汉式
ejinxian4 小时前
Spring AI Alibaba 快速开发生成式 Java AI 应用
java·人工智能·spring
杉之4 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
圈圈编码4 小时前
Spring Task 定时任务
java·前端·spring
爱的叹息4 小时前
Java 连接 Redis 的驱动(Jedis、Lettuce、Redisson、Spring Data Redis)分类及对比
java·redis·spring
松韬5 小时前
Spring + Redisson:从 0 到 1 搭建高可用分布式缓存系统
java·redis·分布式·spring·缓存