【Spring Cloud Alibaba】11.链路追踪(SkyWalking)
接下来对分布式项目实现链路追踪,本操作要先完成前置步骤,详情请参照【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程在分布式系统,尤其是微服务系统中,一次外部请求往往需要内部多个模块,多个中间件,多台机器的相互调用才能完成。在这一系列的调用中,可能有些是串行的,而有些是并行的。在这种情况下,我们如何才能确定这整个请求调用了哪些应用?哪些模块?哪些节点?以
文章目录
简介
接下来对分布式项目实现链路追踪,本操作要先完成前置步骤,详情请参照【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程
在分布式系统,尤其是微服务系统中,一次外部请求往往需要内部多个模块,多个中间件,多台机器的相互调用才能完成。在这一系列的调用中,可能有些是串行的,而有些是并行的。在这种情况下,我们如何才能确定这整个请求调用了哪些应用?哪些模块?哪些节点?以及它们的先后顺序和各部分的性能如何呢?
这就是涉及到链路追踪。
什么是链路追踪
链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
目前主要的一些 APM
工具有: Cat
、Zipkin
、Pinpoint
、SkyWalking
等;
什么是SkyWalking
Apache SkyWalking
是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker
、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
功能列表
- 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
- 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
- 轻量高效。无需大数据平台,和大量的服务器资源。
- 模块化。UI、存储、集群管理都有多种机制可选。
- 支持告警。
- 优秀的可视化解决方案。
整体架构
- 上部分
Agent
:负责从应用中,收集链路信息,发送给SkyWalking OAP
服务器。目前支持SkyWalking
、Zikpin
、Jaeger
等提供的Tracing
数据信息。而我们目前采用的是,SkyWalking Agent
收集SkyWalking Tracing
数据,传递给服务器。 - 下部分
SkyWalking OAP
:负责接收Agent
发送的Tracing
数据信息,然后进行分析(Analysis Core
) ,存储到外部存储器(Storage
),最终提供查询(Query
)功能。 - 右部分
Storage
:Tracing
数据存储。目前支持ES
、MySQL
、Sharding Sphere
、TiDB
、H2
多种存储器。SkyWalking
开发团队自己的生产环境采用ES
为主。 - 左部分
SkyWalking UI
:负责提供控台,查看链路等等。
单机搭建步骤
- 搭建一个
Elasticsearch
服务。 - 下载
SkyWalking
软件包。 - 搭建一个
SkyWalking OAP
服务。 - 启动一个
Spring Boot
应用,并配置SkyWalking Agent
。 - 搭建一个
SkyWalking UI
服务。
安装数据存储源
目前支持 ES
、MySQL
、Sharding Sphere
、TiDB
、H2
多种存储器,这里主要介绍下Elasticsearch
和Mysql
方式。
注意:Elasticsearch 和 MySQL的安装这里只做最简单使用,具体请自行搜索,如果你已有部署,可以跳过这部!
基于Docker安装Elasticsearch
新建docker-compose.yml
文件,内容如下:
docker-compose.yml
version: '3.3'
services:
elasticsearch:
image: docker.io/elasticsearch:7.7.0
container_name: elasticsearch
restart: always
ports:
- 9200:9200
- 9300:9300
environment:
discovery.type: single-node
TZ: Asia/Shanghai
cluster.name: elasticsearch
运行命令
docker-compose up
或者
#拉取镜像
docker pull elasticsearch:7.7.0
#启动镜像
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.7.0
基于Docker安装MySQL
拉取镜像
#拉取镜像
docker pull mysql:5.7
#启动镜像
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
基于Docker配置SkyWalking OAP
Elasticsearch
方式比较简单,推荐使用
Elasticsearch 方式
docker run --name oap --restart always -d -p 12800:12800 -p 11800:11800 -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=172.16.92.230:9200 apache/skywalking-oap-server:9.4.0
MySQL方式
创建数据库
首先在我们的mysql数据库中新建数据库实例swtest
运行命令
docker exec -it mysql mysql -uroot -p
输入刚刚设置的密码123456
创建数据库swtest
create DATABASE swtest;
下载mysql-connector-java
MySQL
驱动程序在Apache
官方发行版和源代码中是不允许的。 所以需要我们自己去下载。
mysql-connector-java。jar
包下载地址:https://downloads.mysql.com/archives/c-j/
解压
创建
运行命令创建SkyWalking OAP
docker run --name oap --restart always -d -p 12800:12800 -p 11800:11800 -e SW_STORAGE=mysql -e SW_JDBC_URL=jdbc:mysql://172.16.92.230:3306/swtest?allowMultiQueries=true -e SW_DATA_SOURCE_USER=root -e SW_DATA_SOURCE_PASSWORD=123456 apache/skywalking-oap-server:9.4.0
这里我们创建完成查看日志docker logs -f --tail=200 oap
,报错如下,这是因为没有引入mysql-connector-java
包
我们将下载好的mysql-connector-j-8.0.31.jar
包复制到oap
容器中
docker cp E:\soft\oap\mysql-connector-j-8.0.31.jar oap:/skywalking/oap-libs/
E:\soft\oap\mysql-connector-j-8.0.31.jar
是我这边放的路径,具体看你下载的包放在那里
重新启动
docker restart oap
这时,我们看日志,发现oap
已成功连接mysql
,正在创建表
耐心等待,创建完成即可!
参数说明
参数 | 默认值 | 说明 |
---|---|---|
SW_STORAGE | h2 | 存储源:h2、 elasticsearch、 mysql、 postgresql等 |
SW_STORAGE_ES_CLUSTER_NODES | localhost:9200 | elasticsearch地址 |
SW_JDBC_URL | “jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true” | jdbc地址 |
SW_DATA_SOURCE_USER | root | mysql数据库用户名 |
SW_DATA_SOURCE_PASSWORD | root@1234 | mysql数据库密码 |
配置SkyWalking Agent
下载
打开官网下载地址:https://skywalking.apache.org/downloads/
点击想要下载的SkyWalking Agent
版本
如果下载的比较慢,可以试试国内的镜像地址
阿里云:https://mirrors.aliyun.com/apache/skywalking
清华大学:https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking
北京理工大学:http://mirror.bit.edu.cn/apache/skywalking
解压
tar -zxvf apache-skywalking-java-agent-8.14.0.tgz
windows上我用的7z解压两次,没啥损坏,正常使用~~~
目录如下
activations
bootstrap-plugins
config # SkyWalking Agent 配置
licenses
logs # SkyWalking Agent 日志
optional-plugins # 可选插件
optional-reporter-plugins
plugins # 插件
LICENSE
NOTICE
skywalking-agent.jar # SkyWalking Agent
集成
在我们的项目中新建目录moonce-skywalking-agent
将我们下载的skywalking-agent
目录下内容拷贝到该路径下(其实现在放在哪里都无所谓的,只要在项目VM指定就行了)
配置
修改项目的 VM
运行参数,点击菜单栏中的 Run
-> EditConfigurations...
,此处我们以 moonce-provider
项目为例,修改参数如下
-javaagent:E:\code\spring-cloud-alibaba\moonce-skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=moonce-provider
-Dskywalking.collector.backend_service=172.16.92.230:11800
基于Docker配置SkyWalking UI
docker run --name oap-ui --restart always -d -e SW_OAP_ADDRESS=http://172.16.92.230:12800 -p 18080:8080 apache/skywalking-ui:9.4.0
测试
启动Nacos
服务,运行ProviderApplication
,访问地址http://172.16.92.230:18080/
(默认是空的,我这边访问过)
然后我们来访问地址http://localhost:8081/test/hi
(可以多点几次)
可以看到我们的访问信息
点击servce names
可以查看详情
点击Topology
,查看请求链路情况,这里只是简单的一个
我们把ConsumerApplication
也进行添加探针
启动这项目,访问地址:http://localhost:9091/test/app/name
(多访问几次)
查看SkyWalking UI
更多推荐
所有评论(0)