Springboot接入SkyWalking分布式链路追踪

7,146 阅读1分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

下载SkyWalking(推荐官网)

skywalking.apache.org/downloads/

直接下载tar包 www.apache.org/dyn/closer.…

本地启动SkyWalking

  1. 解压缩tar包,进入apache-skywalking-apm-bin/bin目录
  2. windows系统直接运行startup.bat(linux系统运行startup.sh);出现如下视图,表示启动成功 image.png

浏览器打开:http://localhost:8080/ 即可访问SkyWalking的管理界面

image.png

Springboot接入SkyWalking

以javaagent的方式接入,对代码无侵入

java -javaagent:/usr/skywalking/agent/skywalking-agent.jar  -Dskywalking.agent.service_name=your-service-name -Dskywalking.collector.backend_service=127.0.0.1:11800

如果是用idea启动springboot项目,可在VM参数区配置

image.png

启动项目,看到如下拓扑图,即说明你的服务已被监控

image.png

日志打印trace_id

以logback为例

  • pom文件添加依赖
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-logback-1.x</artifactId>
            <version>8.6.0</version>
        </dependency>
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
        </dependency>
  • logback配置文件添加配置
    <!-- 控制台输出 -->
    <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>${logEnv} %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n
                </Pattern>
            </layout>
        </encoder>
    </appender>

    <!-- 上报给logstash -->
    <appender name="logStash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>${StashUrl}</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.TraceIdJsonProvider"/>
            <customFields>{"applicationName":"${AppID}-${logEnv}"}</customFields>
        </encoder>
    </appender>
  • idea启动项目可看到控制台输出

image.png

  • Kibana上查看日志

image.png

  • 通过trace_id查看调用链路

image.png

解决项目使用WebFlux框架导致trace_id无法获取的问题

比如使用了Springcloud的gateway组件

image.png 将上图中\apache-skywalking-apm-bin\agent\optional-plugins下的4个可选插件复制到 \apache-skywalking-apm-bin\agent\plugins下即可 image.png