【视频】Spring Cloud Alibaba-SkyWalking-分布式链路追踪
微服务架构是通过业务来划分服务的,使用 REST 调用。对外暴露的一个接口,可能需要很多个服务协同才能完成这个接口功能,如果链路上任何一个服务出现问题或者网络超时,都会形成导致接口调用失败。随着业务的不断扩张,服务之间互相调用会越来越复杂。
随着服务的越来越多,对调用链的分析会越来越复杂。它们之间的调用关系也许如下:
面对以上情况,我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是所谓的 APM(应用性能管理)。
目前主要的一些 APM 工具有: Cat、Zipkin、Pinpoint、SkyWalking;Apache SkyWalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeaJFapk-1591671077133)(https://www.funtl.com/assets1/Lusifer_2019011401370001.jpeg)]
在 为什么需要链路追踪 章节中介绍过 SkyWalking 存储方案有多种,官方推荐的方案是 ElasticSearch ,所以我们需要先安装 ElasticSearch。
version: '3.3'
services:
elasticsearch:
image: wutang/elasticsearch-shanghai-zone:6.3.2
container_name: elasticsearch
restart: always
ports:
- 9200:9200
- 9300:9300
environment:
cluster.name: elasticsearch
其中,9200
端口号为 SkyWalking 配置 ElasticSearch 所需端口号,cluster.name
为 SkyWalking 配置 ElasticSearch 集群的名称
浏览器访问 http://elasticsearchIP:9200/ ,浏览器返回如下信息即表示成功启动
官方已经为我们准备好了编译过的服务端版本,下载地址为 http://skywalking.apache.org/downloads/,这里我们需要下载 6.x releases 版本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CeyJTOHy-1591671077136)(https://www.funtl.com/assets1/Lusifer_20190114025523.png)]
下载完成后解压缩,进入 apache-skywalking-apm-incubating/config
目录并修改 application.yml
配置文件
这里需要做三件事:
修改完配置后,进入 apache-skywalking-apm-incubating\bin
目录,运行 startup.bat
启动服务端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZT5Smpz5-1591671077138)(https://www.funtl.com/assets1/Lusifer_20190114030813.png)]
通过浏览器访问 http://localhost:8080 出现如下界面即表示启动成功
默认的用户名密码为:admin/admin,登录成功后,效果如下图
参考官网给出的帮助 Setup java agent,我们需要使用官方提供的探针为我们达到监控的目的,按照实际情况我们需要实现三种部署方式
java -jar
的方式启动应用)探针文件在 apache-skywalking-apm-incubating/agent
目录下
继续之前的案例项目,创建一个名为 hello-spring-cloud-external-skywalking
的目录,并将 agent
整个目录拷贝进来
修改项目的 VM 运行参数,点击菜单栏中的 Run
-> EditConfigurations...
,此处我们以 nacos-provider
项目为例,修改参数如下
-javaagent:D:\Workspace\Others\hello-spring-cloud-alibaba\hello-spring-cloud-external-skywalking\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=nacos-provider
-Dskywalking.collector.backend_service=localhost:11800
-javaagent
:用于指定探针路径-Dskywalking.agent.service_name
:用于重写 agent/config/agent.config
配置文件中的服务名-Dskywalking.collector.backend_service
:用于重写 agent/config/agent.config
配置文件中的服务地址java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=nacos-provider -Dskywalking.collector.backend_service=localhost:11800 -jar yourApp.jar
启动 nacos-provider
项目,通过观察日志可以发现,已经成功加载探针
访问之前写好的接口 http://localhost:8081/echo/hi 之后再刷新 SkyWalking Web UI,你会发现 Service 与 Endpoint 已经成功检测到了
至此,表示 SkyWalking 链路追踪配置成功
SkyWalking 通过业务调用监控进行依赖分析,提供给我们了服务之间的服务调用拓扑关系、以及针对每个 Endpoint 的 Trace 记录。
点击 Trace
菜单,进入追踪页
点击 Trace ID
展开详细信息
上图展示了一次正常的响应,总响应时间为 185ms
共有一个 Span(基本工作单元,表示一次完整的请求,包含响应,即请求并响应)
Span /echo/{message}
说明如下:
点击 Service
菜单,进入服务性能指标监控页
选择希望监控的服务
点击 More Server Details...
还可以查看详细信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8qe4ESt-1591671077150)(https://www.funtl.com/assets1/Lusifer_20190114043403.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WBZTWz0Z-1591671077151)(https://www.funtl.com/assets1/Lusifer_2019011404350001.png)]
上图中展示了服务在一定时间范围内的相关数据,包括:
Assembly 插件目的是提供一个把工程依赖元素、模块、网站文档等其他文件存放到单个归档文件里。
此处以将 SkyWalking 探针打包为 tar.gz
为例,为后期持续集成时构建 Docker 镜像做好准备
在 pom.xml
中增加插件配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<executions>
<execution>
<id>make-assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
<configuration>
<finalName>skywalkingfinalName>
<descriptors>
<descriptor>src/main/resources/assembly.xmldescriptor>
descriptors>
configuration>
execution>
executions>
plugin>
plugins>
build>
创建 src/main/resources/assembly.xml
配置文件
<assembly>
<id>6.0.0-Betaid>
<formats>
<format>tar.gzformat>
formats>
<includeBaseDirectory>falseincludeBaseDirectory>
<dependencySets>
<dependencySet>
<useProjectArtifact>falseuseProjectArtifact>
<outputDirectory>liboutputDirectory>
<scope>runtimescope>
dependencySet>
dependencySets>
<fileSets>
<fileSet>
<directory>agentdirectory>
<outputDirectory>outputDirectory>
fileSet>
fileSets>
assembly>
mvn clean package
mvn clean install
skywalking-6.0.0-Beta.tar.gz
的压缩包hello-spring-cloud-external-skywalking-1.0.0-SNAPSHOT-6.0.0-Beta.tar.gz
的压缩包原文链接:李卫民-Spring Cloud Alibaba 链路追踪