【微服务】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.rhkb.cn/news/228094.html

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

相关文章

docker小白第十天

redis集群主从容错切换案例 3主3从的redis集群&#xff0c;某个主机宕机了&#xff0c;需要对应的从机补位。 docker exec -it redis-node-1 /bin/bash # 进入容器1的命令行 redis-cli -p 6381 # 进入节点1的命令行 cluster nodes # 查看集群信息可以看到1号和6号对应是主从关…

IDEA相关操作

目录 连接MySQL IDEA配置Maven 配置全局Maven 导入Maven项目 方法一 方法二 安装Mybatisx插件 安装lombok插件 连接MySQL 填写user和Password之后测试连接 如果是第一次连接需要联网下载数据库连接驱动&#xff0c;安装提示下载即可 如果显示如下错误需要更改时区 …

【Vue2+3入门到实战】(18)VUE之Vuex状态管理器概述、VueX的安装、核心概念 State状态代码实现 详细讲解

目录 一、[Vuex](https://vuex.vuejs.org/zh/) 概述1.是什么2.使用场景3.优势4.注意&#xff1a; 二、需求: 多组件共享数据1.创建项目2.创建三个组件, 目录如下3.源代码如下 三、vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index…

C# Winform教程(二):基础窗口程序

1、介绍 winform应用程序是一种智能客户端技术&#xff0c;我们可以使用winform应用程序帮助我们获得信息或者传输信息等。 2、常用属性 Name&#xff1a;在后台要获得前台的控件对象&#xff0c;需要使用Name属性。 Visible&#xff1a;指示一个控件是否可见、 Enable&…

2024年中职“网络安全“—数字调查取证(attack817.pcapng)

目录 ​1.通过分析数据包找出恶意用户最初访问HTTP服务的包号&#xff0c;将该值作为Flag值提交, Flag格式为flag{xxx}&#xff1b; 2.继续查看数据包文件分析出恶意用户扫描了哪些端口&#xff0c;将全部的端口号按照一定顺序作为Flag值&#xff0c;提示&#xff1a;注意端口…

【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…

一文道破Java NIO

文章目录 一、常见的几种 Java IO 工作模式1.1 同步阻塞 IO1.2 同步非阻塞 IO1.3 异步非阻塞 IO 二、Java NIO 多路复用详解2.1 原理图2.2 基础组件简介SelectorChannelSelectionKey 2.3 Java NIO 代码示例2.4 Linux 支持多路复用的系统调用函数select 函数poll 函数epoll 函数…

利用STM32和可控硅控制220V加热电路

利用STM32和可控硅控制220V加热电路 Chapter1 利用STM32和可控硅控制220V加热电路一、错误原理图二、正确原理图 Chapter2 可控硅驱动芯片MOC3081/3061Chapter3 一个MOC3061的可控硅触发电路的分析Chapter4 可控硅的两种触发方式&#xff1a;移相触发和过零触发1、过零触发2、移…

数据库——建立ER模型及关系模型转换

​ 【实验内容及要求】 使用画图工具或MySQL Workbench等建模工具设计出相应的ER图&#xff0c;将局部ER图合并为一个整体ER模型&#xff0c;在ER模型中填加多样性约束&#xff0c;建立显示主键的ER模型&#xff0c;标识实体的属性&#xff0c;确认主键、外键。将上述ER图转化…

视频监控EasyCVR如何通过设置sei接口,实现在webrtc视频流中添加画框和文字?

安防视频监控系统基于视频综合管理平台EasyCVR视频系统&#xff0c;采用了开放式的网络结构&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;具备权限管…

染色法判定二分图算法总结

知识概览 一个图是二分图当且仅当图中不含奇数环&#xff08;奇数环是边数为奇数的环&#xff09;。图中不含奇数环&#xff0c;染色过程中一定没有矛盾。染色法判定二分图算法时间复杂度O(n m)。 例题展示 题目链接 860. 染色法判定二分图 - AcWing题库https://www.acwing.…

传感器基础:传感器使用与编程使用(三)

目录 常用传感器讲解九--雨滴传感器具体讲解电路连接代码实现 常用传感器讲解十--光传感器根据亮度安排灯具体讲解电路连接代码实现 常用传感器讲解七--light cup&#xff08;KY-008&#xff09;具体讲解电路连接代码实现 常用传感器讲解十二--倾斜开关传感器&#xff08;KY-02…

idea利用JRebel插件,无需重启,实现Spring Boot项目热重载,节省开发时间和精力!

插件介绍 官方介绍 翻译过来的意思是&#xff1a; JRebel 是一款提高开发效率的工具&#xff0c;允许开发者立即重新加载代码更改。它跳过了在Java开发中常见的重新构建、重启和重新部署循环。JRebel 能够让开发者在相同的时间内完成更多工作&#xff0c;并且在编码时能够保持…

centos7.9中离线安装nginx开启ssl,arm架构

一、首先需要去国内相关镜像库下载相关依赖rpm&#xff1a; http://mirrors.bfsu.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirror.nju.edu.cn/centos-altarch/7.9.2009/os/aarch64/ http://mirrors.tuna.tsinghua.edu.cn/centos-altarch/7.9.2009/os/aarch64/ htt…

第2课 使用FFmpeg读取rtmp流并用openCV显示视频

本课对应源文件下载链接&#xff1a; https://download.csdn.net/download/XiBuQiuChong/88680079 这节课我们开始利用ffmpeg和opencv来实现一个rtmp播放器。播放器的最基本功能其实就两个:显示画面和播放声音。在实现这两个功能前&#xff0c;我们需要先用ffmpeg连接到rtmp服…

2007~2016 年税调经纬度及其所处的省市区县乡镇数据

之前给大家分享过一份税调企业经纬度及其所处的省市区县数据: 2007~2016 年税调企业地理信息数据(含经纬度及其所处的省市区县):https://rstata.duanshu.com/#/course/76d38022cd004b09b2aa09647936beb0 最近有培训班的小伙伴提出是否能根据税调企业经纬度来判断其所属的乡…

Java:IO流——字节流和字符流

目录 IO流的基本概念 IO流体系结构 FileOutputStream字节输出流 构造方法 成员方法 细节 关流 FileInputStream字节输入流 构造方法及成员方法 read不带参数代码示例 read带参数代码示例​编辑 将字节数组或字符数组转成字符串 FileReader 字符输入流 构造方法和…

计算机速成课Crash Course - 14. 数据结构

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 13. 算法入门 14. 数据结构 上集讲了一些经典算法,比如给数组排序&#xff0c;…

回首2023: 程序员跳出舒适圈

1 前言 今天的冬日暖阳高照&#xff0c;照耀着我穿着羽绒服的身体&#xff0c;让我感到火一般的燥热&#xff0c;仿佛错觉中已经到了阳春三月。刚刚把孩子洗好&#xff0c;我坐在电脑前&#xff0c;准备整理一下思绪&#xff0c;回顾一下2023年的生活和工作。 2 2023 回顾 回…

Java毕业设计—springboot健身房管理系统

一、项目背景介绍&#xff1a; 随着人们生活水平的提高和健康意识的增强&#xff0c;健身行业逐渐兴起并迅速发展。而现代化的健身房管理系统已经成为健身房发展的必备工具之一。传统的健身房管理方式已经无法满足现代化健身房的需求&#xff0c;需要一种更加高效、智能、安全…