• 10_SkyWalking


    SkyWalking—前言

    对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:
    1.如何串联整个调用链路,快速定位问题?

    2.如何缕清各个微服务之间的依赖关系?

    3.如何进行各个微服务接口的性能分析?

    4.如何跟踪整个业务流程的调用处理顺序?

    作用 : 快速定位问题

    介绍SkyWalkingmp4

    SkyWalking是一个国产开源框架,是一款优秀的**APM(Application Performance Management)**工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等

    非侵入性的 优于其他链路框架

    主要功能特性

    1、多种监控手段,可以通过语言探针和service mesh获得监控的数据;

    2、支持多种语言自动探针,包括Java,.NET Core和Node.JS;

    3、轻量高效,无需大数据平台和大量的服务器资源;

    4、模块化,UI、存储、集群管理都有多种机制可选;

    5、支持告警;

    6、优秀的可视化解决方案;

    SkyWalking—服务端搭建

    在这里插入图片描述

    • skywalking agent和业务系统绑定在一起,负责收集各种监控数据
    • Skywalking oapservice是负责处理监控数据的,比如接受skywaking agent的监控数据,并存储在数据库中:接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapservice通常以集群的形式存在。
    • skywalking webapp,前端界面,用于展示数据。
    • 用于存储监控数据的数据库,比如mysql、elasticsearch等。

    下载地址

    解压 修改一下webapp中webapp.yml中的端口 8868 (本来是8080 为了防止冲突)

    启动 bin/startup.bat

    启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui : 8868
    skywalking-oap-serva;服务启动后会暴露11800和12800两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800

    访问 localhost:8868

    在这里插入图片描述

    SkyWalking—接入多个微服务

    Skywalking跨多个微服务跟踪,只需要每个微服务启动时添加javaagent参数即可。

    gateway模块

    在这里插入图片描述

    gateway模块 alibaba-order-seata 和 alibaba-stock-seata 两个添加javaagent参数

    在这里插入图片描述

    -javaagent:D:\apache-skywalking-apm-bin8.5.0\agent\skywalking-agent.jar
    -Dskywalking.agent.service_name=order-service
    -Dskywalking.collector.backend_service=localhost:11800
    
    • 1
    • 2
    • 3
    参数描述
    javaagent-配置 skywalking-agent.jar 的地址,需要修改
    service_name-配置 需要监控的服务名,需要修改
    javaagent-skywalking收集器服务的地址,照抄

    nacos seata先启动 然后启动项目 alibaba-order-seata 和 alibaba-stock-seata 和gateway

    此处有一个bug看不到gateway服务的

    去到 D:\apache-skywalking-apm-bin8.5.0\agent\optional-plugins 把 apm-spring-cloud-gateway-2.1.x-plugin-8.5.0.jar复制到 D:\apache-skywalking-apm-bin8.5.0\agent\plugins当中 重启

    在这里插入图片描述

    SkyWalking—使用mysql持久化

    默认使用的H2数据库存储

    服务启动 关闭SkyWalking再启动服务没了

    基于mysql的持久化

    修改 config/application.yml

    在这里插入图片描述

    创建数据库swtest(不用创建表)

    然后把mysql的依赖复制到 D:\apache-skywalking-apm-bin8.5.0\oap-libs 下

    重启 skywalking

    发现数据库swtest多了很多表

    这个时候服务启动访问 关闭SkyWalking再启动服务 数据还在

    SkyWalking—自定义链路追踪

    如果我们希望对项目中的业务方法,实现链路追踪,方便我们排查问题,可以使用如下的代码引入依赖

    order-nacos模块

    
    <dependency>
        <groupId>org.apache.skywalkinggroupId>
        <artifactId>apm-toolkit-traceartifactId>
        <version>8.5.0version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    service层 方法中加上@Trace

    在这里插入图片描述

    我们还可以为追踪链路增加其他额外的信息,比如记录参数和返回信息。实现方式:在(service层)方法上增加@Tag或者@Tags。

    必须要有@Trace 后 @Tag才有用

    @Trace
    @Tag(key ="list",value="returnedObj")
    //key = 方法名  value 也是固定的
    public List<User> list(){
        return userMapper.list();
    }
    
    @Trace
    @Tags({
        @Tag(key ="param",value="arg[0]"),
    	@Tag(key ="user",value="returnedObj")
    })
    public User getById(Integer id){
        return userMapper.getById(id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    查看

    在这里插入图片描述

    SkyWalking—性能剖析

    在这里插入图片描述

    SkyWalking—日志

    springboot默认实现的日志框架是logback,这里也就拿logback举例

    1.order-nacos模块引入依赖

    
    <dependency>
        <groupId>org.apache.skywalkinggroupId>
        <artifactId>apm-toolkit-logback-1.xartifactId>
        <version>8.5.0version>
    dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.在项目中resources目录下创建logback-spring.xml文件

    主要就是在日志的输出格式中添加[%tid] 这个就是调用链路的id。

    
    <configuration>
    
        <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.TraceIdPatternLogbackLayout">
                    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%npattern>
                layout>
            encoder>
        appender>
    
        <root level="INFO">
            <appender-ref ref="console" />
        root>
    
    configuration>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3.测试,重启微服务后调用接口,就会在控制台的日志中看到调用链路tid

    刚开始服务启动时,没有调用接口,也就肯定没有链路追踪id,然后调用接口后就会在日志中有显示了

    在这里插入图片描述

    在SkyWalking的追踪菜单中,如果链路很多,我们就可以通过这个TID来进行搜索

    在这里插入图片描述

    但现在日志菜单中还没有任何内容,如果想要服务的日志同步到SkyWalking中,并在日志菜单中显示就还需要在logback-spring.xml文件中添加配置 grpc-log

    
    <configuration>
    
        
        <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.TraceIdPatternLogbackLayout">
                    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level logger_name:%logger{36} - [%tid] - message:%msg%npattern>
                layout>
            encoder>
        appender>
    
        
        <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} [%tid] [%thread] %-5level %logger{36} -%msg%nPattern>
                layout>
            encoder>
        appender>
    
        <root level="INFO">
            <appender-ref ref="console" />
            <appender-ref ref="grpc-log" />
        root>
    
    configuration>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    重启访问 现在日志菜单中就会有我们为微服务打印的日志了

    在这里插入图片描述

    注意:如果SkyWalking的服务端不是部署在本地,也就是SkyWalking没有和微服务部署在同一台服务器中的话,需要修改agent\config\agent.config文件,在结尾添加以下配置,主要就是修改SkyWalking服务的ip和端口

    plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:127.0.0.1}
    plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
    plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
    plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    以上配置时默认配置信息,agent与oap在本地的可以不配

    在这里插入图片描述

    SkyWalking完结—告警

    在这里插入图片描述

    这个自己去了解吧~ 完结撒花

  • 相关阅读:
    Parallels Desktop 18亮点功能改变与变化总整理
    Python:利用Python读取txt、csv、xlsx、doc、json、parquet等各种数据文件类型的多种方法总结
    高等数学(第七版)同济大学 习题1-8 个人解答
    精读《素书》精彩语录及感悟篇(二)
    PHP爬虫类的并发与多线程处理技巧
    目标检测 YOLOv5 - 模型推理预处理 letterbox
    CSRF漏洞分析
    尚品甄选2023全新SpringBoot+SpringCloud企业级微服务项目
    FastJSON将对象转JSON字符串引发的血案
    HTTP协议
  • 原文地址:https://blog.csdn.net/xixihaha_coder/article/details/126709195