【微服务】SpringBoot制作Docker镜像接入SkyWalking详解

目录

一、前言

二、SkyWalking介绍

2.1 SkyWalking是什么

2.2 SkyWalking核心功能

2.3 SkyWalking整体架构

2.4 SkyWalking主要工作流程

三、前置准备

3.1 搭建SkyWalking服务

3.1.1 下载安装包

3.1.2 上传服务器目录

2.1.3 数据库持久化配置说明

3.1.4 启动skywalking服务

3.1.5 访问控制台

3.2 搭建springboot工程

3.2.1 导入下面的依赖

3.2.2 配置Dockerfile文件

3.2.3 添加测试接口

3.3 springboot 接入skywalking

四、springboot 制作docker接入skywalking

4.1 修改Dockerfile文件

4.2 工程打包上传服务器

4.3 制作微服务镜像

4.4 启动服务容器

4.5 检查是否接入成功

五、写在文末


一、前言

随着微服务开发模式越来越成熟,微服务的健康检查、服务链接追踪也成为很多显示运行的项目必须要考虑的事项。微服务链路追踪在一些大的服务平台中起着非常重要的作用,不仅可以监控各个服务的健康状况,也可以协助开发、测试、运维等人员快速排查、分析和定位线上问题,同时也可以监控服务运行过程中各个服务之间的调用情况,性能瓶颈点的定位等,可以说基本涵盖了服务运行过程中的各项重要指标的可视化,在以springboot为技术框架的微服务生态中,skywalking是一个很好的链路追踪组件,在很多项目中发挥过重要的用场,本文以SpringBoot为例,探讨如何在微服务进行容器化之后接入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后端
    • 负责接收 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界面进行可视化呈现收集的数据;

三、前置准备

在正式将微服务制作成镜像并通过docker接入SkyWalking之前,需要做一些前置的准备,参照下面的步骤依次完成。首先确保你后面要使用的服务器的java环境已经准备好。

3.1 搭建SkyWalking服务

3.1.1 下载安装包

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

下载oap安装包

  • oap即Skywalking服务端,如下进到官网后,选择下面这里的包,选择合适的版本进行下载,这里我选择9.7.0的版本(版本可以自行选择);

下载Java Agent包

  • 即服务端 agent,用于收集来自客户端的端点信息和指标信息,然后上报到oap服务端,后续在springboot项目中为了接入skywalking将微服务的指标信息上报到skywalking时,就需要通过该Agent包进行指标收集和上报

在当前的页面找到Agents ,然后进行下载

3.1.2 上传服务器目录

将上面下载的安装包上传到服务器指定目录,并使用下面的命令进行解压

tar -zxvf apache-skywalking-apm-9.7.0.tar.gz
tar -xvf apache-skywalking-java-agent-9.2.0.tar

2.1.3 数据库持久化配置说明

默认情况下,如果只是简单运行skywalking服务做一下集成测试的话,解压之后使用内置的脚本即可启动,而在实际项目中,为了保证运行过程中的数据安全性,需要对skywalking服务的运行数据进行持久化存储,官方提供了多种存储方式,比如es,mysql ,pg等,默认不做任何配置的话,数据将存储在h2内存数据库中,如果需要配置,进入下面的目录

cd apache-skywalking-apm-bin/config

找到: application.yml 这个文件进行配置即可

关于如何接入数据持久化的操作可以参考另一篇文章,有详细的介绍:【微服务】springboot整合skywalking使用详解-CSDN博客

3.1.4 启动skywalking服务

使用skywalking的服务,核心需要启动两个服务

  • oapService.sh,oap的服务启动脚本

  • webappService.sh,web-ui服务启动脚本

进入服务启动脚本的目录,在这个目录下提供了服务启动的相关脚本

cd /apache-skywalking-apm-bin/bin

使用下面的命令进行后台服务启动

cd /usr/local/soft/sky/apache-skywalking-apm-bin/bin
#后台启动: 
./oapService.sh &
./webappService.sh &

使用jps命令检查一下是否启动成功,如果正常启动,可以看到有两个Java进程

同时,如果你不想分别执行两个脚本启动,也可以直接使用目录下的startup.sh进行启动,效果是一样的

服务与端口补充说明:

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

  • skywalking-web-ui:服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml;

3.1.5 访问控制台

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

浏览器访问的效果如下:

如果还没有服务接入进来,页面上不会展示相关的链路追踪信息,类似于懒加载机制。

3.2 搭建springboot工程

为了接下来对接skywalking,本地需要搭建一个springboot工程,参照下面的步骤快速完成一个工程的搭建和运行。

3.2.1 导入下面的依赖

在pom文件中引入下面的依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.4</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><finalName>boot-walking</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

3.2.2 配置Dockerfile文件

后续要通过微服务制作成docker镜像接入skywalking,需要提前先准备一个Dockerfile,用于构建docker镜像,参考如下:

FROM  openjdk:17-jdk-alpineADD ./boot-walking.jar /app/boot-walking.jarENTRYPOINT ["java", "-jar", "/app/boot-walking.jar"]

3.2.3 添加测试接口

增加一个测试接口,用于后续测试效果

@RestController
public class DockerController {//localhost:8082/index@GetMapping("/index")public String index(){return "Hello Docker";}}

运行项目后测试一下接口,确保可以使用

3.3 springboot 接入skywalking

如果是基于springboot 项目接入skywalking,需要在启动命令中添加相关的参数,首先找到上面下载到本地的Agent包

然后再在idea中启动时配置下面的启动参数选项

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

配置完成,再次启动服务,此时通过控制台可以看到,加载了很多与skywalking相关的日志内容

再次访问一下上面的接口之后,此时再去skywalking控制台,此时可以发现微服务已经接入进来了

进一步,可以通过服务名称点进去进一步查看服务里面的相关指标信息

四、springboot 制作docker接入skywalking

通过上面的操作,完成了本地Springboot项目接入skywalking的完整过程,接下来进一步演示如何将springboot工程制作镜像,并通过docker容器接入skywalking。

4.1 修改Dockerfile文件

在上一步,我们在工程中增加了一个Dockerfile文件,通过这个文件可以制作微服务的镜像,但是如果需要在docker启动的时候接入skywalking,还需要增加其他的配置信息,参考下面的配置:

FROM openjdk:17-jdk-alpine
COPY ./boot-walking.jar /boot-walking.jar
COPY ./skywalking-agent /app/skywalking-agentCMD java -javaagent:/app/skywalking-agent/skywalking-agent.jar \-DSW_AGENT_NAME=sky-boot=boot-docker-walking \-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=服务IP:11800 \-jar /boot-walking.jar

4.2 工程打包上传服务器

将本地的springboot工程打成jar包并上传到服务器指定目录

4.3 制作微服务镜像

使用下面的命令将微服务jar包制作成docker镜像

docker build -t boot-walking:1.0 .

运行上面的命令进行镜像构建过程

检查一下镜像是否构建成功

4.4 启动服务容器

使用下面的命令启动docker容器

docker run -d -it -p 8082:8082 --name=boot-walking-1 boot-walking:1.0

启动成功后,可以通过docker logs命令进一步检查下是否正常运行了服务

通过输出的日志不难看出,与上面springboot接入时启动类似,在启动的时候也输出了很多与skywalking相关的日志。

4.5 检查是否接入成功

然后访问下服务器中运行的docker服务接口

此时再去skywalking控制台检查一下,此时已经正常接入进来了

同样可以点进去进一步查看各项指标信息,比如接口的具体执行情况、耗时、执行的链路等信息

五、写在文末

本文通过实际操作完成了如何基于springboot项目接入skyalking的详细过程,并进一步将springboot项目制作容器对接skyalking的详细操作,基于此,有兴趣的同学还可以继续研究和完善,比如如何在skywalking中可视化监控微服务中的日志信息等,希望对看到的同学有用哦,本篇到此结束,感谢观看。

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

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

相关文章

从零开始构建微博爬虫与数据分析系统

从零开始构建微博爬虫与数据分析系统 引言 社交媒体平台蕴含着海量的信息和数据&#xff0c;通过对这些数据的收集和分析&#xff0c;我们可以挖掘出有价值的见解。本文将详细介绍如何构建一个完整的微博爬虫和数据分析系统&#xff0c;从数据爬取、清洗、到多维度分析与可视…

深入探索RAG:用LlamaIndex为大语言模型扩展知识,实现智能检索增强生成

大型语言模型&#xff08;LLM&#xff09;&#xff0c;如ChatGPT和Llama&#xff0c;在回答问题方面表现出色&#xff0c;但它们的知识仅限于训练时所获取的信息。它们无法访问私有数据&#xff0c;也无法在训练截止日期之后学习新知识。那么&#xff0c;核心问题就是……我们如…

【延迟双删】简单解析

使用场景&#xff1a;【高并发】情况下的做【更新操作】 什么是延迟双删 首次删除&#xff1a;当需要更新某个数据项时&#xff0c;首先删除缓存中的该项。 更新数据库&#xff1a;接着&#xff0c;更新数据库中的该项。 短暂延迟&#xff1a;然后等待一段很短的时间&#xff…

解决Windows安全中心显示空白页面

1、电脑重装系统后&#xff0c;发现原本一些软件打不开了&#xff0c;电脑莫名认为有病毒&#xff0c;自动删除插件。附图。 2、第一反应是电脑防火墙的原因&#xff0c;默认威胁防护识别到了病毒软件&#xff0c;自动删除。在开始屏幕搜Windows安全中心&#xff0c;打开之后发…

【回眸】error: failed to compile `xxxxxx`重装rust环境

在ubuntu上安装软件报错 error: failed to compile cxx2flow v0.6.2 Caused by: package cargo-platform v0.1.9 cannot be built because it requires rustc 1.78 or newer, while the currently active rustc version is 1.75.0 Try re-running cargo install with --lo…

算法—冒泡排序—js(教学示例、小数据)

冒泡排序原理 冒泡排序是一种简单的排序算法&#xff0c;通过重复遍历数组&#xff0c;比较相邻元素并交换位置&#xff0c;使较大的元素逐渐“浮”到数组末尾。 特点 时间复杂度&#xff1a;平均 O(n)&#xff0c;最优&#xff08;已有序时&#xff09;O(n) 空间复杂度&#…

linux sysfs的使用

在Linux内核驱动开发中&#xff0c;device_create_file 和 device_remove_file 用于动态创建/删除设备的 sysfs 属性文件&#xff0c;常用于暴露设备信息或控制参数。以下是完整示例及详细说明&#xff1a; 1. 头文件引入 #include <linux/module.h> #include <linux/…

利用 Deepseek 和 Mermaid 画流程图

提示词 你是一个产品经理&#xff0c;请绘制一个报名比赛的流程图&#xff0c;要求生成符合Mermaid语法的代码&#xff0c;具体要求如下&#xff1a; 1.注册账号 2.填写报名信息 3.参加比赛 4.查看比赛结果 生成的结果 flowchart TDA([开始]) --> B[注册账号]B --> C{账…

【图像标注技巧】目标检测图像标注技巧

介绍一些图像标注技巧。之前引用过别人的文章 yolo目标检测 技巧 trick 提升模型性能&#xff0c;deep research检测调研报告也可以进行参考。 拉框类的标注&#xff0c;如果你不确定哪种方法好&#xff0c;你可以把所标注区域的都剪切出来&#xff0c;然后站在屏幕一米之外眯…

数字信号处理技术架构与功能演进

数字信号处理&#xff08;DSP&#xff09;是通过数字运算实现信号分析、变换、滤波及调制解调的技术领域&#xff0c;其发展过程与技术应用如下&#xff1a; 一、定义与核心功能 技术定义&#xff1a;通过算法将模拟信号转换为数字形式进行处理&#xff0c;具有高精度、可编程…

浏览器上下文通信

文章目录 浏览器上下文通信同源通信同源通信流程同一浏览器上下文通信不同浏览器上下文通信 跨域通信前端和前端跨域前端和后端跨域 浏览器上下文通信 浏览器上下文通信分为两种&#xff1a;同源和跨源。同样的同源通信也分为同一浏览器上下文和不同的浏览器上下文。 同源通信…

Linux 离线部署 Docker 18.06.3 终极指南(附一键安装卸载脚本)

Linux 离线部署 Docker 18.06.3 终极指南&#xff08;附一键安装/卸载脚本&#xff09; 摘要&#xff1a;本文针对无外网环境的 Linux 服务器&#xff0c;提供基于二进制包的 Docker 18.06.3 离线安装全流程指南。包含自动化脚本设计、服务配置优化及安全卸载方案&#xff0c;…

【前端】跟着maxkb学习logicflow流程图画法

文章目录 背景1. 选定学习对象-maxkb应用逻辑编排2. 确定实现框架3. 关键逻辑&#xff1a;查看app-node.js4. 学习开始节点绘制流程数据形式 5. 给节点增加表单输入框遇到过的问题 背景 看看前端如何绘制流程图&#xff0c;界面好看点。 "logicflow/core": "1.…

Android 12系统静态壁纸深度定制指南

1. 需求背景与实现原理 在Android 12系统ROM定制开发中&#xff0c;扩展静态壁纸功能需要深入理解WallpaperManagerService的架构体系。系统壁纸管理通过双端协作实现&#xff1a; WallpaperManagerService&#xff08;frameworks层&#xff09;&#xff1a;负责壁纸状态管理、…

相得益彰 — 基于 GraphRAG 事理图谱驱动的实时金融行情新闻资讯洞察

*本文为亚马逊云科技博客文章&#xff0c;仅用于技术分享&#xff0c;不构成投资建议或金融决策支持。文中涉及的公司名称仅用于技术示例&#xff0c;不代表亚马逊云科技观点或与这些公司的商业合作关系。 背景介绍 在当今这个信息爆炸的时代&#xff0c;金融市场每天都在产生…

OpenCV---图像预处理(四)

OpenCV—图像预处理&#xff08;四&#xff09; 文章目录 OpenCV---图像预处理&#xff08;四&#xff09;九&#xff0c;图像掩膜9.1 制作掩膜9.2 与运算9.3 颜色替换9.3.19.3.2 颜色替换 十&#xff0c;ROI切割十 一&#xff0c;图像添加水印11.1模板输入11.2 与运算11.3 图像…

【MySQL】:数据库事务管理

一&#xff1a;学习路径 &#xff08;1&#xff09;下载安装mysql &#xff08;2&#xff09;学习语言&#xff1a;SQL(操作数据库&#xff09; &#xff08;3&#xff09;mysql集群&#xff08;提升数据库存储效率&#xff09; &#xff08;4&#xff09;SQL使用&#xff0c;M…

内存函数和动态内存管理

目录 一、memcpy库函数介绍 1. memcpy的使用 2. memcpy的模拟 二、memmove库函数介绍 1. memmove的使用 2. memmove的模拟 三、memset库函数介绍 四、memcmp库函数介绍 五、动态内存中malloc和free 1. malloc 2. free 六、动态内存中calloc和realloc 1. calloc 2. realloc 七、…

yarn的基本介绍

1.Hadoop的三大结构及各自的作用&#xff1a; Hadoop是一个开源的分布式计算框架&#xff0c;它主要包括三大核心组件&#xff1a;HDFS&#xff08;Hadoop Distributed File System&#xff09;、YARN&#xff08;Yet Another Resource Negotiator&#xff09;和MapReduce。以…

STM32的启动方式

目录 一、从主闪存存储器启动&#xff08;Main Flash Memory&#xff09; 二、从系统存储器启动&#xff08;System Memory&#xff09; 三、从内置SRAM启动&#xff08;Embedded SRAM&#xff09; 四、从外挂存储介质启动的实现方式 1. 存储介质选型 2. 硬件连接 3. 引…