天天看点

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

微服务链路追踪组件Skywalking介绍

每天多学一点点~

话不多说,这就开始吧…

文章目录

  • 微服务链路追踪组件Skywalking介绍
    • 1.前言
    • 2. 调用链选型
    • 3. Skywalking整体架构
    • 4. SkyWalking 环境搭建部署
    • 5. SkyWalking Agent跟踪单个服务
    • 6. SkyWalking Agent跟踪微服务
    • 7. SkyWalking Agent持久化
    • 8.SkyWalking Agent集群部署
    • 9.SkyWalking Agent高阶特性
    • 10 .结语

1.前言

之前一直想学习一下分布式链路调用,今天正好闲暇,遂研究研究~

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

  1. 如何串联整个调用链路,快速定位问题?
  2. 如何理清各个微服务之间的依赖关系?
  3. 如何进行各个微服务接口的性能分折?
  4. 如何跟踪整个业务流程的调用处理顺序?

skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

官网:http://skywalking.apache.org/

下载:http://skywalking.apache.org/downloads/

Github:https://github.com/apache/skywalking

文档: https://skywalking.apache.org/docs/main/v8.4.0/readme/

中文文档: https://skyapm.github.io/document-cn-translation-of-skywalking/

2. 调用链选型

  1. Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
  2. Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
  3. SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
  4. CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

探针性能对比

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。

3. Skywalking整体架构

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

整个架构分成四部分:

1、上部分Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器;

2、下部分 SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能;

3、右部分Storage:Tracing数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用较多的是ES,主要考虑是SkyWalking开发团队自己的生产环境采用ES为主;

4、左部分SkyWalking UI:负责提供控制台,查看链路等等;

SkyWalking支持三种探针:

● Agent – 基于ByteBuddy字节码增强技术实现,通过jvm的agent参数加载,并在程序启动时拦截指定的方法来收集数据。

● SDK – 程序中显式调用SkyWalking提供的SDK来收集数据,对应用有侵入。

● Service Mesh – 通过Service mesh的网络代理来收集数据。

后端(Backend)

接受探针发送过来的数据,进行度量分析,调用链分析和存储。后端主要分为两部分:

● OAP(Observability Analysis Platform)- 进行度量分析和调用链分析的后端平台,并支持将数据存储到各种数据库中,如:ElasticSearch,MySQL,InfluxDB等。

● OAL(Observability Analysis Language)- 用来进行度量分析的DSL,类似于SQL,用于查询度量分析结果和警报。

界面(UI)

● RocketBot UI – SkyWalking 7.0.0 的默认web UI

● CLI – 命令行界面

这三个模块的交互流程:

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

4. SkyWalking 环境搭建部署

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
  • skywalking agent和业务系统绑定在一起,负责收集各种监控数据
  • Skywalking oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapservice通常以集群的形式存在。
  • skywalking webapp,前端界面,用于展示数据。
  • 用于存储监控数据的数据库,比如mysql、elasticsearch等。
  1. 准备一台虚拟机 192.168.73.132机器
  2. 下载

    下载:http://skywalking.apache.org/downloads/

    本文选用 8.4.0 版本

    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
    目录结构
    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
  3. 搭建SkyWalking OAP 服务

    这里先选用默认h2数据库(重启之后数据就没了,不会持久化)

启动脚本bin/startup.sh
若权限不够,则  chmod u+x *.sh  
           
微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

启动成功后会启动两个服务,一个是skywalking-oap-server,一个是skywalking-web-ui

skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为 收集监控数据的端口11800 和 接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml

skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

server.port:SkyWalking UI服务端口,默认是8080;

collector.ribbon.listOfServers:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得;

成功之后 访问 http://192.168.73.132:8080/

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

5. SkyWalking Agent跟踪单个服务

SkyWalking 是 零侵入的,所以 用起来十分简单。

  1. jar包方式启动

    随便找一个springboot项目,以 springboot-skywalking-demo-0.0.1-SNAPSHOT.jar为例

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 -DSW_AGENT_NAME=springboot-skywalking-demo -jar springboot-skywalking-demo-0.0.1-SNAPSHOT.jar
           

这样就可以了,调调接口,ui界面就会有显示。

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
  1. 在idea中使用

    第一种是在服务器上使用,idea也十分简单。

    注意点:本地idea启动一定要有 agent 这个文件夹

    在idea中指定jvm参数即可:

    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
-javaagent:F:\java\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=springboot-skywalking-demo
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.73.132:11800 
 # 192.168.73.132 为服务器地址
           

6. SkyWalking Agent跟踪微服务

Skywalking跨多个微服务跟踪,只需要每个微服务启动时添加javaagent参数即可。(参数中名字别起一样的记住)

但是这个和有坑,跟踪链路不显示gateway

拷贝agent/optional-plugins目录下的gateway插件到agent/plugins目录 即可。

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

这里启动三个服务,直接用idea测试一下:

微服务 
认证中心
-javaagent:F:\java\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=cloud-authcenter
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.73.132:11800 

网关
-javaagent:F:\java\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=cloud-gateway
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.73.132:11800 

农污
-javaagent:F:\java\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=cloud-nongwu
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.73.132:11800
           

项目启动,调一下接口,skywalking界面如下:

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

7. SkyWalking Agent持久化

  1. 基于mysql 的持久化

    修改config目录下的application.yml,使用mysql作为持久化存储的仓库

    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
storage:
  #选择使用mysql   默认使用h2,不会持久化,重启skyWalking之前的数据会丢失
  selector: ${SW_STORAGE:mysql}
  #使用mysql作为持久化存储的仓库
  mysql:
    properties:
      #数据库连接地址
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://1ocalhost:3306/skywalking"}
      #用户名
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      #密码
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
           

注意:需要添加mysql数据驱动包,因为在lib目录下是没有mysql数据驱动包的,所以修改完配置启动是会报错,启动失败的。

添加mysql数据驱动包到oap-libs目录下

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

查看skywalking数据库,可以看到生成了很多表。

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

2. 基于es7 的持久化

没有玩过es的小伙伴,可以看看博主之前搭建es的文章。

elk相关文章

准备好es环境

修改config/application.yml配置文件:

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

修改elasticsearch7的连接配置

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

重启服务,启动时 会向elasticsearch中创建大量的index索引用于持久化数据,每天会产生一个新的索引文件。

测试:

启动应用程序,查看跟踪数据是否已经持久化到elasticsearch的索引中,然后重启skywalking,验证跟踪数据会不会丢失

微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍

8.SkyWalking Agent集群部署

Skywalking集群是将skywalking oap作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就能进行跟踪。

搭建一个skywalking oap集群需要:

  • 至少一个Nacos(也可以是nacos集群)
  • 至少一个ElasticSearch(也可以是es集群)
  • 至少2个skywalking oap服务;
  • 至少1个UI(UI也可以集群多个,用Nginx代理统一入口)
  1. 修改config/application.yml文件

    使用nacos作为注册中心

    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
  2. 修改nacos配置
    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
    可以选择性修改监听端口
    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
    修改存储策略,使用elasticsearch7作为storage
    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
  3. 配置ui服务webapp.yml文件的listOfServers,写两个地址
    微服务链路追踪组件Skywalking介绍微服务链路追踪组件Skywalking介绍
  4. 启动服务测试

    启动Skywalking服务,指定springboot应用的jvm参数

idea测试同理

9.SkyWalking Agent高阶特性

SkyWalking 还有很多功能,比如:

  • 告警通知
  • 自定义链路追踪
  • 集成日志框架

    等等,大家想学的可以去官网深度学习一下。 有时间再写一遍博客介绍介绍~

10 .结语

世上无难事,只

怕有心人,每天积累一点点,fighting!!!

2021,加油,fighting,希望可以少些crud啦!

继续阅读