随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络

对于一个由几十个、甚至几百个大型微服务构成的微服务架构系统,通常会遇到下面一些问题,如:

1、一个请求调用其中一个服务失败,如何定位问题?

2、:如何计算每个节点访问流量?

3、流量波动的时候,增加哪些节点集群服务?

 

一、Skywalking

Skywalking 是一个国产的开源框架,2015年由吴晟个人开源(国人开源的产品,主要开发人员来自于华为),2017年加入Apache孵化器,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃

Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪、服务网格遥测分析、性能指标分析、服务依赖分析、度量聚合和可视化一体化解决方案等

 

链路追踪

谷歌在 2010 年 4 月发表了一篇论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》介绍了分布式追踪的概念,之后很多互联网公司都开始根据这篇论文打造自己的分布式链路追踪系统。APM 系统的核心技术就是分布式链路追踪。

 

1、Skywalking主要功能特性

1、多种监控手段,可以通过语言探针和service mesh获得监控的数据;

2、支持多种语言自动探针,包括 Java,.NET Core 和 Node.JS;

3、轻量高效,无需大数据平台和大量的服务器资源;

4、模块化,UI、存储、集群管理都有多种机制可选;

5、支持告警;

6、优秀的可视化解决方案

2、分布式链路追踪技术成熟产品

分布式链路追踪技术已然成熟,产品也不少,国内外都有,如:

1、Spring Cloud Sleuth + Twitter Zipkin

Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。

2、阿里巴巴的“鹰眼”EagleEye

3、大众点评的“CAT”

CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。

4、美团的“Mtrace”

5、京东的“Hydra”

6、新浪的“Watchman”

7、SkyWalking

SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。

二、Skywalking 架构

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar

整个架构分成四部分:

1、上部分Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器

2、下部分 SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能

3、右部分Storage:Tracing数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用较多的是ES,主要考虑是SkyWalking开发团队自己的生产环境采用ES为主

4、左部分SkyWalking UI:负责提供控台,查看链路等等

三、Skywalking 下载安装部署

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar_02

注:

数据存储默认使用 H2 数据库存储

/xx/apache-skywalking-apm-bin/config/application.yml 文件

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_03

1、下载 SkyWalking 软件包 

 下载:Downloads | Apache SkyWalking 

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_SpringCloud_04

点击右侧的Distribution选择想要的版本进行下载,如果这里没有你想要的版本,可以将页面下拉 ,选择 Archive repository

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_Skywalking_05

 

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_apache_06

Skywalking 在 8.8.0版本以后将agent单独拆分了出来,所以若要使用8.8.0版本以后的,需要下载apm和agent两个压缩包

下载 Agent 压缩包

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar_07

解压缩

tar -zxvf apache-skywalking-java-agent-8.8.0.tgz -C /opt/software/

切换到 目录下查看

cd skywalking-agent/

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar_08

apm 和 agent 分别安装路径

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_09

2、搭建一个 SkyWalking OAP 和SkyWalking UI服务 

(1)将 apache-skywalking-apm-8.8.1.tar 上传到 Linux系统上的 /opt/software 目录下

(2)解压

tar -zxvf apache-skywalking-apm-8.8.1.tar.gz -C /opt/software/

(3) 切换:cd apache-skywalking-apm-bin ,目录如下

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_SpringCloud_10

目录说明:

agent                #SkyWalking Agent;Skywalking 在 8.8.0版本以后将agent单独拆分了出来

bin                    #执行脚本

config               #SkyWalking OAP Server 配置文件

LICENSE

licenses

NOTICE

oap-libs            #SkyWalking OAP Server

README.txt

tools

webapp            #SkyWalking UI

3、启动一个Spring Boot应用,并配置SkyWalking Agent

(1)切换到 bin 目录

(2) 启动 ./startup.sh 或 sh startup.sh

启动后会启动两个服务,一个是 skywalking-oap-server,一个是 skywalking-web-ui

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_SpringCloud_11

查看安装目录下的 ./logs/skywalking-oap-server.log 下的日志文件,检查两个服务的日志文件是否启动成功

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_apache_12

skywalking-oap-server服务启动后会占用:11800 和 12800 两个端口

tail -f logs/skywalking-oap-server.log

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_13

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_14

skywalking-web-ui服务会占用 8080 端口;

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_Skywalking_15

  

如果想要修改SkyWalking UI服务的参数,可以编辑webapp/webapp.yml 配置文件,如:

server.port:SkyWalking UI服务端口,默认是8080;

collector.ribbon.listOfServers:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_16

4、访问SkyWalking UI界面:http://192.168.133.128:8080/,默认端口为8080

页面的右下角可以中英文切换,可以切换选择要展示的时间区间的跟踪数据

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_SpringCloud_17

四、SkyWalking Agent跟踪微服务

1、jar包

1、编写一个springboot 项目,打成jar包

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_apache_18

2、上传到Linux服务器上

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_SpringCloud_19

3、编写启动脚本,命名 skywalking-agent.sh

注:

Skywalking 在 8.8.0版本以后将agent单独拆分了出来,所以若要使用8.8.0版本以后的,需要下载apm和agent两个压缩包

博主分别安装 apm 和 agent 路径

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_20

 启动脚本

在启动程序前加一个 -javaagent 参数即可完成对程序的跟踪

#!/bin/sh
# SkyWalking Agent配置;Skywalking 在 8.8.0版本以后将agent单独拆分了出来
export SW_AGENT_NAME=springboot-2-hello  #Agent名字,一般使用`spring.application.name` 
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800  #配置 Collector 地址
export SW_AGENT_SPAN_LIMIT=2000  #配置链路的最大Span数量,默认为 300
export JAVA_AGENT=-javaagent:/opt/software/skywalking-agent/skywalking-agent.jar  #/opt/software/apache-skywalking-apm-bin/agent/skywalking-agent.jar
java $JAVA_AGENT -jar springboot-2-hello.jar  #jar启动

 4、执行启动脚本

sh skywalking-agent.sh
[root@eureka8761 app]# sh skywalking-agent.sh 
DEBUG 2022-07-26 13:53:18:461 main AgentPackagePath : The beacon class location is jar:file:/opt/software/skywalking-agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class. 
INFO 2022-07-26 13:53:18:463 main SnifferConfigInitializer : Config file found in /opt/software/skywalking-agent/config/agent.config.

 启动成功

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_21

5、浏览器输入访问,http://192.168.133.129:8081/springboot-2-hello/index.jsp

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_22

查看SkyWalking-UI控制台

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_apache_23

2、war包

1、编写一个springboot 项目,打成war包

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar_24

2、上传到Linux服务器上

3、修改/xx/apache-tomcat-xx/bin/catalina.sh 文件,在顶部第一行加上:

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/software/skywalking-agent/skywalking-agent.jar";
export CATALINA_OPTS;

注:

(1)根据自身 安装 skywalking-agent.jar 路径配置 

(2)如果tomcat端口与skywalking ui端口冲突的话,修改一下tomcat端口

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_SpringCloud_25

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_SpringCloud_26

4、启动Tomcat

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar_27

5、 查看SkyWalking-UI控制台

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_Skywalking_28

设置的 Your_ApplicationName 可在 /xx/skywalking-agent/config/agent.config 文件中查看

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_UI_29

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar_30

点击就可查看日志,跟踪等

skywalking怎么显示springmvc详细耗时 spring cloud gateway skywalking_jar_31