【微服务】springboot整合skywalking使用详解

目录

一、前言

二、SkyWalking介绍

2.1 SkyWalking是什么

2.2 SkyWalking核心功能

2.3 SkyWalking整体架构

2.4 SkyWalking主要工作流程

三、为什么选择SkyWalking

3.1 业务背景

3.2 常见监控工具对比

3.3 为什么选择SkyWalking

3.3.1 代码侵入性极低

3.3.2 功能丰富

3.3.3 产品完善度高

四、SkyWalking环境搭建

4.1 下载安装包

4.2 部署服务

4.2.1 部署oap(apm)服务

4.2.2 web-ui界面访问

4.3 数据持久化配置

4.3.1 修改配置文件

4.3.2 上传mysql驱动包

4.3.3 重启服务

五、springboot接入Skywalking

5.1 准备一个测试使用的接口

5.2 获得Java Agent包

5.3 参数化启动项目

5.4 接口访问测试

六、dubbo接入Skywalking

6.1 搭建三个微服务模块

6.2 api模块

6.3 dubbo-provider模块

6.3.1 添加核心依赖

6.3.2 添加核心配置文件

6.3.3 添加dubbo接口实现类

6.3.4 服务启动类

6.4 dubbo-consumer模块

6.4.1 添加核心依赖

6.4.2 添加核心配置文件

6.4.3 添加接口类

6.5 功能测试

6.6 接入Skywalking

七、写在文末


一、前言

随着分布式应用大规模部署,应用可观测性从理论到落地已经在众多大型互联网应用中得到实践,经过多年沉淀,行业内也逐步形成了相应的一整套解决方案,比如针对日志可视化ELK解决方案,分布式链路追踪APM解决方案SkyWalking,可视化监控工具Prometheus等等。今天将详细介绍下APM解决方案中一款重要工具SkyWalking的使用。

二、SkyWalking介绍

2.1 SkyWalking是什么

 SkyWalking是一个开源的可观测平台,用于从服务和云原生等基础设施收集、分析、聚合以及可视化数据。官网地址:Apache SkyWalking

SkyWalking 提供了一种简便的方式来清晰地观测分布式系统。相比较zipkin而言,skywalking利用agent字节码增强技术实现代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计,UI界面更加强大等优点。

2.2 SkyWalking核心功能

SkyWalking 有哪些功能呢?下面列举了其主要的功能点:

  • 监控手段丰富,可以通过语言探针和 service mesh 获得监控是数据;

  • 多种类型的语言自动探针,包括 Java,.NET Core 和 Node.JS;

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

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

  • 支持各类告警机制;

  • 提供优秀的可视化解决方案,支持各类监控数据的可视化;

2.3 SkyWalking整体架构

下面是SkyWalking的整体架构图

从官网提供的Skywalking架构图来看,分成几个部分,简单来说,可以分成下面几个部分

OAP后端

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

WEB-UI

UI负责提供web控制台,查看链路,查看各种指标,性能等

Agent探针

Agent负责收集日志数据:Agent以探针的方式,进行请求链路的数据采集,并向OAP服务器上报

Storage存储

数据的存储层,支持ElasticSearch、Mysql、H2多种方式

2.4 SkyWalking主要工作流程

官网关于SkyWalking的详细工作流程图如下

如果在实际应用中,简化上面的流程之后其核心工作流程分为下面几步:

  • 数据采集 ,服务通过探针的方式接入数据采集的功能;
  • 上报服务器 ,请求链路的相关处理行为会上报到OAP服务中;
  • 数据存储 ,进行数据的聚合管理和分析,并存储在持久层;
  • 数据展现 ,通过UI界面进行可视化呈现收集的数据;

三、为什么选择SkyWalking

3.1 业务背景

随着业务规模的不断增长,应用的微服务数量也在随着增长,当微服务的数量越来越大时,一旦系统中出现某个问题,如果不借助工具或其他监测手段,解决问题是耗时耗力的,尤其是N多个微服务之间的调用链路很长,调用关系非常复杂的时候,对于排查、定位分析和解决问题将变得异常困难。因此急需一种可视化工具,可以追踪分布式调用的完整链路的信息,并提供可视化分析界面。

3.2 常见监控工具对比

市面上提供的可用于微服务应用监控工具有很多,下面列举一些常用的解决方案:

  • Zipkin:Twitter公司开源的一个分布式追踪工具,被Spring Cloud Sleuth集成,使用广泛而稳定,需要在应用程序中埋点,对代码侵入性强;

  • Cat:美团大众点评开源的一款分布式链路追踪工具。需要在应用程序中埋点,对代码侵入性强;

  • Pinpoint:一个韩国团队开源的产品,探针收集的数据粒度非常细,但性能损耗大,因其出现的时间较长,完成度很高;

  • SkyWalking:中国人吴晟(华为)开源的一款分布式追踪,分析,告警的工具,现在是Apache旗下开源项目,对云原生支持,目前增长势头强劲,社区活跃,中文文档没有语言障碍;

  • OpenTelemetry ,是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方 vendor 无关的服务;

  • Grafana,是一个监控仪表系统,由Grafana Labs公司开源的的一个系统监测 (System Monitoring) 工具。帮助用户简化监控的复杂度,用户只需要提供需要监控的数据,它就可以生成各种可视化仪表。同时它还支持报警功能,可以在系统出现问题时通知用户;

  • Prometheus,主要用于对基础设施的监控,包括服务器(CPU、MEM等)、数据库(MYSQL、PostgreSQL等)、Web服务等,几乎所有东西都可以通过Prometheus进行监控。而它的数据,则是通过配置,建立与数据源的联系来获取的;

3.3 为什么选择SkyWalking

相比于其他框架,SkyWalking有自己的优势,主要体现在下面几点:

3.3.1 代码侵入性极低

Skywalking采用字节码增强的技术实现,微服务以java-agent的方式集成,业务代码本身无侵入,像Zipkin代码侵入性就比较高。

3.3.2 功能丰富

1)链路追踪、拓扑分析能力强,采用先进的流式拓扑分析设计;

2)Skywalking功能比较丰富,插件丰富,报表统计,UI界面更加人性化,更符合国人的使用习惯;

3.3.3 产品完善度高

Java生态、功能丰富,国人开发、社区活跃,迭代迅速。

四、SkyWalking环境搭建

官网安装包下载地址:Downloads | Apache SkyWalking

4.1 下载安装包

为了后面的演示,即将springboot服务接入到Skywalking,需要部署OAP服务,以及Java Agent,对应的安装包如下:

下载oap安装包

oap即Skywalking服务端,如下进到官网后,选择下面这里的包,选择合适的版本进行下载,这里我选择9.3.0的版本;

下载Java Agent包

即服务端agent,用于收集来自客户端的端点信息和指标信息,然后上报到oap服务端

4.2 部署服务

4.2.1 部署oap(apm)服务

oap的服务运行起来很简单,最直接的方式就是解压后进入到bin目录直接使用脚本启动即可

tar -zxvf apache-skywalking-apm-9.3.0.tar.gzcd apache-skywalking-apm-bincd bin

启动脚本说明:

1、oapService.sh,oap的服务启动脚本;

2、webappService.sh,web-ui服务启动脚本;

3、startup.sh,同时包含了启动上面两个服务的脚本

实际使用时,为了方便直接使用 startup.sh启动即可

启动成功后会有两个服务,如上所示:

  • skywalking-oap-server:暴露11800和12800两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml;
  • skywalking-web-ui:服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml;

4.2.2 web-ui界面访问

启动成功后,可以直接访问web-ui界面,访问地址:IP:8080,如果需要修改ui界面的访问端口,直接修改web-app目录下的配置文件中的端口即可;

访问的界面如下

4.3 数据持久化配置

默认情况下如果不做任何配置,Skywalking运行过程中产生的数据将会存储在H2,即内存数据库,一旦服务宕机或被重启,数据将丢失,Skywalking提供了多种持久化数据存储的方式,可以选择mysql,es等,下面使用mysql来存储数据。

4.3.1 修改配置文件

找到config目录下的application.yml配置文件,然后找到下面配置的地方,改为mysql

修改相关的mysql连接参数,指向你自己的连接,注意提前创建一个数据库

4.3.2 上传mysql驱动包

将mysql的连接jar包上传到oap-libs目录下,下载链接:文件分享

4.3.3 重启服务

不管是使用哪种数据持久化方式,一定要上传对应的jar包之后再重启服务,否则会报连接驱动找不到的问题

然后刷新页面,就可以看到数据库下生成了很多Skywalking相关的数据表

五、springboot接入Skywalking

在项目中,如何将springboot接入Skywalking,从而通过Skywalking来监控服务呢?下面来看具体的操作步骤

5.1 准备一个测试使用的接口

@RestController
@RequestMapping("/user")
public class UserController {@GetMapping("/getById")public User find(@RequestParam String userId) {return new User(userId, "jerry");}}

5.2 获得Java Agent包

通过上面下载的Agent的包解压到本地目录(如果是服务器同样的操作)

5.3 参数化启动项目

本地启动项目时,添加如下启动参数

-javaagent:E:\code-self\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAME=sky-boot -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=服务端IP:11800

在idea中配置上面的这段启动参数

5.4 接口访问测试

启动成功后,浏览器访问上面提供的测试接口

然后再在skywalking的web-ui界面上就能看到当前监控到的服务信息了

继续点进去,可以看到详细的各种监控指标信息

也可以点击其他的监控指标进行多维度查看

六、dubbo接入Skywalking

dubbo在微服务治理中也是经常使用的,下面通过实例演示下如何利用Skywalking监控dubbo服务

6.1 搭建三个微服务模块

工程目录结构如下

顶层pom依赖

<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><dubbo.version>3.1.5</dubbo.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.14</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>${dubbo.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

6.2 api模块

该模块主要定义公共的实体类,服务接口

定义一个实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {private String id;private String userName;}

定义一个服务接口

public interface UserService {User getByUserId(String userId);
}

发布api模块jar包

通过maven命令,将api模块的jar包发布到本地仓库以供其他模块依赖

6.3 dubbo-provider模块

模块结构如下

6.3.1 添加核心依赖

这里注册中心使用zk

    <dependencies><dependency><groupId>com.congge</groupId><artifactId>api</artifactId><version>1.0-SNAPSHOT</version></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><type>pom</type></dependency></dependencies>

6.3.2 添加核心配置文件

server:port: 8083dubbo:application:name: sky-dubbo-providerprotocol:name: dubboport: -1registry:address: zookeeper://IP地址:2181protocol: zookeeper

6.3.3 添加dubbo接口实现类

import com.congge.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;@Slf4j
@DubboService
public class UserServiceImpl implements UserService{@Overridepublic User getByUserId(String userId) {log.info("[ServiceProvider] 根据 id 查询用户:{}", userId);return new User(userId, "jerry");}
}

6.3.4 服务启动类

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubbo
@SpringBootApplication
public class ProviderApp {public static void main(String[] args) {SpringApplication.run(ProviderApp.class, args);}
}

6.4 dubbo-consumer模块

模块结构如下

6.4.1 添加核心依赖

    <dependencies><dependency><groupId>com.congge</groupId><artifactId>api</artifactId><version>${project.parent.version}</version></dependency><!-- dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><type>pom</type></dependency></dependencies>

6.4.2 添加核心配置文件

server:port: 8082dubbo:application:name: sky-dubbo-consumerprotocol:name: dubboport: -1registry:address: zookeeper://IP地址:2181protocol: zookeeper

6.4.3 添加接口类

为了方便测试,自定义一个接口,在接口中调用dubbo服务

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {@DubboReferenceprivate UserService userService;//http://localhost:8082/user/getByUserId?userId=001@GetMapping("/getByUserId")private User getByUserId(@RequestParam String userId) {User user = userService.getByUserId(userId);log.info("调用 dubbo 服务成功,获取用户信息:{}", JSON.toJSONString(user));return user;}
}

6.5 功能测试

分别启动provider和consumer两个微服务模块,然后调用一下上面的接口,确认看到下面的结果后说明服务可以正常调通(前提:确保连接的zk服务可正常使用

6.6 接入Skywalking

按照上述接入springboot的方式,idea启动的时候修改下启动配置参数,provider和consumer两个模块启动时分别添加如下参数:

provider配置的启动参数

-javaagent:E:\code-self\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAME=dubbo-provider -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=IP地址:11800

consumer配置的启动参数

-javaagent:E:\code-self\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAME=dubbo-consumer -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=IP地址:11800

配置之后再次启动两个模块的服务,再次访问接口,仍然能够得到期望的结果

此时再次到web-ui界面上看到在服务列表中出现了dubbo的两个服务信息

如果切换到拓扑图,也能够清晰看到两个服务的调用链路

七、写在文末

本文详细介绍了Skywalking从搭建到使用的详细流程,事实上Skywalking的功能远不止这些,它不仅能够监控微服务的调用,还能监控像前端,PHP,nginx等众多其他的中间件,甚至还能与其他的可视化展示工具进行对接,可以说功能非常完善,如果整合你的项目在技术选项中需要集成一款链路监控,链路追踪以及可视化监控指标展示的工具,Skywalking也许是一个不错的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最优化方法Python计算:无约束优化应用——神经网络回归模型

人类大脑有数百亿个相互连接的神经元&#xff08;如下图(a)所示&#xff09;&#xff0c;这些神经元通过树突从其他神经元接收信息&#xff0c;在细胞体内综合、并变换信息&#xff0c;通过轴突上的突触向其他神经元传递信息。我们在博文《最优化方法Python计算&#xff1a;无约…

从实际工作情况,介绍嵌入式(MCU)软件开发常用(通用)工具

目录 前言 1、代码阅读及编辑工具&#xff08;VSCode、Understand&#xff09; 2、代码对比工具&#xff08;Beyond Compare&#xff09; 3、代码仓库相关工具&#xff08;Git、SVN、Tortoise&#xff09; 4、文本编辑器&#xff08;Notepad&#xff09; 5、电脑文件搜索工…

【LeetCode:2660. 保龄球游戏的获胜者 | 模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

PAT 乙级 1046 划拳

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就赢了&#xff0c;输家罚一杯酒。两人同赢或两人同输则继续下一轮&…

Python序列之集合

系列文章目录 Python序列之列表Python序列之元组Python序列之字典Python序列之集合&#xff08;本篇文章&#xff09; Python序列之集合 系列文章目录前言一、集合是什么&#xff1f;二、集合的操作1.集合的创建&#xff08;1&#xff09;使用{}创建&#xff08;2&#xff09;…

SpringBoot定时监听RocketMQ的NameServer

问题分析 自己在测试环境部署了RocketMQ&#xff0c;发现namesrv很容易挂掉&#xff0c;于是就想着监控&#xff0c;挂了就发邮件通知。查看了rocketmq-dashboard项目&#xff0c;发现只能监控Broker&#xff0c;遂放弃这一路径。于是就从报错的日志入手&#xff0c;发现最终可…

【MATLAB第87期】#源码分享 | 基于MATLAB的增量神经系统网络SFAM多输入单输出多分类预测模型

【MATLAB第87期】#源码分享 | 基于MATLAB的增量神经系统网络SFAM多输入单输出多分类预测模型 前言 SFAM是一种增量神经网络分类器。它是模糊ARTMAP&#xff08;FAM&#xff09;的一个简单而快速的版本。如果输入相同,FAM和SFAM的产出相同。 参考文献: [1] Kasuba, T. (1993)…

【MMdetection】MMdetection从入门到进阶

基础环境安装 步骤 0. 从官方网站下载并安装 Miniconda。 步骤 1. 创建并激活一个 conda 环境。 conda create --name openmmlab python3.8 -y conda activate openmmlab步骤 2. 基于 PyTorch 官方说明安装 PyTorch。 pip install torch2.0.1 torchvision0.15.2 torchaudio…

【MySQL表的增删查改】

文章目录 前言1 Create1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入否则更新1.4 替换 2 Retrieve2.1 SELECT 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重 2.2 WHERE 条件2.2.1 英语不及格的同学及英语成绩 ( &…

C++基础:指针数组和数组指针(大白话讲解)

指针数组&#xff1a;本质上是一个数组&#xff0c;数组中的每一个元素都是一个指针&#xff1b; 数组指针&#xff1a;本质上是一个指针&#xff0c;数组指针是一个指向数组的指针。 为了更直观的分析他们的区别&#xff0c;我举个例子&#xff1a; #include<iostream&g…

操作系统:可变分区管理

有作业序列&#xff1a;作业A要求42K&#xff1b;作业B要求27K&#xff0c;作业C要求22K&#xff0c;作业和空闲内存区如下图所示&#xff0c;请画出最佳适应算法空闲队列图&#xff0c;并分析最佳适应算法是否适合该作业系列。 答&#xff1a;最佳适应算法是按照空闲块由小到大…

【辐射场】3D Gaussian Splatting

三维高斯…喷喷 \, 3D Gaussian Splatting&#xff0c;下文简称3DGS&#xff0c;是好一段时间以来在三维内容创作和三维重建领域比较有热度的一项技术。 它属于基于图像的三维重建方法&#xff0c;意思就是你对现实物体或者场景拍照片&#xff0c;就能给你训练成一个场景模型&a…

C语言之整型提升

文章目录 1 有可能出现的问题2 产生以上问题的原因&#xff08;整型提升&#xff09;3 整型提升的过程4 整型提升示例5 总结 1 有可能出现的问题 代码如下 #include <stdio.h>int main () {int a -1;unsigned int b 1;if (a < b) {printf("a < b");}…

【Spring Security】认证之案例的使用、MD5加密、CSRF防御

目录 一、引言 1、什么是SpringSecurity认证 2、为什么使用SpringSecurity之认证 3、实现步骤 二、快速实现&#xff08;案例&#xff09; 1、添加依赖 2、配置 3、导入数据表及相关代码 4、创建登录页及首页 5、创建配置Controller 6、用户认证 6.1、用户对象User…

WEB 3D技术 three.js通过 GLTFLoader 导入并应用 gltf/glb 3D资源

上文 WEB 3D技术 three.js 雾 基础使用讲解我们讲了雾的基本使用方法 但是 如果我们要做一个树林 一颗一颗树去加 那真的是要累死了 我们一定是在建模软件上 建模好这样的模型 然后将模型导入到场景中 官网中搜索 GLTFLoader 在我们日常WEB开发中 用的最多的3D格式 就是 GLTF…

python练习2【题解///考点列出///错题改正】

一、单选题 【文件】 *1.【单选题】 ——文件&#xff1a;读取方法 下列哪个选项可以从文件中读取任意字节的内容&#xff1f;&#xff08;C &#xff09;A A.read() B.readline() C.readlines() D.以上全部 A\B\C三种方法都是可以读取文件中任意的字节内容的&#xff0…

Lesson 06 vector类(上)

C&#xff1a;渴望力量吗&#xff0c;少年&#xff1f; 文章目录 一、vector是什么&#xff1f;二、vector的使用1. 构造函数2. vector iterator3. vector 空间增长问题4. vector增删查改 三、vector实际使用 一、vector是什么&#xff1f; vector是表示可变大小数组的序列容器…

LVGL 在framebuffer设备上的移植

LVGL 在framebuffer设备上的移植 ItemDescDate2023-12-31Authorhongxi.zhuplatformNXP I.MX6ULLLCDSPI TFTLCD NV3030B 文章目录 LVGL 在framebuffer设备上的移植一、LVGL源码获取二、源码修改适配三、编译&运行补充 一、LVGL源码获取 新建lvgl_imx6ull文件夹&#xff0c…

低代码开发中业务蓝图的重要性:业务需求与系统实现的桥梁

在低代码应用开发领域&#xff0c;业务蓝图是一个至关重要的工具&#xff0c;它提供了组织业务流程需求的详细信息。它类似于一份指导开发人员进行应用开发的路线图&#xff0c;确保与业务的战略目标和需求保持一致。 低代码方法学&#xff0c;顾名思义&#xff0c;即减少了传…

Google机器人团队获ICRA 2023 机器人学习方向最佳论文奖:机器人实体控制的大语言模型程序

这篇论文主要讨论了大型语言模型&#xff08;LLM&#xff09;在机器人控制方面的应用。作者们指出&#xff0c;尽管LLM在理解和生成自然语言方面表现出色&#xff0c;但其在实际应用中&#xff0c;如机器人控制等领域的应用仍然有限。因此&#xff0c;他们提出了一种新的方法&a…