安装skywalking并集成到微服务项目

文章目录

  • 一、前言
  • 二、介绍
    • 1. 架构
  • 三、安装skywalking服务端
  • 四、启动skywalking服务端
  • 五、微服务项目开发
    • 注册中心
    • 网关服务
    • 商品服务
    • 订单服务
    • 支付服务
    • 测试
  • 六、下载java客户端
  • 七、微服务集成skywalking客户端
    • 1. idea启动
    • 2. 命令行启动
    • 3. 集成效果
  • 八、skywalking客户端配置
    • 1. 配置文件
    • 2. jvm启动参数
    • 3. javaagent选项
    • 4. 操作系统环境变量

一、前言

本片文章主要讲解skywalking的安装教程,及其在微服务架构中的链路追踪功能。

本文中的演示项目运行环境如下:

  • springcloud:2020.0.6
  • springboot:2.5.14
  • jdk:1.8
  • skywalking:9.4.0
  • os:windows

二、介绍

skywalking是一个开源的应用性能管理系统可观测性分析平台。用于收集分析聚合可视化来自服务和云原生基础设施的数据。SkyWalking提供了一种简单的方法来保持我们的分布式系统的清晰视图,甚至跨云。这是一个现代的APM(应用性能管理和监控技术),专门为云本地的、基于容器的分布式系统而设计。

SkyWalking在许多不同的场景中为观察监控分布式系统提供了解决方案。首先,与传统方法一样,SkyWalking为服务提供了自动仪器代理,如Java、C#、Node.js、Go、PHP和Nginx LUA。

SkyWalking为服务服务实例端点流程提供了可观察性。

  • 服务:代表为传入请求提供相同行为的一组工作负载。使用仪器代理或SDK时,可以定义服务名
  • 服务实例服务组中的每个工作负载称为一个实例。像Kubernetes中的pods一样,它不需要是单个操作系统进程,但是,如果您使用的是工具代理,实例实际上是一个真正的操作系统进程
  • 端点:服务中用于传入请求的路径,例如HTTP URI路径gRPC服务类+方法签名
  • 流程:操作系统进程。在某些场景中,一个服务实例不是一个流程,比如一个pod Kubernetes可以包含多个流程。

1. 架构

SkyWalking在逻辑上分为四个部分:Probe(探针)backend(平台后端)storage(存储)UI

  • Probe(探针):探针收集遥测数据,包括各种格式的度量轨迹日志事件
  • backend(平台后端):支持数据聚合分析流式处理,包括跟踪、指标、日志和事件。充当聚合者角色、接收者角色或两者兼而有之。
  • storage(存储):通过开放/可插拔的接口存储数据。你可以选择一个现有的实现,比如ElasticSearch、H2、MySQL、TiDB、BanyanDB。
  • UI:一个高度可定制的基于web的界面,允许skywalk终端用户可视化管理skywalk数据

在这里插入图片描述

三、安装skywalking服务端

进入skywalking下载页面,按照以下截图进行不同版本的下载

在这里插入图片描述

下载成功后进行解压,解压后如下所示

在这里插入图片描述

重点关注以下文件夹

  • bin:包括用于后端服务前端UI的启动shell脚本cmd脚本
  • config:后端服务的配置文件,主要关注application.ymllog4j.xmlalarm-settings.yml
  • oap-libs:后端服务所需要的所有依赖
  • webapp:前端应用以及配置文件

四、启动skywalking服务端

进入bin文件夹,双击webappService.bat启动skywalking服务的后端与前端

在这里插入图片描述

启动成功后如下所示

在这里插入图片描述

既然服务启动成功,我们下一步就是通过浏览器打开skywalking的可视化界面了。

首先需要查看前端服务运行的端口,进入webapp文件夹,查看前端配置文件application.yml,发现前端服务的运行端口号是通过变量SW_SERVER_PORT设置的,其默认端口号为8081

在这里插入图片描述

在浏览器输入localhost:8081,进入控制台页面

在这里插入图片描述

五、微服务项目开发

本项目仅用于演示skywalking的集成过程,项目结构如下图所示

在这里插入图片描述

  • skywalking-eureka-server:eureka服务注册中心
  • skywalking-gateway:网关
  • skywalking-goods:商品服务
  • skywalking-order:订单服务
  • skywalking-payment:支付服务

项目架构图如下所示

在这里插入图片描述

注册中心

本项目的注册中心仅用于服务注册,其配置文件如下所示

在这里插入图片描述

启动注册中心后,在浏览器打开注册中心页面,输入localhost:8080/eureka

在这里插入图片描述

从注册中心中可以看出,我们启动的实例如下

  • eureka注册中心:只有一个实例,端口号为8080,为单机模式
  • 网关:只有一个实例,端口号为8090,为单机模式
  • 商品服务:两个实例,端口号分别为8011和8012,为集群模式
  • 订单服务:两个实例,端口号分别为8021和8022,为集群模式
  • 支付服务:两个实例,端口号分别为8031和8032,为集群模式

网关服务

本项目的注册中心仅用于转发请求,其配置文件如下所示

在这里插入图片描述

该配置中的三个路由分别用于转发请求到商品服务、订单服务和支付服务。

商品服务

商品服务中定义的接口如下:

在这里插入图片描述

当用户调用该接口时,打印日志进行记录,然后通过feign接口调用订单服务的创建订单接口,最后返回结果,

订单服务

订单服务中定义了一个由商品服务调用的接口如下:

在这里插入图片描述

该接口由商品服务调用,其返回值0代表成功1代表失败。当传入的商品id为2的倍数时,则订单创建失败,否则通过feign接口调用支付服务的支付接口,最后返回结果。

支付服务

支付服务中定义了一个由订单服务调用的接口如下:

在这里插入图片描述

该接口由订单服务调用,其返回值0代表成功1代表失败。当传入的商品id为3的倍数时,则支付失败,否则返回成功的结果。

测试

当我们调用商品服务的接口并传入商品id为1

在这里插入图片描述

得到的结果为0,即成功

查看日志如下:

在这里插入图片描述

从日志中可以看出,此次请求的调用链如下所示

在这里插入图片描述

当我们调用商品服务的接口并传入商品id为2

在这里插入图片描述

得到的结果为1,即失败

查看日志如下:

在这里插入图片描述

从日志中可以看出,此次请求的调用链如下所示

在这里插入图片描述

当我们调用商品服务的接口并传入商品id为3

在这里插入图片描述

得到的结果为1,即失败

查看日志如下:

在这里插入图片描述

从日志中可以看出,此次请求的调用链如下所示

在这里插入图片描述

六、下载java客户端

skywalking使用java agent将客户端植入到微服务中,当项目启动时,会自动与skywalking服务端建立连接。

下面我们进入官网下载页面

在这里插入图片描述

下载成功后进行解压,解压后如下所示

在这里插入图片描述

重点关注以下文件

  • config:客户端的配置
  • logs:日志
  • skywalking-agent.jar:skywalking的客户端

七、微服务集成skywalking客户端

skywalking要求我们通过-javaagent将skywalking客户端集成到微服务中,现在我们对上面演示项目的各个服务进行集成

1. idea启动

使用idea启动项目的情况下,我们进入项目的启动配置(Run/Debug Configuration)中

以端口号为8011的商品服务为例,添加以下JVM启动参数

# skywalking客户端路径
-javaagent:E:\skywalking\skywalking-agent\skywalking-agent.jar
# 服务名称
-Dskywalking.agent.service_name=skywalking-goods

如下图所示

在这里插入图片描述

2. 命令行启动

同样以端口号为8011的商品服务为例,当我们使用命令行启动微服务的jar包时,只需要将上面的两个参数放在-jar参数的前面即可,如下所示

java \
-javaagent:/data/skywalking/skywalking-agent.jar \
-Dskywalking.agent.service_name=skywalking-goods \
-jar \
skywalking-goods.jar

3. 集成效果

启动参数添加完成后,重启项目,然后进入skywalking服务端的控制台页面

在这里插入图片描述

不难发现,我们已经把项目中的eureka服务端网关商品服务订单服务支付服务集成到skywalking了。

该页面中包含四个标签页:ServiceTopologyTraceLog

  • Service:微服务列表。类比eureka服务端的服务列表。
  • Topology:服务拓扑图
  • Trace:服务调用链路
  • Log:服务调用日志

八、skywalking客户端配置

skywalking客户端提供了多种配置方式:配置文件jvm启动参数-javaagent选项操作系统环境变量

1. 配置文件

在skywalking客户端的配置文件config/agent.config中,包含了大量客户端配置,如下截图所示。

在这里插入图片描述

服务名的配置为例,配置项为agent.service_name,对应的值将从系统环境变量中获取SW_AGENT_NAME变量的值作为服务名,冒号:后面为默认配置,即如果系统环境变量中不存在该配置,则取默认值

2. jvm启动参数

使用 skywalking. + 配置项 实现对配置文件中对应配置项的覆盖,因此优先级更高

  • 为什么要给配置项添加前缀skywalking.

    前缀可以避免冲突

例如:配置命名空间

-Dskywalking.agent.namespace=my_namespace

3. javaagent选项

格式:

多个配置项之间以逗号","分隔

-javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]

例如配置服务名命名空间

-javaagent:/path/to/skywalking-agent.jar=agent.service_name=my_service_name,agent.namespace=my_namespace

如果配置项或配置值中包含特殊符号,则应当使用单引号’'将其包含

-javaagent:/path/to/skywalking-agent.jar=agent.service_name=my_service_name,agent.ignore_suffix='.jpg,.jpeg'

4. 操作系统环境变量

服务名的配置为例,配置项为agent.service_name,对应的值将从系统环境变量中获取SW_AGENT_NAME变量的值作为服务名,冒号:后面为默认配置,即如果系统环境变量中不存在该配置,则取默认值。

以上就是skywalking的安装、以及如何与微服务项目进行集成的过程。



纸上得来终觉浅,绝知此事要躬行。

————————我是万万岁,我们下期再见————————

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

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

相关文章

Python高阶技巧 正则表达式

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。 简单来说,正则表达式就是使…

小程序学习(六):全局配置

1.全局配置文件及常用的配置项 全局配置-window 2.小程序窗口的组成部分 3.了解window节点常用的配置项 4.设置导航栏的标题 设置步骤:app.json->window->navigationBarTitleText 5.设置导航栏的背景色 背景颜色不支持red这种文字 6.设置导航栏的标题颜色 注意:navigat…

SpringBoot笔记:SpringBoot集成Dataway

文章目录 1、什么是 Dataway?2、主打场景3、技术架构4、整合SpringBoot4.1、maven 依赖4.2、初始化脚本4.3、整合 SpringBoot 5、Dataway 接口管理6、Mybatis 语法支持7、小结 1、什么是 Dataway? 官网地址:https://www.hasor.net/docs/guides/quickstart Da…

k8s kubeadm命令升级集群 从1.17升级到1.18

k8s kubeadm命令升级集群 从1.17升级到1.18 大纲 注意事项master节点执行升级命令master节点和node节点执行命令 注意事项 目标当前线上k8s集群版本是k8s1.17 想把k8s升级到1.18。注意k8s不能跨版本升级例如k8s1.17不能直接升级到k8s1.19,需要先升级到1.18才后向…

faac内存开销较大,为方便嵌入式设备使用进行优化(valgrind使用)

faac内存开销较大,为方便嵌入式设备使用进行优化,在github上提了issues但是没人理我,所以就搞一份代码自己玩吧。 基于faac_1_30版本,原工程https://github.com/knik0/faac faac内存优化: faac内存开销较大,为方便嵌入…

意外:WPS编程新工具,不用编程,excel用户:可以不用VBA啦

来来来,拓宽一下视野! 别总以为excel和WPS只能用VBA编程,也别总是想着ACCESS这些老生常谈的工具。其实对于电子表格高级用户来讲,不会VBA,不用ACCESS,也一样可以解决复杂问题或者高级应用。 尤其是WPS用户…

【腾讯云 Cloud Studio 实战训练营】CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!

CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手! 文章目录 CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!前言出现的背景一、CloudStudio 是什么?二、CloudStudio 的特点三、CloudS…

PostgreSql 锁

一、概述 在 PostgreSQL 事务中提到,多个用户访问相同数据时可能出现脏读,不可重复度,幻读,更新丢失的问题,为解决这些问题,定义了不同的隔离级别,而隔离级别的具体实现,依靠的就是数…

钉钉群消息推送

1. 添加钉钉群机器人 PC端登录(当前版本手机端无法进行推送关键词设置),群设置--> 机器人 --> webhook进行安全设置复制webhook对应的url 2. 群消息推送 钉钉群消息支持纯文本和markdown类型 2.1 调用示例源码 import com.alibaba.…

助你丝滑过度到 Vue3 组合式Api的优势新的组件 ②⑧

作者 : SYFStrive 博客首页 : HomePage 📜: VUE3~TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 👉…

2023.08.01 驱动开发day8

驱动层 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_irq.h> #include <linux/interrupt.h> #include <linux/fs.h> #include <linux/gpio.h> #include <linux/of_gpio.h>#…

如何在免费版 pycharm 中使用 github copilot (chatGPT)?

起因 在 vscode 中使用了 github copilot 以后&#xff0c;感觉这个人工智能还不错。 但 vscode 对于 python 项目调试并不是特别方便&#xff0c;所以想在 Pycharm 中也能使用同一个 github 账号&#xff0c;用上 copilot 的功能。 不需要等待&#xff0c;安装即用&#xff…

【Web 表单】与用户数据打交道-1(mdn笔记)

0. Web 表单指南 我们将介绍 Web 表单的各个方面&#xff1a;HTML 结构、样式、验证表单数据&#xff0c;以及提交数据到服务器。 基本指南 你的第一个表单 第一次创建 HTML 表单的经验&#xff0c;包括设计一个简单表单、使用正确的 HTML 元素实现它、通过 CSS 添加一些非常简…

【Spring Cloud一】微服务基本知识

系列文章目录 微服务基本知识 系列文章目录前言一、系统架构的演变1.1单体架构1.2分层架构1.3分布式架构1.4微服务架构1.5分布式、SOA、微服务的异同点 二、CAP原则三、RESTfulRESTful的核心概念&#xff1a; 四、共识算法 前言 在实际项目开发过程中&#xff0c;目前负责开发…

Spring?Boot项目如何优雅实现Excel导入与导出功能

目录 背景EasyExcel 问题分析与解决Spring Boot Excel 导入与导出 依赖引入Excel 导入 基本导入功能进阶导入功能Excel 导出 Excel 导入参数校验 开启校验 校验规则定义 Bean Validation 定义校验规则ExcelValidator 接口定义校验规则校验结果接收 异常捕获接收校验结果contro…

小研究 - 主动式微服务细粒度弹性缩放算法研究(三)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放&#xff0c;忽略了能够充分利用单台服务器资源的细粒度垂直缩放&#xff0c;从而导致资源浪费。为此&#xff0c;本文设计了主动式微服务细粒度弹性缩放算法…

使用 Go 语言实现二叉搜索树

原文链接&#xff1a; 使用 Go 语言实现二叉搜索树 二叉树是一种常见并且非常重要的数据结构&#xff0c;在很多项目中都能看到二叉树的身影。 它有很多变种&#xff0c;比如红黑树&#xff0c;常被用作 std::map 和 std::set 的底层实现&#xff1b;B 树和 B 树&#xff0c;…

Total Variation loss

Total Variation loss 适合任务 图像复原、去噪等 处理的问题 图像上的一点点噪声可能就会对复原的结果产生非常大的影响&#xff0c;很多复原算法都会放大噪声。因此需要在最优化问题的模型中添加一些正则项来保持图像的光滑性&#xff0c;图片中相邻像素值的差异可以通过…

传统计算机视觉

传统计算机视觉 计算机视觉难点图像分割基于主动轮廓的图像分割基于水平集的图像分割交互式图像分割基于模型的运动分割 目标跟踪基于光流的点目标跟踪基于均值漂移的块目标跟踪基于粒子滤波的目标跟踪基于核相关滤波的目标跟踪 目标检测一般目标检测识别之特征一般目标检测识别…

18.Netty源码之ByteBuf 详解

highlight: arduino-light ByteBuf 是 Netty 的数据容器&#xff0c;所有网络通信中字节流的传输都是通过 ByteBuf 完成的。 然而 JDK NIO 包中已经提供了类似的 ByteBuffer 类&#xff0c;为什么 Netty 还要去重复造轮子呢&#xff1f;本节课我会详细地讲解 ByteBuf。 JDK NIO…