45-48 微服务链路追踪组件Skywalking

news2025/1/9 5:10:31

在这里插入图片描述
skywalking是什么
分布式系统的应用程序性能监视
工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。

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

Skywalking整体架构
在这里插入图片描述整个架构分成四部分:
1、上部分Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器;
2、下部分 SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能;
3、右部分Storage:Tracing数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用较多的是ES,主要考虑是SkyWalking开发团队自己的生产环境采用ES为主;
4、左部分SkyWalking UI:负责提供控制台,查看链路等等;

SkyWalking支持三种探针:
● Agent – 基于ByteBuddy字节码增强技术实现,通过jvm的agent参数加载,并在程序启动时拦截指定的方法来收集数据。
● SDK – 程序中显式调用SkyWalking提供的SDK来收集数据,对应用有侵入。
● Service Mesh – 通过Service mesh的网络代理来收集数据。

后端(Backend)
接受探针发送过来的数据,进行度量分析,调用链分析和存储。后端主要分为两部分:
● OAP(Observability Analysis Platform)- 进行度量分析和调用链分析的后端平台,并支持将数据存储到各种数据库中,如:ElasticSearch,MySQL,InfluxDB等。
● OAL(Observability Analysis Language)- 用来进行度量分析的DSL,类似于SQL,用于查询度量分析结果和警报

SkyWalking 环境搭建部署
在这里插入图片描述

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

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

Skywalking跨多个微服务跟踪
Skywalking跨多个微服务跟踪,只需要每个微服务启动时添加javaagent参数即可。

Skywalking告警通知
skywalking告警的核心由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中,告警规则的定义分为三部分:
1、告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件;
2、网络钩子(Webhook}:当警告触发时,哪些服务终端需要被通知;
3、gRPC钩子:远程gRPC方法的主机和端口,告警触发后调用;
为了方便,skywalking发行版中提供了默认的alarm-setting.yml文件,包括一些规则,每个规则有英文注释,可以根据注释得知每个规则的作用:

  • 在最近10分钟的3分钟内服务平均响应时间超过1000ms
  • 最近10分钟内,服务成功率在2分钟内低于80%
  • 服务实例的响应时间在过去10分钟的2分钟内超过1000ms
  • 数据库访问{name}的响应时间在过去10分钟的2分钟内超过1000ms
    只要我们的服务请求符合alarm-setting.yml文件中的某一条规则就会触发告警。

Skywalking集群部署
Skywalking集群是将skywalking oap作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalking oap在运行,就能进行跟踪。
搭建一个skywalking oap集群需要:
(1)至少一个Nacos(也可以把nacos集群)
(2)至少一个ElasticSearch(也可以把es集群)
(3)至少2个skywalking oap服务;
(4)至少1个UI(UI也可以集群多个,用Nginx代理统一入口)

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

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

相关文章

RabbitMq之实现基于插件的延迟队列

死信队列通过设置延迟时间TTL能实现延迟队列的效果,但是 由于队列先入先出的特性, 如果队列头的消息过期时间很长, 后面的消息过期时间很短, 会导致后面的消息过期后不能及时被消费掉 基于死信队列的缺点,基于插件实现的延迟队列就很好地解决了这个问题。…

MySQL的事务总结(事务特性,隔离级别,脏读,不可重复读,幻读,常见问题)

MySQL的事务总结(事务四大特性,隔离级别,脏读,幻读) MYSQL官网:https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html 1、事务(transaction)的概念 事务 是一个不可再分的最小单元,事…

Git (2) :Git练习

一.首先有个问题 ? 在进行git练习前,有个问题需要提下。。。。 csdn无法登录了。 查了一下资料,是因为CSDN服务器的各地相应速度不一样,辽宁的响应是超时的,所以通过在hosts文件中指定域名http://csdnimg.cn的服务器…

音视频开发解答——门槛高,怎么样入门?知识清单一览

前言 在程序员行业中,音视频开发领域许多人接触后都觉得门槛偏高;不知道如何开始学起,网上资料很少。 看到这个问题作为行业老人,我就来说说音视频有哪些学习路线与难点? 音视频开发 音视频流媒体开发,工…

从零手写Spring(一):创建简单Bean容器

工作的前面三年,虽然一直在使用Spring,但对它却不甚了解,内心充满无数的疑问:为什么配置xml中bean就可以使用它?我的对象具体存在于哪里?为什么我的对象是单例模式? 每逢遇到面试问Spring的核…

Java---微服务---Sentinel规则持久化

Sentinel 规则持久化 一、修改微服务 修改微服务&#xff0c;让其监听Nacos中的sentinel规则配置。 具体步骤如下&#xff1a; 1.引入依赖 在order-service中引入sentinel监听nacos的依赖&#xff1a; <dependency><groupId>com.alibaba.csp</groupId>…

DPU02— USB 转 UART 桥接芯片

DPU02是一个高度集成的USB转UART的桥接控制器&#xff0c;该产品提供了一个简单的解决方案&#xff0c;可将RS-232设计更新为USB设计&#xff0c;并简化PCB组件空间。该DPU02包括了一个USB 2.0全速功能控制器、USB收发器、振荡器、EEPROM和带有完整调制解调控制信号的异步串行数…

suricata匹配从入门到精通(四)----编译lua

年前有粉丝私信我&#xff0c;想让我做一期lua脚本。作为一个宠粉的博主&#xff0c;那必须给予回应。suricata结合lua可以达到提升工作效率的作用。0x00 编译开启luna 支持&#xff1a;yum install luarocks &#xff08;不确定是否有用&#xff09;手动下载安装&#xff1a; …

Ubantu 16.04更新python版本(3.5 -> 3.9)【附:win10安装pypcap库解决办法】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、下载安装二、软连接三、下载pypcap库前言 不知道Pycharm抽什么风下不来pypcap库 百度上有回答说windows不兼容 还说的有理有据 于是只能重新捡起来ubantu了…

【手写 Promise 源码】第十二篇 - Promise.race 的实现

一&#xff0c;前言 上一篇&#xff0c;主要实现 Promise 的核心静态 API&#xff08;类方法&#xff09;&#xff1a;Promise.all&#xff0c;主要涉及以下几个点&#xff1a; 测试原生 Promise.all 的使用&#xff1b;Promise.all 的功能与特性分析&#xff1b;Promise.all…

什么是3D点云数据?该如何标注它?| 数据标注

自动驾驶汽车严重依赖输入数据来做出驾驶决策。一般来讲&#xff0c;数据越详细&#xff0c;车辆做出的决策就越好车辆行驶的也就更安全。虽然现代相机可以捕获非常详细的数据表示&#xff0c;但输出仍然是2D的&#xff0c;它限制了我们可以提供给操作车辆的神经网络的信息。相…

Java 技术知识点汇总

背景 面向百度编程&#xff0c;基本能解决大部分的问题。然而&#xff0c;技术用的熟练&#xff0c;时间久了却容易遗忘背后的技术思想&#xff0c;倒成了妥妥的搬运工了。 所以&#xff0c;偶尔针对用的技术&#xff0c;发几个灵魂拷问&#xff0c;也是很有必要的&#xff0…

Linux 软件管理 YUM管理工具 配置本地YUM源

概念引入 &#xff1a; # 首先提出一个问题&#xff0c;我们在 Linux 操作系统中是如何 安装软件的 &#xff1f;&#xff1f; >>> 在 Linux 系统中&#xff0c;安装软件是有三种方式 >>> 第一种 &#xff1a; RPM 管理工具 第二种 &#xff1a; YUM 管理工…

11、矩阵的分解

目录 一、对称正定矩阵的Cholesky分解 二、一般方阵的高斯消去法分解 三、矩形矩阵的正交分解 四、舒尔分解 矩阵分解是把一个矩阵分解成几个“较简单”的矩阵连乘的形式。在MATLAB中矩阵分解的相关函数有&#xff1a; 在MATLAB中&#xff0c;线性方程组的求解主要基于4种基…

剑指 Offer 第15天 搜索与回溯算法(中等)

目录 剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 36. 二叉搜索树与双向链表 剑指 Offer 54. 二叉搜索树的第k大节点 剑指 Offer 34. 二叉树中和为某一值的路径 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径…

【懒狗福音】设置Bios电源自启实现远程办公

目录前言正文需求分析开始实现需求1需求2总结前言 今年寒假升级了下家里台式机的配置&#xff0c;已经很能满足我的生产力需求。 尽管我是按着MATX主机的方向配的&#xff0c;选择的机箱也是净重较轻的铝合金材质&#xff0c;机身自带提手也还算便捷。 但是装配完毕后它的整…

前端开发:JS中数组常用方法汇总

前言 在前端开发中关于数组的使用想必前端开发者并不陌生&#xff0c;尤其是在处理业务逻辑的时候&#xff0c;从后端获取的数据类型中数组类型基本占到70%的比例&#xff0c;所以与其说是处理数据&#xff0c;不如说是处理数组&#xff0c;虽然说的有点夸张&#xff0c;前端实…

vue文件导出/下载

const blob new Blob([res.data]);const elink document.createElement(a);elink.download 导出数据.xlsx;elink.style.display none;elink.href URL.createObjectURL(blob);document.body.appendChild(elink);elink.click();URL.revokeObjectURL(elink.href);document.bo…

使用Coding管理项目代码记录

直接开门见山 一、创建项目 进入coding登录后&#xff0c;找到项目菜单&#xff0c;然后点击创建项目 二、创建代码仓库 进入项目中&#xff0c;针对不同需要创建代码仓库。大项目或者前后端分离分开开发的可以创建不同的代码仓库。 三、创建代码仓库与本地关联 项目管…

Java岗面试题--Java基础(日积月累,每日三题)

目录面试题一&#xff1a;JDK、JRE、JVM之间的区别面试题二&#xff1a;hashCode()与equals()之间的关系追问&#xff1a;为什么重写 equals() 就一定要重写 hashCode() 方法&#xff1f;面试题三&#xff1a;String、StringBuffer、StringBuilder的区别追问一&#xff1a;Stri…