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

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,就会自动创建表

相关文章:

  • 小白电路设计-设计2-可调式单电源直流稳压电路设计
  • Python实战(2)-数据库支持
  • numpy学习笔记14:模拟随机游走过程
  • hadoop-HDFS操作
  • 【链表】一文搞定链表算法:从基础到实战
  • 人工智能:如何把excel中某数据区域中,含有空格数据的单元格标记背景颜色出来?
  • S32K144外设实验(二):ADC单通道单次采样(软件触发)
  • 《Linux:动态库动态链接与静态库静态链接》
  • 声动未来,门店数字化助力韶音加速破圈
  • 4. 移动到末尾(蓝桥云课)
  • stm32第七天震动传感器
  • Java 文件和IO流基础(生动形象版)
  • 进程间通信(1)——管道
  • Android AI ChatBot-v1.6.3-28-开心版[免登录使用GPT-4o和DeepSeek]
  • 深入理解Java内存模型(JMM)及其并发编程中的应用
  • 「JavaScript深入」WebSocket:高效的双向实时通信技术
  • 【基于深度学习的验证码识别】---- part3数据加载、模型等API介绍(2)
  • HAL库编程知识点---Can.c和Driver_can.c分层开发
  • Linux | gcc编译篇
  • 从零构建大语言模型全栈开发指南:第一部分:数学与理论基础-1.1.2核心数学基础:线性代数、概率论与梯度优化
  • 道指跌逾100点,特斯拉涨近5%
  • 习近平会见委内瑞拉总统马杜罗
  • 中国一重集团有限公司副总经理陆文俊被查
  • 习近平向中国人民解放军仪仗队致意
  • 保证断电、碰撞等事故中车门系统能够开启!汽车车门把手将迎来强制性国家标准
  • Meta正为AI眼镜开发人脸识别功能