随着微服务分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如分布式服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。在服务能力提升的同时,复杂的网络结构也使问题定位更加困难。在一个请求在经过诸多服务过程中,出现了某一个调用失败的情况,查询具体的异常由哪一个服务引起的就变得十分抓狂,问题定位和处理效率是也会非常低。
分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
链路追踪为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。
Skywalking
是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。
SkyWalking
是一个可观测性分析平台(Observability Analysis Platform 简称OAP)和应用性能管理系统(Application Performance Management 简称 APM)。
提供分布式链路追踪,服务网格(Service Mesh)遥测分析,度量(Metric)聚合和可视化一体化解决方案。
SkyWalking 特点
SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。
java -javaagent:/path/skywalking-agent.jar -jar youApp.jar
Skywalking相比于zipkin还是有很大的优势的,如下:
正常情况下,我们的微服务项目都是跑在 linux 系统中的,本次只是为了测试学习,所以本文在 windows 系统下安装使用。linux 系统下的安装配置也贴了一下,如果在学习阶段可以只看 windows 平台相关的安装配置。
1.1、windows 平台
下载地址:Downloads | Apache SkyWalking
将下载下来的 apache-skywalking-apm-es7-8.7.0.tar.gz
解压缩,解压之后的目录如下:
1.2、linux 平台
linux平台(CentOS 7) 安装包下载
wget https://archive.apache.org/dist/skywalking/8.2.0/apache-skywalking-apm-es7-8.2.0.tar.gz
解压
tar -zxvf apache-skywalking-apm-es7-8.2.0.tar.gz
解压之后的文件内容如下:
注意: 需要提前准备好 JAVA(1.8) 和 ES(6.x) 的环境
这里就 elasticsearch
的安装就不写了,关于 elasticsearch
准备后面单独写几篇文章去研究。
接下来我们对配置文件做一些修改
2.1、windows 平台
①、 /config/application.yml
本次我们使用 Nacos
注册中心,所以要修改 oap 服务的配置文件
因为 Nacos
也安装在我本地,所以下面的 Nacos
配置我没什么要改动的。
②、webapp/webapp.yml
这个里面可以修改 UI 服务启动的端口号,默认是 8080 ,小伙伴们可以酌情修改,避免端口冲突
2.2、linux 平台
不使用 Elasticsearch
也可以, SkyWalking
默认使用 H2
如果使用 Elasticsearch
就要做一些配置 修改 config/application.yml
vim config/application.yml
storage:
selector: elasticsearch
elasticsearch:
nameSpace: ${SW_NAMESPACE:"与elasticsearch的配置名字一致"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
修改端口号,当然如果没有端口号冲突的话不改也行
vim webapp/webapp.yml
server:
port: 8080
修改 agent
配置
vim agent\config\agent.config
agent.service_name=${SW_AGENT_NAME:cloud-ytb}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
agent.service_name
修改成你应用名称:cloud-ytbcollector.backend_service
修改成 OAP Server 地址:192.168.136.129:11800
3.1、windows 平台
配置完成之后,先启动我们本地的 Nacos
,然后双击 bin 目录下的 startup.bat 文件
会出现两个 cmd 窗口,没有日志应该是少了 log4j-web 的 jar ,我们先不去管他
访问地址:http://localhost:8080/ (端口号和 webapp.yml 中修改的一致)
此时我们再访问 localhost:8848/nacos
Nacos 控制台,在服务列表里我们会发现注册进去了一个 SkyWalking
服务
启动成功,接下来我们看看如何让 SkyWalking
去监控我们的项目。
3.2、linux 平台
./bin/startup.sh
如果配置了 Elasticsearch
,请保证已成功启动 Elasticsearch
出现以下日志表示启动成功。
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!
然后,我们访问地址 localhost:8080
(注意 ip 和端口号改为你自己的)
这里我们直接在 windows
系统的 idea 中演示,这次我们依旧使用之前 微服务系列:服务调用 Spring Cloud 之 OpenFeign 详细入门 中的测试项目,相关源码地址也在 OpenFeign 这篇文章中。
其中,cloud-system
服务提供者,提供了一个远程调用接口,cloud-auth
是服务消费者。
idea 中配置两个服务的启动参数,两个服务只有 -Dskywalking.agent.service_name
不同
-javaagent:D:\Software\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=cloud-system
-Dskywalking.collector.backend_service=127.0.0.1:11800
我们只需要修改 D:\Software\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
和 cloud-system
,当然都改成你自己的。
参数说明:
指定 agent 包路径时,只需要 agent 包内文件即可,skywalking 其它包文件不需要
-javaagent:D:\Software\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
spring.application.name
-Dskywalking.agent.service_name=cloud-system
-Dskywalking.collector.backend_service=127.0.0.1:11800
启动成功后,浏览器访问:
刷新我们的 skywalking
控制台地址:
可以看到两个个服务已经监控成功了。
看一下拓扑图,服务之间的依赖关系也很清楚了。
包括请求链路详情
至此,本文结束!
PS:都看到这里了,点个赞吧,彦祖!