Skywalking分布式链路跟踪,相关图形,dljd,cat

一 业务:大型的几十个、几百个微服务构成的微服务架构系统

二 想法、需求、问题:链路跟踪

对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:

        如何串联整个调用链路,快速定位问题?

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

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

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

三 解决方案:

(1)功能“集”:

  1. Skywalking提供分布式链路追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案;

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

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

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

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

    5. 支持告警;

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

(2)“神”冰箱:Skywalking

四 “完成”“高效”视频:

1 体系组织 

  1. 分布式链跟踪

    1. 定义:对分布式系统的应用程序运行情况(如执行顺序、性能等待)进行监视的工具

    2. 场景:专为微服务、云原生架构和基于容器(Docker、K8s)架构而设计;

    3. 产品:Skywalking(非spring cloud官网提供的。国内、java、apache下的顶级项目)等

  2. 相关网站

    1. 官网:Apache SkyWalking

    2. 下载:Downloads | Apache SkyWalking

    3. Github:GitHub - apache/skywalking: APM, Application Performance Monitoring System

    4. 使用公司:(国内非常多)

    5. https://github.com/apache/skywalking/blob/master/docs/powered-by.md

  3. SkyWalking中三个概念

    服务(Service) :表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字,我们可以看到 Spring Boot 应用服务为 "11-springboot",就是我们在环境变量 SW_AGENT_NAME 中所定义的;PS:服务的名称。

    服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;PS:某个主机(有ip和端口)上运行的具体应用程序实例。

    这里我们可以看到 Spring Boot 应用的服务为 {agent_name}-pid:{pid}@{hostname},由 Agent 自动生成;

    端点(Endpoint) :对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名;PS:URI地址是端点。访问路径是端点。路径是端点。

    我们可以看到 Spring Boot 应用的一个端点,为API接口 /index;

 2 思想、思路、流原

整个架构分成四部分:

  1. 上部分Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器;(相当于跟踪器、定位器,你到哪里都知道完)
    1. 项目中加入Skywakling依赖
    2. 此时Skywakling跟踪应用的运行流程
    3. 把跟踪的数据发送给SkyWalking
  2. 下部分 SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能;
    1. 可以把链路信息保存到持久化设备,如数据库:h2、mysql、TIDB等待。
  3. 右部分Storage:Tracing数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用较多的是ES,主要考虑是SkyWalking开发团队自己的生产环境采用ES为主;
  4. 左部分SkyWalking UI:页面负责提供控台,查看链路等等;

  1.  微服务+agent(相当于跟踪器、定位器,你到哪里都知道完)
    1. spring boot或spring cloud项目
    2. 内嵌skywalking Agent,作用是数据采集
  2. skywalking OAP
    1. skywalking OAP是分析平台
    2. 把采集的数据持久到持久化设备中(如mysql等)
  3. elasticsearch:mysql等
    1. 如果不指定,默认使用h2数据库,h2是一个嵌入式的数据库
  4. skywalking UI
    1. 浏览器打开
    2. 展示、统计、分析采集的数据

3 重:SkyWalking运行环境部署

  1. 第一步:下载 SkyWalking 软件包;
  2. 第二步:搭建一个 SkyWalking OAP 和SkyWalking UI服务;
    1. java语言写的
    2. 包的分类
      1. 手动编译:即自己要手动编译
      2. 官方包:已经编译好
    3. es包分类
      1. es包:可使用多种数据库,如mysql
      2. 非es包:默认使用h2
    4. 操作步骤:
      1. 第1步:解压:tar -zxvf apache-skywalking-apm-8.1.0.tar.gz,解压后即完成了安装,不需要做其他操作;

      2. 第2 步:切换:cd apache-skywalking-apm-bin

        1. 目录说明:

          1. agent #SkyWalking Agent

          2. bin #执行脚本

          3. config #SkyWalking OAP Server 配置文件

          4. LICENSE #许可证

          5. licenses #许可证

          6. NOTICE #通知

          7. oap-libs #依赖的一些jar包,SkyWalking OAP Server

          8. README.txt #阅读

          9. tools #工具

          10. webapp #SkyWalking UI,即UI界面,所有的页面都在里面。以jar包的形式存在。以jar包的形式进行运行。

      3. 第3步:修改OAP配置文件(默认情况下也不需要修改也可以,即走h2就行)

        1. config目录下

        2. vim application.yml

          1. storage:存储,默认h2,可改

      4. 第4步:启动

        1. 切换到bin目录:./startup.sh,这个命令启动两个.sh

          1. 启动oapService.sh,数据分析、统一服务

          2. 启动webappService.sh,UI

      5. 第5步:查看日志

        1. logs目录

        2. 查看oap平台日志

        3. 查看UI平台日志

      6. 第6步:测试

        1.  浏览器访问它的UI管控台界面:http://192.168.172.128:8080/

      7. 端口冲突
        1. webapp.yml:UI

          1. 8080

        2. conf/application.yml:oap

          1. 11800、12800

        3. agent/config/agent.config

          1. oap连接ip和port

  3. 第三步:启动一个Spring Boot应用,并配置SkyWalking Agent;

    1. springboot程序
    2. 案例一:jar包,并部署

      准备一个springboot程序,打成可执行jar包,并上传到linux服务器。写一个shell脚本,在启动项目的Shell脚本上,通过 -javaagent 参数进行配置SkyWalking Agent来跟踪微服务;

      #!/bin/sh

      # SkyWalking Agent配置

      export SW_AGENT_NAME=11-springboot #Agent名字,一般使用服务名称,即`spring.application.name`

      export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置OAP Collector平台地址。

      export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。

      export JAVA_AGENT=-javaagent:/usr/local/apache-skywalking-apm-bin/agent/skywalking-agent.jar #指定Agent.jar位置

      java $JAVA_AGENT -jar 11-springboot-1.0.0.jar #Agent.jar启动

      在启动程序前加一个-javaagent 参数即可完成对程序的跟踪;

    3. 案例二:war包,并部署

      在tomcat中部署war包配置SkyWalking Agent来跟踪微服务;

      修改/usr/local/apache-tomcat-9.0.31/bin/catalina.sh 文件,在顶部第一行加上:

      CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/apache-skywalking-apm-bin/agent/skywalking-agent.jar";

      export CATALINA_OPTS;

      如果tomcat端口与skywalking ui端口冲突的话,修改一下tomcat端口;

      测试,访问一下项目,然后进入 SkyWalking UI 界面查看跟踪情况,由于上传数据是异步的,访问完项目后,可能需要等几秒才能看到跟踪数据;

  4. 第四步:数据存储暂时先使用它默认的H2数据库存储,后续我们再使用其他存储;
  5. 第五步:访问,测试
  6. 第六步:停止
    1. 无shutdown.sh,只能用kill命名

4 重:Skywalking 管控台(UI界面)(仪表盘、拓扑图、追踪、性能剖析、告警)

  1. 延时、异步处理、需要等待2~3秒的时间、刷新、看到数据
  2. 中英文切换
  3. 时间(区间)切换
    1. 最近15分钟
    2. 最近30分钟
  4. 仪表盘
    1. 功能概述
      1. 当前服务:服务名称
      2. 当前端点:方法名
      3. 当前实例:实例ID
    2. 控制栏1
      1. APM:应用性能管理。英文首字母大写。
      2. Database:数据库
      3. SelfObservability:容器
    3. 控制栏2
      1. 编辑
      2. 导出当前数据(json文件)
      3. 导入展示数据
      4. 刷新
      5. 筛选:不同服务的筛选、不同(当前)端点的筛选、不同(当前)实例的筛选
    4. 控制栏3:
      1. 全局
      2. 服务
      3. 实例
      4. 端点
      5. 导入
      6. 导出
    5. 展示栏
      1. Global:全局
        1. Services load:服务每分钟请求数;

        2. Slow Services:慢响应服务,单位ms;
        3. Un-Health services(Apdex): Apdex性能指标,1为满分;

        4. Slow Endpoint:慢响应端点,单位ms;

        5. Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms;

        6. Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度;

      2. service

        1. Service Apdex(数字):当前服务的评分;

        2. Service Apdex(折线图):不同时间的Apdex评分;

        3. Service Avg Response Times:平均响应延时,单位ms;

        4. Global Response Time Percentile:百分比响应延时;

        5. Successful Rate(数字):请求成功率;

        6. Successful Rate(折线图):不同时间的请求成功率;

        7. Servce Load(数字):每分钟请求数;

        8. Servce Load(折线图):不同时间的每分钟请求数;

        9. Servce Instances Load:每个服务实例的每分钟请求数;

        10. Show Service Instance:每个服务实例的最大延时;

        11. Service Instance Successful Rate:每个服务实例的请求成功率;

      3. Instance

        1. Service Instance Load:当前实例的每分钟请求数;

        2. Service Instance Successful Rate:当前实例的请求成功率;

        3. Service Instance Latency:当前实例的响应延时;

        4. JVM CPU:jvm占用CPU的百分比;

        5. JVM Memory:JVM内存占用大小,单位m;

        6. JVM GC Time:JVM垃圾回收时间,包含YGC和OGC;

        7. JVM GC Count:JVM垃圾回收次数,包含YGC和OGC;

        8. JVM Thread Count:JVM线程数;

        9. 还有几个是.NET的,类似于JVM虚拟机,暂时不做说明;

      4. Endpoint

        1. Endpoint Load in Current Service:每个端点的每分钟请求数;

        2. Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms;

        3. Successful Rate in Current Service:每个端点的请求成功率;

        4. Endpoint Load:当前端点每个时间段的请求数据;

        5. Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间;

        6. Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比;

        7. Endpoint Successful Rate:当前端点每个时间段的请求成功率;

  5. 拓扑图
    1. 功能概述
      1. 进入告警信息
      2. 当前端点、当前深度
      3. 请求的追踪/index
        1. 列表
        2. 树状
        3. 表格
      4. 仪表盘数据
      5. 访问报错,红色。
    2. 展示栏
      1. 选择不同的服务关联拓扑;

      2. 查看单个服务相关内容;

      3. 服务间连接情况;

      4. 分组展示服务拓扑;

  6. 追踪
    1. 功能概述
      1. 请求开始时间
      2. 请求到响应的持续时间
      3. 方法类型
      4. 根据id去查询
      5. 访问报错,红色。
      6. 追踪id,唯一的。
    2. 展示栏:
      1. 左侧:api接口列表,红色-异常请求,蓝色-正常请求;

      2. 右侧:api追踪列表,api请求连接各端点的先后顺序和时间;

  7. 性能剖析
    1. 第一步:得新建一个任务,skywalking在执行任务时才会帮我们做性能分析
      1. 服务:需要分析的服务;

      2. 端点名称:链路监控中端点的名称,可以在链路追踪中查看端点名称;

      3. 监控时间:采集数据的开始时间;

      4. 监控持续时间:监控采集多长时间;

      5. 起始监控时间:多少秒后进行采集;

      6. 监控间隔:多少秒采集一次;

      7. 最大采集数:最大采集多少样本;

    2. 第二步:消费者调用生产者,多调几次

    3. 第三步:skywalking按照我们配置的规则自动做性能剖析,并返回结果。

  8. 告警
    1. 规则文件:cd /usr/local/apache-skywalking-apm/conf/alarm-settings.yml

    2. 规则文件中可以配置回调代码。webhooks。信息、内容。

    3. 多个规则,只要满足任何一个规则就会告警

    4. 不同维度告警列表,可分为服务、端点和实例;

  9. 刷新
    1. 自动刷新:每隔多长时间,刷新一遍
    2. 手动刷新

5 重:(开发中)在IDEA中使用Skywalking做链路跟踪

在运行的程序配置jvm参数和环境变量参数,如下图所示:

 -javaagent:D:/dev/apache-skywalking-apm-bin/agent/skywalking-agent.jar

SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800;SW_AGENT_NAME=sharding

6 重:Skywalking告警通知功能

  1. 告警由规则驱动
    1. config/alarm-settings.yml定义规则
      1. 规则
        1. 服务响应时间规则
          1. message规则说明
        2. 平均响应时间规则
        3. ......多个
      2. webhooks,触犯其中一个规则,web回调,回调钩子,地址
        1. 原理:git+jenkins:当我们往git上提交代码时,会自动触发一个地址的调用。效果是,通知jenkins去自动构建项目。
        2. 原理:github配置webhooks后,往github提交代码后,会自动回调一个钩子或回调一个地址。
        3. 应用场景:发生错误,发短信、邮件、消息给相关人员进行处理。
  2. 根据webhooks返回的对象排查错误

7 重:持久化

  1. 默认h2数据库,数据丢失
  2. 持久化到mysql数据库
    1. 非es的jar包
    2. conf/application.yml
      1. storage ,数据存储
        1. selector:mysql ,使用mysql
        2. 配置mysql的4个要素
    3. 测试:
      1. 启动mysql。创建对应的数据库。
      2. 启动Skywalking的oap平台和ui界面程序
        1. oap-libs目录加入mysql的jdbc驱动包
        2. not exist。表不存在,Skywalking会自动帮我们创建表。一共有81张表。
      3. 启动springboot程序
      4. 浏览器地址栏访问
      5. Skywalking的UI界面有数据
      6. mysql数据库表中也有数据
  3. 持久化到elasticsearch
    1. 安装elasticsearch7
    2. 下载es版本的jar包。
    3. 解压。
    4. 修改application.yml配置文件
      1. cd apache-skywalking-apm-es7-8.1.0

      2. storage:

          selector: ${SW_STORAGE:elasticsearch7}

    5. 启动elasticsearch7

      1. jvm至少512M

    6. 启动elasticsearch-head插件:npm run start 便于查看elasticsearch数据;

    7. 启动skywalking

    8. 启动应用程序,查看跟踪数据是否已经持久化到elasticsearch的索引中;

    9. 然后重启skywalking,验证跟踪数据会不会丢失;

8 重:Skywalking跨多个微服务跟踪

  1. Skywalking跨多个微服务跟踪,只需要每个微服务启动时添加javaagent参数即可。效果,整个长链条都会被监控。
    1. 注:可以跟踪到查数据库。 
    2. 红色:异常、错误、卡/慢

-javaagent:D:/dev/apache-skywalking-apm-bin/agent/skywalking-agent.jar

SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.172.128:11800;SW_AGENT_NAME=11-springboot-idea

9 重:自定义SkyWalking链路追踪

  1. 自定义skywalking链路追踪:如果我们希望对项目中的业务方法,实现链路追踪,方便我们排查问题,可以使用自定义skywalking链路追踪。
    1. 第一步:添加工具包的依赖。
      1. 工具包的版本要和skywalking的版本一致 
    2. 第二步:配置文件不用配置,不用动
    3. 第三步:编码
      1. 方式1:使用工具类TraceContext.java
        1. traceId(),获取追踪id
        2. getCorrelation(String key),获取键对应的值
        3. putCorrelation(String key,String value),设置键值对
      2. 方式2:另外如果一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上@Trace、httpSuport.getInstane.suport()注解即可。通过这种方式,即可在原来的基础上添加追踪一些重要的方法。
        1. 该方法不能是静态的
  2. 效果
    1. 在代码中可以获取追踪id
      1. 可以写到日志中
      2. 或者可以记录到数据库中例如,在订单服务中,可以把订单相关的追踪id记录到数据表中。如果此时如果想在SkyWalking管控台中查看某个订单的链路情况,此时就可以从数据库表中拿到追踪id,然后在SkyWalking管控台中一查询就可以查看该订单的链路情况(异常、性能等)了。

10 重:Skywalking集成日志框架

  1. Skywalking + logback
    1. 第一步:添加集成依赖
    2. 第二步:加入logback-spring.xml文件
    3. 第三步:在代码中写上日志
    4. 第四步:访问,测试

11 重:skywalking集群

  1.  方式1:skywalking+nacos

    1. 想法、需求、问题:群集,避免单点故障

    2. 思路:Skywalking集群是将skywalking oap(至少两份)作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就能进行跟踪;

    3. 搭建一个skywalking oap集群需要:

      (1)至少一个Nacos(也可以把nacos集群)

      (2)至少一个ElasticSearch(也可以把es集群)

      (3)至少2个skywalking oap服务;

      (4)至少1个UI(UI也可以集群多个,用Nginx代理统一入口)

    4. 操作步骤:

      1. 第一步:解压两份apache-skywalking-apm-es7-8.1.0.tar.gz
      2. 第二步:修改配置conf/application.yml文件

        1. 第1步:表明使用nacos做集群。第一、二台的skywalking oap服务配置。

          cluster:

                 selector: ${SW_CLUSTER:nacos}

          nacos:

                serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}

                hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}

        2. 第2步:skywalking core(核心)配置

          1. 第一台

            restHost: ${SW_CORE_REST_HOST:0.0.0.0}:restful对外暴露的IP,其中0.0.0.0表示用任何机器都可以访问这个服务。

            restPort: ${SW_CORE_REST_PORT:12801}

            gRPCPort: ${SW_CORE_GRPC_PORT:11801}

            gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}:RPC对外暴露的IP,其中0.0.0.0表示用任何机器都可以访问这个服务。

          2. 第二台

            restHost: ${SW_CORE_REST_HOST:0.0.0.0}:restful对外暴露的IP,其中0.0.0.0表示用任何机器都可以访问这个服务。

            restPort: ${SW_CORE_REST_PORT:12802}

            gRPCPort: ${SW_CORE_GRPC_PORT:11802}

            gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}:RPC对外暴露的IP,其中0.0.0.0表示用任何机器都可以访问这个服务。

        3. 第3步:storage存储(持久化)。使用的是es。

          1. 使用elasticsearch作为storage

            storage:

              selector: ${SW_STORAGE:elasticsearch7}

            storage:

            elasticsearch7:

            nameSpace: ${SW_NAMESPACE:""}

            clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}

      3. 第三步:配置web控制台

        配置ui服务webapp/webapp.yml文件的listOfServers,写两个地址

        listOfServers: 127.0.0.1:12801,127.0.0.1:12802,即此时这个web ui后台(管控台)连接两个skywalking oap服务。

      4. 第四步:测试

        1. 第1步:启动至少1个nacos。查日志。

        2. 第2步:启动至少1个es数据库。查日志。

        3. 第3步:启动至少2个skywalking oap。查日志。

        4. 第4步:然后再起一个web ui后台(管控台);或者可以启两份web ui后台,然后通过nginx去代理,即此时访问nginx时可以代理到ui1和ui2中的一个。查日志。

        5. 第5步:启动一个springboot程序,此时这个程序会到naocs中获取skywalking服务,然后把链路数据上传到skywalking服务,最后我们在web ui后台(管控台)中会看到。

        6. 第6步:通过restful的方式在浏览器调用Springboot程序的一个服务。

        7. 第7步:查看web ui中的链路数据。刷新。

        8. 第8步:关闭一台skywalking oap服务,依然可以工作。

      5. 注:生产中不搭集群也是可以的,因为这个只是调用链路跟踪,skywalking oap跟踪服务如果宕机了,完全不会影响正常业务;

  2. 方式2:skywalking+zoolkeeper

  3. 方式3:skywalking+别的东西

自己理解:
关:【关联、对比】

重:【,实现技术,工具】
难:【感想、体会、领悟】   【总结、归纳、规律】
大道至简:提图表短(纲)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值