前言

常用链路追踪工具的有:Zipkin、Pinpoint、SkyWalking、CAT

  • Zipkin 是 Twitter 开源的调用链分析工具,目前基于 SpringCloud Sleuth 得到了广泛的使用,特点是轻量,使用部署简单。

  • Pinpoint 是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能强大,接入端无代码侵入。

  • SkyWalking 是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI 功能较强,接入端无代码侵入。目前已加入 Apache 孵化器。

  • CAT 是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

各大分布式链路追踪系统对比请看:监控系统比较 Skywalking Pinpoint Cat zipkin

SkyWalking 简介

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

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

SkyWalking 是一个开源的 APM (应用程序性能监控)工具,包括了分布式系统的监控、跟踪、诊断能力等。

我选择 SkyWalking 的原因是:代码无侵入,通信方式采用 gRPC ,性能较好,UI 功能强大。

部署 SkyWalking 服务端

1. 下载 SkyWalking

下载页面:Download the SkyWalking recommended releases

选择对应的版本,由于我使用 MySQL 作为存储仓库,所以选择 MySQL 版本。

2. 配置 SkyWalking

将下载好的压缩包解压,找到 config 目录下的 application.yml 并编辑:

默认使用 H2 内存数据库存储数据,重启 Skywalking 后数据会丢失。因此我选择使用 MySQL 作为存储仓库:

storage:
  # 指定存储仓库为 mysql
  selector: ${SW_STORAGE:mysql}
  # 配置 MySQL
  mysql:
    properties:
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?serverTimezone=Asia/Shanghai"}
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}
      dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
      dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
      dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
      dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}

注意:MySQL 8.0 版本的需要在连接 URL 上添加参数 serverTimezone=Asia/Shanghai,否则会连接数据库失败。

我使用 Nacos 作为注册和配置中心,需要修改 Nacos 连接参数:

cluster:
  selector: ${SW_CLUSTER:nacos}
  nacos:
    # 注册到 Nacos 的服务名,可修改
    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}
    # Nacos Configuration namespace
    namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}
    # Nacos auth username
    username: ${SW_CLUSTER_NACOS_USERNAME:"nacos"}
    password: ${SW_CLUSTER_NACOS_PASSWORD:"1"}
    # Nacos auth accessKey
    accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}
    secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}

3. 添加 MySQL 数据驱动包

由于 oap-libs 目录下没有 MySQL 的驱动包,修改配置后直接启动会报错,所以我们需要自己添加驱动包,选择对应版本的 MySQL 驱动包放进去就行,我的 MySQL 版本是 8.0,我直接从本地 Maven 仓库里拷贝一个过去 mysql-connector-java-8.0.22.jar

添加 MySQL 数据驱动包

4. 启动 Skywalking

进入 bin 目录,Linux 执行 ./startup.sh(Windows 直接双击 startup.bat)启动;

启动后会运行两个服务:

  • Skywalking-Webapp:管理平台页面 ,默认端口 8080。
  • Skywalking-Collector:追踪信息收集器,通过 gRPC/HTTP 收集客户端的采集信息 ,HTTP 默认端口 12800,gRPC默认端口 11800。

服务

5. 浏览器访问

使用浏览器访问 http://127.0.0.1:8080/ ,可看到 skywalking 的 UI 界面:

skywalking

查看数据库,可看到 skywalking 建了很多表:

skywalking 数据表

查看 Nacos 服务列表,可看到已注册了服务名为 SkyWalking_OAP_Cluster 的服务:

Nacos 服务

监控微服务

只需要在项目启动加上 javaagent 的启动参数,就可以实现对应用的监控。

-javaagent:D:\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=user-consumer
-Dskywalking.collector.backend_service=192.168.2.101:11800

参数说明:

  • javaagentskywalking-agent.jar 的路径
  • Dskywalking.agent.service_name:在 Skywalking 上显示的服务名
  • Dskywalking.collector.backend_service:Skywalking-Collector 服务的 IP 和端口

在 IDEA 中配置:

IDEA配置

然后启动一个 Provider 和 Consumer,使用 Consumer 的接口去请求 Provider 的请求,在 Skywalking UI 界面查看监控。单击我们测试的请求,可看到服务调用情况。

追踪:

追踪

拓扑图:

拓扑图

仪表盘:

仪表盘

总结

使用 Skywalking ,我们可以很方便的监控微服务的调用过程,可帮助我们更好的排查故障。

参考文档

  1. https://juejin.cn/post/6844903560732213261
  2. https://blog.csdn.net/yehongzhi1994/article/details/109300770
文章目录