当前位置: 首页 > article >正文

skywalking微服务链路追踪

是什么?

skywalking是一个优秀的国产开源框架2015年由个人吴晟(华为开发者)开源 ,

分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

优势:

  • skywalking采用字节码增强的技术实现代码无侵入,zipKin代码侵入性比较高
  • skywalking功能比较丰富,报表统计,UI界面更加人性化

当前主流开源组件

常用链路追踪工具的有:Zipkin、SkyWalking、CAT。

Zipkin 是 Twitter 开源的调用链分析工具,目前基于 SpringCloud Sleuth 得到了广泛的使用,特点是轻量,使用部署简单。

SkyWalking 是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能较强,接入端无代码侵入。目前已加入 Apache 孵化器。

CAT 是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

纯属个人观点:

  • 从接入方式来看,Cat的代码侵入性最高,Zipkin只需要基于Sleuth方式引入配置,SkyWalking无代码侵入性。
  • 从使用入门来看,Zipkin容易些,Cat成本高些。
  • 从页面UI展示来看,健壮度:CAT > SkyWalking> Zipkin。

综上所述,Skywalking代码无侵入性,通信方式采用 gRPC ,性能较好,UI 够强也够用

1.服务端如何搭建?

skywalking同样是通过jar包方式启动,需要下载jar包,地址:
https://skywalking.apache.org/downloads/

这里也有8.1.0版本的和mysql驱动包,需要自取

通过网盘分享的文件:服务追踪
链接: https://pan.baidu.com/s/1VEpBGonq0k08N4pu3x7oqg?pwd=w8j9 提取码: w8j9

SkyWalking版本对应不同的JDK(本人就踩大坑了)

SkyWalking 版本

支持的 JDK 版本

8.x

JDK 8, 9, 10, 11

9.x

JDK 8, 9, 10, 11, 16, 17

10.x

JDK 8, 9, 10, 11, 16, 17

目录分析:

  • agent:客户端需要指定的目录,其中有一个jar,就是负责和客户端整合收集日志
  • bin:服务端启动的脚本
  • config:一些配置文件的目录
  • logs:oap服务的日志目录
  • oap-libs:oap所需的依赖目录
  • webapp:UI服务的目录

修改端口号:

\webapp\application.yml 我修改为8888防止冲突

启动:

启动命令在/bin目录下,这里需要启动两个服务,如下:

oap服务:对应的启动脚本oapService.bat,Linux下对应的后缀是sh

UI服务:对应的启动脚本webappService.bat,Linux下对应的后缀是sh

当然还有一个startup.bat启动文件,可以直接启动上述两个服务,我们可以直接使用这个脚本,直接双击,将会弹出两个窗口则表示启动成功,如下图:

因为skywalking是非侵入式的所以就可以选择直接添加JVM选项

-javaagent:D:\1AAATools\apache-skywalking-apm-bin8.1\apache-skywalking-apm-bin\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=ruoyi-gen
-Dskywalking.collector.backend_service=localhost:11800

-javaagent:skywalking-agent.jar所在路径

-Dskywalking.agent.service_name=分组 + 微服务的服务名称(就是配置参数spring.application.name)

-Dskywalking.collector.backend_service=不用修改(日志收集地址的,固定端口11800)

配置完成后访问http://localhost:8888/

skywalking是根据请求生成这些数据的,所以需要访问项目中的路径才会有数据

skywalking指标:

2.Skywalking 进行日志配置:

为log日志增加 skywalking的 traceId(追踪ID)。便于排查

首先引入maven依赖

<!-- SkyWalking 的日志工具包 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>9.0.0</version>
</dependency>

接着在 resources文件夹下创建 logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <property name="LOG_HOME" value="D:/logs/"></property>
    
    <conversionRule conversionWord="clr"
                    converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <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.mdc.TraceIdMDCPatternLogbackLayout">
                <pattern>%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} [%X{tid}] %clr([%-10.10thread]){faint} %clr(%-5level) %clr(%-50.50logger{50}:%-3L){cyan} %clr(-){faint} %msg%n</pattern>
            </layout>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 修正日期格式 -->
            <FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/pro.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
                <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个
                字符宽度%msg:日志消息,%n是换行符-->
                <!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]
                %-5level %logger{50} - %msg%n</pattern>-->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%-10.10thread]
                    %-5level %-50.50logger{50}:%-3L - %msg%n</pattern>
            </layout>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy
                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!--skywalking grpc 日志收集-->
    <appender name="grpc"
              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="FILE"/>
        <appender-ref ref="grpc"/>
    </root>
</configuration>

请求接口就可以发现TID的输出

把TID放到追踪ID这里:

3.数据持久化:

skywalking默认使用内置内存h2来存储数据,这样的弊端就是重启后数据消失,虽然skywalking是实时的但是最好还是记录一下

打开\apache-skywalking-apm-bin\config\application.yml配置文件

将mysql驱动放入apache-skywalking-apm-bin\oap-libs下

h2改为mysql

修改路径,我这里是组长的数据库

如果报错加上时区

 jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC"}

创建数据库重启nacos,就会自动创建表


http://www.kler.cn/a/592741.html

相关文章:

  • LLVM学习--外部项目
  • Mistral AI发布开源多模态模型Mistral Small 3.1:240亿参数实现超越GPT-4o Mini的性能
  • NVIDIA Isaac GR00T N1:世界首个开源通用人形机器人基础模型
  • 3D点云数据处理中的聚类算法总结
  • 15 数据结构及算法应用
  • 蓝桥杯真题——洛谷Day13 找规律(修建灌木)、字符串(乘法表)、队列(球票)
  • SqlServer Sql学习随笔
  • Apache Tomcat漏洞公开发布仅30小时后即遭利用
  • SQL Server数据库简介及应用
  • RNN及其变体
  • Deepseek r1 本地部署
  • 一键批量DWG_DXF文件互转——CAD c#插件实现(dwg转dxf dxf转dwg)
  • 物联网为什么用MQTT不用 HTTP 或 UDP?
  • 关于QMetaObject::invokeMethod的作用和用法
  • 2025火狐插件被禁用解决方案 could not be verified for use in Firefox and has been disabled
  • php 高性能,高并发,有哪些框架,扩展,推荐一下,或者技术的实现有哪些
  • Weblogic未授权远程命令执行漏洞复现
  • 【内付相关主题会议进行参考】智能技术应用前沿:算法、感知与控制的学术支点与产业衔接
  • 配置固定ip绕过ip限制
  • 动平衡仿真程序设计