前言
常用链路追踪工具的有: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
;
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 建了很多表:
查看 Nacos 服务列表,可看到已注册了服务名为 SkyWalking_OAP_Cluster
的服务:
监控微服务
只需要在项目启动加上 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
参数说明:
javaagent
:skywalking-agent.jar
的路径Dskywalking.agent.service_name
:在 Skywalking 上显示的服务名Dskywalking.collector.backend_service
:Skywalking-Collector 服务的 IP 和端口
在 IDEA 中配置:
然后启动一个 Provider 和 Consumer,使用 Consumer 的接口去请求 Provider 的请求,在 Skywalking UI 界面查看监控。单击我们测试的请求,可看到服务调用情况。
追踪:
拓扑图:
仪表盘:
总结
使用 Skywalking ,我们可以很方便的监控微服务的调用过程,可帮助我们更好的排查故障。