Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案(官网介绍)。

Zipkin:SpringCloud官方推荐,可以与SpringCloud有良好集成,实现方式是拦截请求,发送(http)数据到zipkin服务。缺点在于不支持告警,不支持JVM监控,通信方式使用Http请求向Zipkin上报信息,比较耗性能
SkyWalking:国人(吴晟)开发,支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功能较完善。缺点是依赖较多,需要ElasticSearch,JDK环境,Nacos注册中心等。

安装步骤:

环境:CentOS 7.5,MySQL 5.7.26,Nacos 1.3.1(注册中心),JDK 1.8,skywalking 8.1.0
第一步,下载。在官网下载即可,选择8.1.0版本,如果要使用ES作为存储仓库,那就要选择es7的版本。
image.png
第二步,解压。找到config目录下的application.yml文件,然后修改配置。
image.png
需要修改的配置内容如下:

  1. cluster:
  2. selector: ${SW_CLUSTER:nacos}
  3. #单机模式
  4. standalone:
  5. #使用nacos作为注册中心
  6. nacos:
  7. # 注册到nacos的服务名
  8. serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
  9. #nacos服务端的地址
  10. hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:192.168.0.105:8848}
  11. # Nacos Configuration namespace命名空间
  12. namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}
  13. core:
  14. selector: ${SW_CORE:default}
  15. default:
  16. #skywalking服务端的REST绑定的IP
  17. restHost: ${SW_CORE_REST_HOST:192.168.0.107}
  18. #skywalking服务端的REST调用的端口
  19. restPort: ${SW_CORE_REST_PORT:12800}
  20. #skywalking服务端GRPC通信绑定的IP
  21. gRPCHost: ${SW_CORE_GRPC_HOST:192.168.0.107}
  22. #skywalking服务端GRPC通信绑定的端口
  23. gRPCPort: ${SW_CORE_GRPC_PORT:11800}
  24. storage:
  25. #选择使用mysql
  26. selector: ${SW_STORAGE:mysql}
  27. #默认使用h2,不会持久化,重启skyWalking之前的数据会丢失
  28. h2:
  29. driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
  30. url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
  31. user: ${SW_STORAGE_H2_USER:sa}
  32. metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
  33. #使用mysql作为持久化存储的仓库
  34. mysql:
  35. properties:
  36. #数据库连接地址
  37. jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://192.168.0.107:3306/swtest"}
  38. #用户名
  39. dataSource.user: ${SW_DATA_SOURCE_USER:yehongzhi}
  40. #密码
  41. dataSource.password: ${SW_DATA_SOURCE_PASSWORD:Yehongzhi520.}

默认是web管理界面是8080端口,如果要修改端口号,可以修改webapp目录下的webapp.yml。

#web管理界面的端口
server:
  port: 8080

第三步,添加mysql数据驱动包。因为在lib目录下是没有mysql数据驱动包的,所以修改完配置启动是会报错,启动失败的。为什么作者不提前在lib目录下放一个数据驱动包呢,还要我们手动去添加。网上貌似没有这个问题的讨论,我的理解是因为框架不知道你用的是什么版本的mysql数据库,所以不知道放什么版本的数据库驱动包,使用者用的是什么版本的mysql,就自己放对应的数据库驱动包

我这里用的是5.7.26版本的mysql,所以我下载了一个8.0.17的驱动包,添加到/oap-libs目录下。
image.png
第三步,启动。在/bin目录上一级,直接使用./bin/startup.sh启动即可。启动之后,可以使用jps命令查看进程,可以看到这两个java程序在运行状态。
image.png
打开配置的Nacos控制台,可以看到服务列表注册了名为“SkyWalking_OAP_Cluster”的服务。
image.png
可以看到mysql建了很多表。
image.png
说明启动成功了,打开配置对应的地址http://192.168.0.109:8080/,可以看到skywalking的web界面。
image.png

三、整合SpringCloud工程

整合其实很简单,不需要引入依赖,也不需要添加任何代码,我们只需要在启动jar包时配置参数即可。

-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=consumer
-Dskywalking.collector.backend_service=192.168.0.109:11800
#解释一下上面这三个参数的意思
#-javaagent:填的是skywalking-agent.jar的本地磁盘的路径
#-Dskywalking.agent.service_name:在skywalking上显示的服务名
#-Dskywalking.collector.backend_service:skywalking的collector服务的IP及端口

我们一般用IDEA开发就这样设置即可。
image.png
接下来我按照这个配置,启动一个Consumer工程和Provider工程,并且注册到Nacos注册中心。
image.png
然后使用Consumer工程的接口调用Provider工程的接口,可以看到调用链的效果。
image.png
非常清晰地看到服务之间调用的情况,耗时等等。

架构设计原理:
image.png

  1. 上面的Agent :负责从应用中,收集tracing(调用链数据)和metric(指标),发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给SkyWalking OAP 服务器。
  2. 中间的SkyWalking OAP:负责接收 Agent 发送的 Tracing 和Metric的数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  3. 左边的SkyWalking UI:负责提供web控制台,查看链路,查看各种指标,性能等等。
  4. 右边的Storage:数据存储。目前支持ES、MySQL、H2等多种存储器。