简介

接下来对分布式项目实现链路追踪,本操作要先完成前置步骤,详情请参照【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程

在分布式系统,尤其是微服务系统中,一次外部请求往往需要内部多个模块,多个中间件,多台机器的相互调用才能完成。在这一系列的调用中,可能有些是串行的,而有些是并行的。在这种情况下,我们如何才能确定这整个请求调用了哪些应用?哪些模块?哪些节点?以及它们的先后顺序和各部分的性能如何呢?

这就是涉及到链路追踪。

什么是链路追踪

链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

目前主要的一些 APM 工具有: CatZipkinPinpointSkyWalking等;

什么是SkyWalking

Apache SkyWalking 是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

功能列表

  • 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
  • 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
  • 轻量高效。无需大数据平台,和大量的服务器资源。
  • 模块化。UI、存储、集群管理都有多种机制可选。
  • 支持告警。
  • 优秀的可视化解决方案。

整体架构

在这里插入图片描述

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalkingZikpinJaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 StorageTracing 数据存储。目前支持 ESMySQLSharding SphereTiDBH2 多种存储器。 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控台,查看链路等等。

单机搭建步骤

在这里插入图片描述

  1. 搭建一个 Elasticsearch 服务。
  2. 下载 SkyWalking 软件包。
  3. 搭建一个 SkyWalking OAP 服务。
  4. 启动一个 Spring Boot 应用,并配置 SkyWalking Agent
  5. 搭建一个 SkyWalking UI 服务。

官网文档

安装数据存储源

目前支持 ESMySQLSharding SphereTiDBH2 多种存储器,这里主要介绍下ElasticsearchMysql方式。

注意: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

新版(v8.6.2)Elasticsearch详细安装教程

基于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_STORAGEh2存储源:h2、 elasticsearch、 mysql、 postgresql等
SW_STORAGE_ES_CLUSTER_NODESlocalhost:9200elasticsearch地址
SW_JDBC_URL“jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true”jdbc地址
SW_DATA_SOURCE_USERrootmysql数据库用户名
SW_DATA_SOURCE_PASSWORDroot@1234mysql数据库密码

配置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
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐