【11】微服务链路追踪SkyWalking

news2024/9/23 15:22:06

1、skywalking是什么

1.1 链路追踪介绍

  • 对于一个大型的几十个、几百个微服务构成的微服务架构系统,通常会遇到下面一些问题,比如:
    • 如何串联整个调用链路,快速定位问题?
    • 如何缕清各个微服务之间的依赖关系?
    • 如何进行各个微服务接口的性能分折?
    • 如何跟踪整个业务流程的调用处理顺序?
      微服务调用链路图

1.2 skywalkig简介

  • skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。
  • skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
  • 它是一款优秀的 APM(Application Performance Management)工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。
  • 官网、下载地址、Github、中文文档

1.3 链路追踪框架对比

  • Zipkin 是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单。
  • Pinpoint 是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
  • SkyWalking 是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。
  • Cat 是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。
    链路追踪比对

1.4 Skywalking主要功能特性

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

2、 SkyWalking 环境搭建部署

架构图

  • Skywalking agent和业务系统绑定在一起,负责收集各种监控数据;
  • Skywalking oapservice是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。它通常以集群的形式存在。
  • Skywalking webapp,前端界面,用于展示数据。
  • 数据库指的是用于存储监控数据的数据库,比如mysql、elasticsearch等。

2.1 下载 SkyWalking

  • 下载
    下载
  • 目录结构:
    文件目录

2.2 搭建 SkyWalking OAP 服务

  • 启动脚本bin/startup.sh
    qidong
  • 日志信息存储在logs目录
    日志目录
  • 启动成功后,会有两个服务被启动分别是:skywalking-oap-serverskywalking-web-ui ;
  • skywalking-oap-server服务启动后会暴露11800 和 12800 两个端口,分别为收集监控数据的端口11800和接受前端请求的端口12800,修改端口可以修改config/applicaiton.yml;
  • skywalking-web-ui服务会占用 8080 端口, 修改端口可以修改webapp/webapp.yml;
    webapp.yml
    • server.port:SkyWalking UI服务端口,默认是8080;
    • collector.ribbon.listOfServers:SkyWalking OAP服务地址数组,SkyWalking UI界面的数据是通过请求SkyWalking OAP服务来获得;
  • 请求UI服务
    ui

2.3 SkyWalking中的三个概念

  • 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字;
  • 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;
  • 端点(Endpoint) :对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名;
    概念

3、SkyWalking 接入微服务

3.1 Linux环境通过jar包方式接入

  • 准备一个SpringBoot程序,打成可执行jar包,写一个shell脚本,在启动项目的Shell脚本中,通过 -javaagent 参数进行配置SkyWalking Agent来跟踪微服务;
    #!/bin/sh
    # SkyWalking Agent配置
    export SW_AGENT_NAME=springboot-skywalking-demo #Agent名字,一般使用`spring.application.name`
    export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 #配置 Collector 地址。
    export SW_AGENT_SPAN_LIMIT=2000 #配置链路的最大Span数量,默认为 300。
    export JAVA_AGENT=-javaagent:/usr/local/soft/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
    
  • 启动的日志信息:

4、Skywalking持久化跟踪数据

  • 默认使用的H2数据库存储
  • config/application.yml

4.1 基于mysql持久化

  • 修改config目录下的application.yml,使用mysql作为持久化存储的仓库
  • 修改mysql连接配置
    在这里插入图片描述
  • 编辑配置文件
storage:
  #选择使用mysql   默认使用h2,不会持久化,重启skyWalking之前的数据会丢失
  selector: ${SW_STORAGE:mysql}
  #使用mysql作为持久化存储的仓库
  mysql:
    properties:
      #数据库连接地址
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://1ocalhost:3306/swtest"}
      #用户名
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      #密码
  • 启动Skywalking,查看swtest数据库,可以看到生成了很多表。

5、 自定义SkyWalking链路追踪

  • 如果我们希望对项目中的业务方法,实现链路追踪,方便我们排查问题,可以使用如下的代码:
  • 引入依赖
    	<!-- SkyWalking 工具类 -->
    	<dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-toolkit-trace</artifactId>
        <version>8.4.0</version>
    

5.1 @Trace将方法加入追踪链路

  • 如果一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上@Trace注解即可;
  • 测试:

5.2 加入@Tags或@Tag

  • 我们还可以为追踪链路增加其他额外的信息,比如记录参数和返回信息。
  • 实现方式:在方法上增加@Tag或者@Tags。
  • @Tag 注解中 key = 方法名 、value = returnedObj 返回值 、 arg[0] 参数
    @Trace
    @Tag(key = "list", value = "returnedObj")
    public List<User> list(){
        return userMapper.list();
    }
    
    @Trace
    @Tags({@Tag(key = "param", value = "arg[0]"),
            @Tag(key = "user", value = "returnedObj")})
    public User getById(Integer id){
        return userMapper.getById(id);
    }
    


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

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

相关文章

【web】-flask-简单的计算题(不简单)

打开页面是这样的 初步思路&#xff0c;打开F12&#xff0c;查看头&#xff0c;都发现了这个表达式的base64加密字符串。编写脚本提交答案&#xff0c;发现不对&#xff1b; 无奈点开source发现源代码&#xff0c;是flask,初始化表达式&#xff0c;获取提交的表达式&#xff0…

C语言 | Leetcode C语言题解之第260题只出现一次的数字III

题目&#xff1a; 题解&#xff1a; int* singleNumber(int* nums, int numsSize, int* returnSize) {int xorsum 0;for (int i 0; i < numsSize; i) {xorsum ^ nums[i];}// 防止溢出int lsb (xorsum INT_MIN ? xorsum : xorsum & (-xorsum));int type1 0, type2…

虚拟机OP的LAN网口设置

问题&#xff1a;unraid通过虚拟机安装OP&#xff0c;然而一个网口连接路由器&#xff0c;总是无法为其他设备提供DHCP&#xff0c;导致无法使用。 一、虚拟机OP配置 二、OP内部配置 对于Lan网口&#xff0c;启用强制&#xff0c;这样可以防止OP被网口接的路由器产生冲突 三、…

安全防御:过滤技术

目录 一、URL过滤 URL过滤的方式 二、HTTP与HTTPS HTTP协议获取URL的方式 HTTP协议做控制管理的流程 HTTPS 1&#xff0c;配置SSL的解密功能 2&#xff0c;直接针对加密流量进行过滤 需求&#xff1a; 三、DNS过滤 四、内容过滤 文件过滤技术 文件过滤技术的处理流…

详解SVN与Git相比存在的不足

原文全文详见个人博客&#xff1a; 详解SVN与Git相比存在的不足截至目前&#xff0c;我们已既从整理梳理的SVN和Git在设计理念上的差异&#xff0c;也重点对二者的存储原理和分支管理理念的差异进行深入分析。这些差异也直接造成了SVN和Git在分支合并、冲突解决、历史记录管理…

Git分支管理基本原理

原文全文详见个人博客&#xff1a; Git分支管理基本原理上文已讨论过svn分支管理的基本原理&#xff0c;本文将继续探讨Git分支管理的基本原理&#xff0c;以便后续进行进一步的理解和对比&#xff1a;https://www.coderli.com/git-branch-method/【Java学习交流(982860385)】…

Git仓库拆分和Merge

1. 问题背景 我们原先有一个项目叫open-api&#xff0c;后来想要做租户独立发展&#xff0c;每个租户独立成一个项目&#xff0c;比如租户akc独立部署一个akc-open-api&#xff0c;租户yhd独立部署一个yhd-open-api&#xff0c;其中大部分代码是相同的&#xff0c;少量租户定制…

鸿蒙开发入门——声明式UI开发入门简介(1)

声明式UI特点 与常规命令式开发的区别在于主导者不同&#xff0c;命令式开发为开发者告诉计算机需要做什么&#xff0c;而声明式开发为开发者告诉计算机自己想要什么结果&#xff0c;怎么做交给预先的程序和算法&#xff0c;让计算机自行推断 声明式描述 开发者只需描述在界⾯…

《0基础》学习Python——第二十讲__网路爬虫/<3>

一、用post请求爬取网页 同样与上一节课的get强求的内容差不多&#xff0c;即将requests.get(url,headershead)代码更换成requests.post(url,headershead),其余的即打印获取的内容&#xff0c;如果content-typejson类型的&#xff0c;打印上述代码的请求&#xff0c;则用一个命…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;自从SDXL提出了长宽桶技术之后&#xff0c;彻底解决了不同长宽比的图像输入问题&#xff0c;现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…

如何根据同一行的ID利用R语言对值进行求和

需求&#xff1a;将属于同一分组的对应的值进行求和或者求平均值 #设置工作目录 > getwd() [1] "C:/Users/86150/Documents" > setwd("C:/Users/86150/Desktop/AA2024/RUF") > list.files() #读取文件 >install.packages("readxl")…

建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书

近日&#xff0c;经欧拉生态创新中心和华为技术有限公司测评&#xff0c;建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统&#xff0c;完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920&#xff08;Taisha 200&#xff09;的兼容性…

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM

SVM 技能测试:25 个 MCQ 用于测试数据科学家的 SVM(2024 年更新) 一、介绍 你可以把机器学习算法想象成一个装满斧头、剑和刀片的军械库。你有各种各样的工具,但你应该学会在正确的时间使用它们。打个比方,将“线性回归或逻辑回归”视为一把能够有效地切片和切块数据但…

uniapp vue3 上传视频组件封装

首先创建一个 components 文件在里面进行组件的创建 下面是 vvideo组件的封装 也就是图片上传组件 只是我的命名是随便起的 <template><!-- 上传视频 --><view class"up-page"><!--视频--><view class"show-box" v-for"…

纯硬件一键开关机电路的工作原理

这是一个一键开关机电路: 当按一下按键然后松开&#xff0c;MOS管导通&#xff0c;VOUT等于电源电压; 当再次按一下按键然后松开&#xff0c;MOS管关闭&#xff0c;VOUT等于0; 下面来分析一下这个电路的工作原理。上电后&#xff0c;输入电压通过R1和R2给电容充电&#xff0c;最…

MySQL通过bin-log恢复数据

MySQL通过bin-log恢复数据 1.bin-log说明2.数据恢复流程2.1 查看是否开启bin-log2.3 查看bin-log2.4 执行数据恢复操作2.5 检查数据是否恢复 1.bin-log说明 mysqldump和bin-log都可以作为MySQL数据库备份的方式&#xff1a; mysqldump 用于将整个或部分数据库导出为可执行的S…

TeraTerm 使用技巧

参考资料 自分がよく使うTeratermマクロによる自動ログインのやり方をまとめてみたよTera Term マクロでログインを自動化してみたTera Term のススメ 目录 简介一. 常用基础设置1.1 语言变更1.2 log设置 二. 小技巧2.1 指定host别名2.2 新开窗口2.3 设置粘贴多行命令时的行间…

【3D编程技巧】如何用四元数旋转矢量在相机空间进行光照计算

这里介绍一个小TIPS&#xff0c;很久没有这么有成就感了。我以前在学3D数学的时候&#xff0c;书上就有一句话&#xff0c;说你把矢量这些东西用久了&#xff0c;就应该形成一种“直觉”&#xff0c;仿佛这些东西就是你的左右手一样。而这次&#xff0c;我居然真的用“直觉”来…

基于上下文自适应可变长熵编码 CAVLC 原理详细分析

CAVLC CAVLC&#xff0c;即Context-Adaptive Variable-Length Coding&#xff0c;是一种用于视频压缩的编码技术&#xff0c;特别是在MPEG-4视频编码标准中使用。CAVLC是一种熵编码方法&#xff0c;它根据视频数据的上下文信息来调整编码长度&#xff0c;以实现更有效的数据压…

【从0到1,训练大模型,从llama3开始】

摘要: 随着大模型越来越多,大家肯定眼花缭乱。不知道选择哪个好,换句话说,不知道哪个才适合自己。 通过社长的实操:chatgpt3.5、gpt4、gpt4o、llama3、通义千问、豆包等大模型,总结是:大家都很好,都能一定程度上的帮助你。 不过怎么说呢,他们什么都懂,但是,什么都不…