SpringBoot集成Skywalking分布式服务调用链路追踪

一、Skywalking概述

1、Skywalking介绍

官网:博客 | Apache SkyWalking

Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。

2、Skywalking架构图

å¨è¿éæå¥å¾çæè¿°

整个架构,分成上、下、左、右四部分

①、上部分 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 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
④、左部分 SkyWalking UI :负责提供控台,查看链路等等。

基于各种语言的Agent探针来收集服务数据,然后展示采集的数据;

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

3、下载,各种语言的Agent都有

下载Skywalking服务

SpringBoot集成Skywalking分布式服务调用链路追踪_第1张图片

 下载监控JavaAgent.

SpringBoot集成Skywalking分布式服务调用链路追踪_第2张图片

这里下载Java语言的最新版本的.

①、源码下载阅读

 Github地址

SpringBoot集成Skywalking分布式服务调用链路追踪_第3张图片

 4、微服务开发中解决一下问题

①、如何串联整个调用链路,快速定位问题?单纯看日志?
②、如何澄清各个微服务之间的依赖关系?
③、如何进行各个微服务接口的性能分析?
④、如何追踪各个业务流程的调用处理顺序?

二、Skywalking启动

1、启动脚本 

SpringBoot集成Skywalking分布式服务调用链路追踪_第4张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第5张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第6张图片

如果出现启动问题,看日志具体解决.

SpringBoot集成Skywalking分布式服务调用链路追踪_第7张图片

2、配置文件

Skywalking基于JAVA SpringBoot框架开发,默认端口是8080,可以在启动时候自己指定修改.

SpringBoot集成Skywalking分布式服务调用链路追踪_第8张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第9张图片

默认使用的存储数据库是H2,可以修改为MySQL和ES,在配置文件中灵活配置.

SpringBoot集成Skywalking分布式服务调用链路追踪_第10张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第11张图片SpringBoot集成Skywalking分布式服务调用链路追踪_第12张图片

3、启动skywalking

在IDEA中添加一下地址信息

-javaagent:D:\skywalking\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-service -Dskywalking.collector.backend_service=127.0.0.1:11800

 配置项说明:

-javaagent:用于指定探针路径(就是agent下skywalking-agent.jar包存放的绝对路径)

-Dskywalking.agent.service_name:用于重写agent/config/agent.config 配置文件中的服务名

-Dskywalking.collector.backend_service:用于重写agent/config/agent.config配置文件中的服务地址

SpringBoot集成Skywalking分布式服务调用链路追踪_第13张图片

对于Tomcat的部署项目在catalina.sh中添加即可,spring boot项目中在nohub启动脚本中添加。

 agent位置.

agent不要单独copy到一个目录,否则加载不到config配置类就包如下错了

Failed to read the config file, skywalking is going to run in default config.

SpringBoot集成Skywalking分布式服务调用链路追踪_第14张图片

 正确加载应该是这样.

SpringBoot集成Skywalking分布式服务调用链路追踪_第15张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第16张图片

三、监控指标查看

 1、查看拓扑图

SpringBoot集成Skywalking分布式服务调用链路追踪_第17张图片

2、监控项

SpringBoot集成Skywalking分布式服务调用链路追踪_第18张图片

 SpringBoot集成Skywalking分布式服务调用链路追踪_第19张图片

 3、事件ID

SpringBoot集成Skywalking分布式服务调用链路追踪_第20张图片

 4、追踪

SpringBoot集成Skywalking分布式服务调用链路追踪_第21张图片

5、性能剖析 

SpringBoot集成Skywalking分布式服务调用链路追踪_第22张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第23张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第24张图片

 6、告警

SpringBoot集成Skywalking分布式服务调用链路追踪_第25张图片

使用经验:一般搭建集群使用域名单独部署、agent脚本等代码统一管理、使用ES集群存储数据,也有包装了业界的给一个appid,统一管理链路追踪,对业务的侵入性较低,可以配置一些告警,辅助业务定位疑难问题使用,对于多环境比如sit\alpha\prod等注意区分即可,还有使用公有云的自研包装的APM探针工具采集信息的,基本都是一样的原理,熟悉skywalking后看一下文档就立马上手了,也有一些监控组件有功能重合,skywalking更擅长链路追踪,便于定位问题。

四、Skywalking的探针原理

1、Java探针技术类型
        (1)在主程序之前运行的Agent.

        (2)在主程序之后运行的Agent.

      在实际使用过程中,javaagent是java命令的一个参数。通过java 命令启动我们的应用程序的时候,可通过参数 -javaagent 指定一个 jar 包(也就是我们的代理agent),能够实现在我们应用程序的主程序运行之前来执行我们指定jar 包中的特定方法,在该方法中我们能够实现动态增强Class等相关功能,并且该 jar包有2个要求:
<1> 这个 jar 包的 META-INF/MANIFEST.MF 文件必须指定 Premain-Class 项,该选项指定的是一个类的全路径.
<2> Premain-Class 指定的那个类必须实现 premain() 方法。META-INF/MANIFEST.MF文件内容如下

2、Skywalking的探针文件如下

Manifest-Version: 1.0
Created-By: Apache Maven 3.6.1
Built-By: wusheng
Build-Jdk: 11.0.13
Specification-Title: apm-agent
Specification-Version: 8.10
Specification-Vendor: The Apache Software Foundation
Implementation-Title: apm-agent
Implementation-Version: 8.10.0
Implementation-Vendor-Id: org.apache.skywalking
Implementation-Vendor: The Apache Software Foundation
Implementation-URL: http://maven.apache.org
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Premain-Class: org.apache.skywalking.apm.agent.SkyWalkingAgent

拉下来源码看一下,IDEA导入一下即可.

SpringBoot集成Skywalking分布式服务调用链路追踪_第26张图片

SpringBoot集成Skywalking分布式服务调用链路追踪_第27张图片

 SpringBoot集成Skywalking分布式服务调用链路追踪_第28张图片

入口类:执行premain方法

SpringBoot集成Skywalking分布式服务调用链路追踪_第29张图片

加载配置文件读取启动类的-javaagent参数. 

SpringBoot集成Skywalking分布式服务调用链路追踪_第30张图片

你可能感兴趣的:(SpringBoot框架,Java开发进阶学习指南,spring,boot,skywalking,java)