Skywalking链路跟踪的介绍和使用

  • Skywalking简介

    • skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源,2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。
    • skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功能较完善。
    • skywalking相比于zipkin还是有很大的优势的,如下:
      • skywalking采用字节码增强的技术实现代码无侵入,zipKin代码侵入性比较高。
      • skywalking功能比较丰富,报表统计,UI界面更加人性化。
  • Skywalking架构

    1. 架构图
      在这里插入图片描述

    2. 架构图主要分为四个部分:
      `
      - 最上面的Agent:负责收集日志数据,并且传递给中间的OAP(Observability Analysis OPlatform)服务器
      - 中间的OAP:负责接收Agent发送的Tracing和Metric的数据,进行分析(Analysis Core)并存储到外部存储器(Storage Implementors),最终提供查询( Query Core)功能。
      - 左面的UI:负责提供web控制台,查看链路,查看各种指标,性能等等。
      - 右面Storage:负责数据的存储,目前支持ES,MySQL,TIDB,H2,Sharding sphere等。
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
  • Skywalking服务端的搭建

    1. 下载安装包

      • 官方网站: http://skywalking.apache.org/
      • 下载地址:https://skywalking.apache.org/downloads/
        在这里插入图片描述
    2. 解压

      • 上图我选择v8.7.0的版本,大家可以按照自己的需求选择

      • 下载完按照包解压安装包:
        在这里插入图片描述

      • 主要目录结构分析:
        agent:客户端指定的agent目录,里面有个skywalking-agent.jar,负责收集日志数据
        bin:服务端启动脚本都在其中
        config:配置文件所在
        logs:服务端运行的一些日志目录
        oap-libs:oap服务所需的一些依赖jar包
        webapp:UI服务的web目录

    3. 修改配置文件:

      • /config/application.yml
        • 配置集群方式-cluster
          在这里插入图片描述

        • 配置存储方式-storage
          在这里插入图片描述

        • 设置配置中心-configuration
          在这里插入图片描述

        • 等等,还有很多配置大家有兴趣可以仔细研究

      • /webapp/webapp.yml
        • 这里建议修改UI服务端的端口号,默认是8080,避免冲突,这里演示修改成9080,可以按照自己的实际情况修改
          在这里插入图片描述
    4. 启动:/bin目录下的startup.sh或startup.bat

      启动后会有3个端口号:

      UI界面端口号:9080

      数据收集端口:

      • Http默认端口 12800
      • gRPC默认端口 11800
    5. 监控dashboard仪表盘:http://localhost:9080/
      在这里插入图片描述

  • Skywalking客户端的接入和使用

    1. 项目接入方式:
      只需要在启动参数指定以下参数即可:
      -javaagent:/Users/self/app/apache-skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=SalaryServiceApplication -Dskywalking.collector.backend_service=127.0.0.1:11800

    2. 说明

      • -javaagent:指定skywalking中的agent中的skywalking-agent.jar的路径
      • -Dskywalking.agent.service_name:指定在skywalking中的服务名称,可以随便写,一般是微服务的spring.application.name
      • -Dskywalking.collector.backend_service:指定oap服务绑定的地址,本地演示情况下,并且oap服务默认的端口是11800,因此只需要配置为127.0.0.1:11800
    3. 脚本

      #!/bin/sh
      # SkyWalking Agent配置
      export SW_AGENT_NAME=SalaryServiceApplication #Agent名字,可以随便写,一般使用[spring.application.name](http://spring.application.name/)
      export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
      export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
      export JAVA_AGENT=-javaagent:/Users/self/app/apache-skywalking/agent/skywalking-agent.jar
      java $JAVA_AGENT -jar xxxx-SNAPSHOT.jar #jar启动

    4. idea接入图示:
      在这里插入图片描述

    5. 启动客户端项目,访问我们项目的接口就可以查看到我们的服务
      在这里插入图片描述

    6. 查看仪表盘详细说明:

      Global全局维度:
      Services load:服务每分钟请求数
      Slow Services:慢响应服务,单位ms
      Un-Health services(Apdex):Apdex性能指标,1为满分。
      * Apdex 一个由众多网络分析技术公司和测量工业组成的联盟组织,它们联合起来开发了“应用性能指数”即“Apdex”(Application Performance Index),用一句话来概括,Apdex是用户对应用性能满意度的量化值
      * http://www.apdex.org/
      Slow Endpoints: 慢响应端点,单位ms
      Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
      Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度

      Service服务维度:

      Service Apdex(数字):当前服务的评分
      Service Avg Response Times:平均响应延时,单位ms
      Successful Rate(数字):请求成功率
      Servce Load(数字):每分钟请求数
      Service Apdex(折线图):不同时间的Apdex评分
      Service Response Time Percentile:百分比响应延时
      Successful Rate(折线图):不同时间的请求成功率
      Servce Load(折线图):不同时间的每分钟请求数
      Servce Instances Load:每个服务实例的每分钟请求数
      Slow Service Instance:每个服务实例的最大延时
      Service Instance Successful Rate:每个服务实例的请求成功率

      Instance实例维度:
      Service Instance Load:当前实例的每分钟请求数
      Service Instance Successful Rate:当前实例的请求成功率
      Service Instance Latency:当前实例的响应延时
      JVM CPU:jvm占用CPU的百分比
      JVM Memory:JVM内存占用大小,单位m
      JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
      JVM GC Count:JVM垃圾回收次数,包含YGC和OGC

      Endpoint端点维度:
      Endpoint Load in Current Service:每个端点的每分钟请求数
      Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms
      Successful Rate in Current Service:每个端点的请求成功率
      Endpoint Load:当前端点每个时间段的请求数据
      Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间
      Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
      Endpoint Successful Rate:当前端点每个时间段的请求成功率

    7. 查看项目的拓扑图
      在这里插入图片描述

    8. 链路追踪

      1. 接口的跟踪

        查看所有的接口请求情况:
        在这里插入图片描述

        查看单个接口请求:
        在这里插入图片描述

        请求失败的时候,可以看到错误日志:
        在这里插入图片描述

        请求成功的结果:
        在这里插入图片描述

      2. sql的跟踪

        可以看到请求执行的sql操作:
        在这里插入图片描述

        点击上面单个记录可以查看详情:
        在这里插入图片描述

        点击右上角的表格方式可以查看到具体sql执行时间,快速跟踪sql查询效率:

        在这里插入图片描述

        点击统计筛选可以看到sql的总体执行情况:
        在这里插入图片描述

    9. 性能剖析

      skywalking在性能剖析方面真的是非常强大,提供到基于堆栈的分析结果,能够让运维人员一眼定位到问题。

      在性能剖析模块->新建任务->选择服务、填写端点、监控时间,操作如下图:
      在这里插入图片描述
      上图中选择了最大采样数为5,则直接访问5次:http://localhost:8088/a,然后选择这个任务将会出现监控到的数据,如下图:

      在这里插入图片描述
      可以看到详细的堆栈信息,如下图:
      在这里插入图片描述

    10. 日志:常用log4j、log4j2、logback

      参考地址方法:https://www.csdn.net/tags/NtzaYg0sODk5NjQtYmxvZwO0O0OO0O0O.html

    11. 告警

      skywalking中有一些默认的告警规则,如下:

      • 最近3分钟内服务的平均响应时间超过1秒
      • 最近2分钟服务成功率低于80%
      • 最近3分钟90%服务响应时间超过1秒
      • 最近2分钟内服务实例的平均响应时间超过1秒

      可以根据实际项目要求在/config/alarm-settings.yml里面配置
      在这里插入图片描述

  • Skywalking持久化

    ​ 未做任何修改的时候,

    你会发现只要服务端重启之后,这些链路追踪数据将会丢失了,因为skywalking默认持久化的方式是存储在内存中,默认使用H2。
    在这里插入图片描述

    1. 修改配置文件:/config/application.yml
      在这里插入图片描述
      这里修改selector为mysql,配置自己的数据库连接地址,用户名密码以及其他参数按需配置

    2. 添加Mysql的jdbc依赖
      在oap-libs中默认是没有mysql的jdbc依赖的,只需要将mysql的驱动jar放到oap-libs目录中即可
      在这里插入图片描述

    3. 配置完了,需要重启服务/bin/startup.sh
      重启完之后,系统会在配置的数据库中自动创建表
      在这里插入图片描述

  • 总结

    本文主要讲解了skywalking服务的安装和配置,客户端接入以及持久化。对我们实际的项目运用还是很有帮助的,能让我们更快的更细致的了解我们的系统,从而可以评估和判断出系统的问题。