这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战
一、基本介绍
- 什么是链路追踪
随着微服务分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如分布式服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。在服务能力提升的同时,复杂的网络结构也使问题定位更加困难。在一个请求在经过诸多服务过程中,出现了某一个调用失败的情况,查询具体的异常由哪一个服务引起的就变得十分抓狂,问题定位和处理效率是也会非常低。
分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
- 为什么要使用链路追踪
链路追踪为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。
- skywalking 链路追踪
Skywalking
是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。
SkyWalking
是一个可观测性分析平台(Observability Analysis Platform 简称OAP)和应用性能管理系统(Application Performance Management 简称 APM)。
提供分布式链路追踪,服务网格(Service Mesh)遥测分析,度量(Metric)聚合和可视化一体化解决方案。
SkyWalking 特点
- 多语言自动探针,java,.Net Code ,Node.Js
- 多监控手段,语言探针和Service Mesh
- 轻量高效,不需要额外搭建大数据平台
- 模块化架构,UI ,存储《集群管理多种机制可选
- 支持警告
- 优秀的可视化效果。
下面是SkyWalking
的架构图:
SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。
- 探针 主要负责从客户端收集数据,将数据转换成SkyWalking适用的格式,探针对客户端程序没有任何代码侵入,使用起来简单方便,使用如下命令即可完成对应用的监控
java -javaagent:/path/skywalking-agent.jar -jar youApp.jar
- 平台后端(OAP Server) 主要用于数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。通过 gRPC/Http 收集客户端Agent的采集信息 ,Http默认端口 12800,gRPC默认端口 11800。
- 存储 SkyWalking支持很多存储:H2(用作演示环境)、MySQL(当数据量大时检索性能下降很厉害)、ES(主流生产级别的存储)
- 用户界面 炫酷的界面,调用请求监控一目了然。
Skywalking相比于zipkin还是有很大的优势的,如下:
- skywalking采用字节码增强的技术实现代码无侵入,zipKin代码侵入性比较高
- skywalking功能比较丰富,报表统计,UI界面更加人性化
二、安装配置
1. 安装
正常情况下,我们的微服务项目都是跑在 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
复制代码
解压之后的文件内容如下:
- agent:代理模块(探针)
- bin:启动脚本(包括 UI 和 OAP SERVER)
- config:后端相关配置
- webapp:UI界面
注意: 需要提前准备好 JAVA(1.8) 和 ES(6.x) 的环境
这里就 elasticsearch
的安装就不写了,关于 elasticsearch
准备后面单独写几篇文章去研究。
2. 配置
接下来我们对配置文件做一些修改
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
,当然都改成你自己的。
参数说明:
- javaagent agent 包路径
指定 agent 包路径时,只需要 agent 包内文件即可,skywalking 其它包文件不需要
-javaagent:D:\Software\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
复制代码
- skywalking 注册服务名称,一般是微服务的
spring.application.name
-Dskywalking.agent.service_name=cloud-system
复制代码
- 采集信息的服务地址,即 skywalking 服务连接信息
-Dskywalking.collector.backend_service=127.0.0.1:11800
复制代码
启动成功后,浏览器访问:
刷新我们的 skywalking
控制台地址:
可以看到两个个服务已经监控成功了。
看一下拓扑图,服务之间的依赖关系也很清楚了。
包括请求链路详情
至此,本文结束!
PS:都看到这里了,点个赞吧,彦祖!