Apache Dubbo 云原生可观测性的探索与实践

作者:宋小生 - 平安壹钱包中间件资深工程师

Dubbo3 可观测能力速览

Apache Dubbo3 在云原生可观测性方面完成重磅升级,使用 Dubbo3 最新版本,你只需要引入 dubbo-spring-boot-observability-starter 依赖,微服务集群即原生具备以下能力:

能力一:可视化查看集群、单机流量指标与健康状态

Dubbo 3.2 最新版本支持以应用、单机、单条服务等多种不同粒度观测运行状态,包括 qps、rt、线程池、错误分类统计等。

在这里插入图片描述

能力二:全链路追踪

Dubbo 3.2 最新版本通过内置链路过滤器在 RPC 请求中对链路数据进行采集,采集之后通过导出器将链路数据导出到各大厂商。

在这里插入图片描述

https://cn.dubbo.apache.org/zh-cn/overview/tasks/observability/

云原生可观测性的探索

云原生升级的挑战

高质量交付的前一部分有 DevOps 保证开发与测试的质量与效率,后有云原生保证运维部署效率与质量,但是大规模快速迭代意味着频繁变更,变更与系统运行带来的稳定性问题不能被忽视,比如宕机,网络与系统异常等,很多未知的问题难以避免,借助可观测系统来及时感知问题、高效分析异常、快速恢复系统,提前规避已知问题,深度挖掘未知问题,高效提升运维质量,可以看到建设一个完善的可观测平台对于发现已知和未知异常,提升系统的稳定性是非常必要的。

image.png

Dubbo 可观测建设目标

Dubbo 作为微服务 RPC 基础框架直接建设大而全的可观测系统与定位不符合也不是很现实,但是可以从自身出发提供更多的基础监控数据来为企业建立可观测系统提供助力,可观测性与传统单维度监控不同,更关注的是数据的关联性,通过单维度和多维度角度整体观测和分析问题,首先从流行的三大支柱指标出发,在此基础之上,Dubbo 提供多维度聚合与非聚合指标帮助用户快速发现问题与诊断问题,多维指标中进而可以通过应用、主机等标签信息关联到链路系统,链路系统提供了服务请求级别的链路性能与异常问题分析功能,Dubbo 通过提供链路门面对接各大全链路厂商,链路分析之后可以通过链路数据例如:TraceId,SpanId 自定义数据等来追踪到详细日志,详情日志中 Dubbo 侧提供了丰富的专家建议与错误码供开发与运维同学快速诊断与定位问题。

在这里插入图片描述

Dubbo 多维度指标体系

Dubbo 多维度指标体系建设中从纵向和横向两个角度来看,纵向 Dubbo 侧提供简易接入的门面外观,然后将系统中采集到的指标存储在内存指标容器中,接着根据指标类型决定是否进行聚合计算,最后将指标导出到不同的指标系统。从横向角度来看采集维度也覆盖到容易出问题的 RPC 请求链路,三大中心交互与线程资源使用情况等场景。

在这里插入图片描述

Dubbo 多维度指标体系采集哪些指标?

前面介绍了大面上的指标采集,但是 Dubbo 应该采集哪些详细的指标呢?接下来可以看到 Dubob 采集指标时参考的一些方法论。

根据谷歌 SRE 书:Google 针对大量分布式监控的经验总结提出 4 个黄金指标(延迟、流量、错误以及饱和度)可以在服务级别帮助衡量终端用户体验、服务中断、业务影响等层面的问题。

在这里插入图片描述

RED 方法(来自 Tom Wilkie),RED 方法则关注请求、实际工作以及外部视角(即来自服务消费方的视角)包含:速率、错误与持续时间。

在这里插入图片描述

USE 方法(来自 Brendan Gregg):USE 方法主要着眼于资源内部,包含:利用率、饱和度与错误。

在这里插入图片描述

Dubbo 多维度指标体系接入-导出到 QOS

多维度指标体系在 3.2 之后的版本已经发布与持续迭代中,对用户来说只需要引入一个依赖即可:

<dependency><groupId>org.apache.dubbo</groupId>   <artifactId>dubbo-spring-boot-observability-starter</artifactId>        <version>3.2.x</version>
</dependency>

依赖引入之后默认情况下一些关键指标会默认被打开,只需要在命令行访问当前服务 22222 服务端口和 metrics 路径即可获取到指标数据,其中 22222 端口是 Dubbo 提供的服务质量,健康管理端口可以用过 QOS 配置进行修改。

在这里插入图片描述

查询到的 Dubbo 指标以命名:dubbo_type_action_unit_otherfun 的格式进行展现。

当然也会有用户直接使用 SpringBoot 管理端口的情况,针对这种场景 Dubbo 侧已经做了自动适配直接使用 SpringBoot 导出普罗米修斯格式的指标数据即可,如下配置所示:

在这里插入图片描述

在访问 SpringBoot 管理端口查询指标数据时就可以看到 SpringBoot 内置的一些指标和 Dubbo 提供的一些指标一起展示给用户了。

在这里插入图片描述

Dubbo 多维度指标体系 Prometheus 查询

前面直接通过 curl 命令访问指标服务获取到的只是瞬时的指标数据,对于指标数据我们往往更需要的是时序化的向量数据,这时候就要借助普罗米修斯来进行在外部采集,存储 Dubbo 指标,对于传统应用部署在物理机和虚拟机的服务可以使用静态,基于文件或者基于自有 CMDB 系统建设的指标发现服务,当然后续也可以使用 Dubbo Admin 为指标系统提供的服务发现服务,对于部署在 K8s 中的系统来说可以直接借助 K8s 支持的服务发现,接入 Prometheus 自动采集配置如下:

在这里插入图片描述

普罗米修斯中查询指标如下所示:

在这里插入图片描述

Dubbo 多维度指标体系 Grafana 展示

普罗米修斯侧重于采集指标和存储指标等场景,在展示指标这里相对简陋,Grafana 提供了丰富的指标面板,使用 Grafana 来建立指标大盘更直观,也更容易,可以看到下面的图片中提供了多维度的筛选如应用级、实例级,接口级等场景对服务数据进行查询。在指标监控大盘中也可以看到基于前面指标方法论的一些维度指标,比如流量、请求数、延迟、错误,饱和度等。另外也可以看到一些应用于实例信息比如 Dubbo 版本分布,实例分布等。

在这里插入图片描述

Dubbo 链路追踪门面建设

Agent 用户接入简单,但是动态修改字节码的形式来提供支持,风险较大,一个代理层 agent 只做一个 Dubbo 层的链路功能似乎有点大材小用,Dubbo 定位为微服务 RPC 框架,做通用的链路门面相对更好一些,专业的事情交给专业的人做,Dubbo 通过适配各大全链路系统来让用户接入更简单。

在这里插入图片描述

Dubbo 链路追踪门面选型

业界比较通用的 OpenTelemetry 链路追踪门面更倾向于标准统一的规范,支持各大厂商,同时也是与 CNCF 孵化的项目,Micrometer 的优势在于与指标埋点所用依赖来源相同,并且在 SpringBoot3 中也默认集成用户接入更为方便,另外 Micrometer 定位为可观测门面与 Dubbo 链路系统建设的定位相符,其中也可以通过桥接的形式来桥接 OpenTelemetry。

在这里插入图片描述

Micrometer + OpenTelemetry Bridge:

在这里插入图片描述

Dubbo 链路追踪结构

Dubbo 通过内置链路过滤器在 RPC 请求中对链路数据进行采集,采集之后通过导出器将链路数据导出到各大厂商。

在这里插入图片描述

Dubbo 链路追踪接入

Dubob 链路追踪门面已经发布,需要接入链路追踪系统只需要简单的引入对应链路追踪的 starter 集成包然后进行单件的配置即可,更详细的接入手册可以参考文档和案例。 [ 1]

在这里插入图片描述

在链路追踪配置中可以配置开关,采样率,导出器等配置。

在这里插入图片描述

最后链路追踪系统往往也需要通过链路 id 与日志进行关联来分析更详细的根因,这个时候就需要提前在日志配置中增加日志 MDC 打印的配置了,如下 traceId 和 spanId 的获取。

在这里插入图片描述

Dubbo 链路追踪 Zipkin

这里是 Dubbo 接入链路追踪 Zipkin 的展示,可以看到一些接口的性能与元数据。

在这里插入图片描述

Dubbo 链路追踪 Skywalking

这里是 Dubbo 接入链路追踪 Skywalking 的展示,通过链路 id 检索到的请求级别的链路分析。

在这里插入图片描述

Dubbo 日志管理

Dubbo 日志管理异常

Dubbo 框架发展多年,功能越来越丰富, 其中包含了与三大中心的交互,客户端服务端的交互,这种内外部交互的场景更容易出现一些异常,如果遇到问题通过通过观察日志经常摸不着头脑,最后通过分析代码来定位根因又是相对头疼的事情。

在这里插入图片描述

遇到问题不知道原因:

在这里插入图片描述

Dubbo 日志管理专家建议

如果仔细观察 Dubbo3.x 新版本打印出的日志就可以看到日志中会打印一个问题帮助手册,当发现问题时候复制此链接在浏览器中打开就可以看到出现异常日志时候的专家建议,比如下图所示的问题原因排查步骤,随着 Dubbo 的发展专家建议也会越来越详细,当让这个过程要建设的更为完善就需要用户、开发者一起参与进来,Dubbo 社区非常 Open,鼓励用户、开发者一起参与进来进行建设。

在这里插入图片描述

在这里插入图片描述

Dubbo 可观测性-稳定性实践

最后就是围绕整个可观测平台来做稳定性实践了,稳定性实践中通过观测服务健康状况、排查分析系统问题、最后快速恢复系统。其中观测系统异常的情况可以通过值班人员主动观测监控大盘,也可以将异常分析告警,被动接收到告警邮件、IM、短信、电话等来及时发现问题,发现异常时可以借助指标来分析聚合与非聚合的服务信息来定位异常位置,然后通过链路追踪系统找到服务级别的异常进行分析,最后也可以根据链路信息找到详细的日志来分析异常上下文排除根因,排查的过程要借助整个观测平台以快速恢复系统为目标通过流量隔离,服务降级等策略恢复系统减少损失,事后可以借助可观测平台提供的这些持久化的信息来详细分析异常与规律来定位根因。

在这里插入图片描述

[1] 文档和案例

https://cn.dubbo.apache.org/zh-cn/overview/tasks/observability/tracing/

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

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

相关文章

无脑入门pytorch系列(四)—— scatter_

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…

musl libc ldso 动态加载研究笔记:02

前言 本篇继续研究 musl libc ldso 的动态加载过程中遇到的关键性的概念&#xff1a;到底要加载ELF 文件的哪些内容到 内存 当前如果遇到 ELF 动态加载&#xff0c;当前系统需要有【文件系统】&#xff0c;并且有较大的内存&#xff0c;因为 ELF 文件是无法直接运行的&#xf…

如何快速的合并多个PPT使之成为一个PPT?

如何快速的合并多个PPT使之成为一个PPT&#xff1f; 项目过程中&#xff0c;经常给客户汇报&#xff0c;经常做PPT&#xff0c;有时候&#xff0c;需要把之前的ppt内容整合到新的内容中&#xff0c;如何快速合并以及使用呢&#xff1f; 幻灯片&#xff08;PPT中&#xff09;点…

JMeter接口自动化测试实例—JMeter引用javaScript

Jmeter提供了JSR223 PreProcessor前置处理器&#xff0c;通过该工具融合了Java 8 Nashorn 脚本引擎&#xff0c;可以执行js脚本以便对脚本进行前置处理。其中比较典型的应用就是通过执行js脚本对前端数据进行rsa加密&#xff0c;如登录密码加密。但在这里我就简单的应用javaScr…

7.maven

1 初始Maven 1.1 什么是Maven Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 官网&#xff1a;https://maven.apache.org/ Apache 软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&…

AI工程师招募;60+开发者AI工具清单;如何用AI工具读懂插件源码;开发者出海解读;斯坦福LLM课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 一则AI工程师招募信息&#xff1a;新领域需要新技能 Vision Flow (目的涌现) 是一家基于 AGI 原生技术的创业公司&#xff0c;是全球探…

Harmony OS教程学习笔记

基础知识 1.如何修改程序启动的第一个页面&#xff1f; 不想使用创建的默认的页面&#xff0c;这时需要修改启动页面&#xff0c;修改的地方在EntryAbility文件中的onWindowStageCreate方法中。 onWindowStageCreate(windowStage: window.WindowStage) {// Main window is cr…

Java中的异常

认识异常 异常就是程序出现的问题&#xff1b; Integer.valueOf("aaaa"); 异常体系 因为写代码时经常会出现问题&#xff0c;Java的设计者们早就为我们写好了很多个异常类&#xff0c;来描述不同场景下的问题。而有些类是有共性的所以就有了异常的继承体系 Error&…

【Windows系统编程】03.远线程注入ShellCode

shellcode&#xff1a;本质上也是一段普通的代码&#xff0c;只不过特殊的编程手法&#xff0c;可以在任意环境下&#xff0c;不依赖于原有的依赖库执行。 远程线程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…

[JavaWeb]【六】web后端开发-请求响应

前言&#xff1a;请求响应 目录 一 引子 二 请求 2.1 Postman 2.1.1 安装 2.1.2 创建工作空间 2.1.3 添加接口 2.2 简单参数 2.2.1 原始方式&#xff08;不推荐&#xff09; 2.2.2 SpringBoot方式-GET(参数名与形参变量名相同) 2.2.3 SpringBoot方式-POST(参数名与形参…

苹果iOS16曝出新漏洞:飞行模式下依旧可连接网络

近日&#xff0c;网络安全研究人员发现iOS 16存在一种新的漏洞利用后持久化技术&#xff0c;即使受害者的苹果设备处于离线状态&#xff0c;也可以利用该技术悄无声息地访问该设备。 Jamf Threat Labs 的研究人员 Hu Ke 和 Nir Avraham 在与 The Hacker News 分享的一份报告中…

【C++】AVL树(平衡二叉树)

目录 一、AVL树的定义二、AVL树的作用三、AVL树的插入操作插入——平衡因子的更新插入——左单旋插入——右单旋插入——左右双旋插入——右左双旋 四、ALVL树的验证五、AVL树的性能 一、AVL树的定义 AVL树&#xff0c;全称 平衡二叉搜索&#xff08;排序&#xff09;树。 二…

广州华锐互动:3D数字孪生开发编辑器助力企业高效开发数字孪生应用

3D数字孪生开发编辑器是一种新兴的技术&#xff0c;它可以帮助企业更好地管理和维护其物联网设备。这些工具可以帮助企业实现对设备的实时监控、故障排除和优化&#xff0c;从而提高生产效率和降低成本。 数字孪生系统是一种将物理世界与数字世界相结合的技术&#xff0c;它可以…

openGauss学习笔记-43 openGauss 高级数据管理-事件触发器

文章目录 openGauss学习笔记-43 openGauss 高级数据管理-事件触发器43.1 语法格式43.2 参数说明43.3 示例 openGauss学习笔记-43 openGauss 高级数据管理-事件触发器 触发器会在指定的ddl事件发生时自动执行函数。目前事件触发器仅在PG兼容模式下可用。 43.1 语法格式 创建事…

BIO、NIO和AIO

一.引言 何为IO 涉及计算机核心(CPU和内存)与其他设备间数据迁移的过程&#xff0c;就是I/O。数据输入到计算机内存的过程即输入&#xff0c;反之输出到外部存储&#xff08;比如数据库&#xff0c;文件&#xff0c;远程主机&#xff09;的过程即输出。 I/O 描述了计算机系统…

韦东山-电子量产工具项目:页面系统

代码结构 所有代码都已通过测试跑通&#xff0c;其中代码结构如下&#xff1a; 一、include文件夹 1.1 common.h #ifndef _COMMON_H #define _COMMON_Htypedef struct Region {int iLeftUpX; //区域左上方的坐标int iLeftUpY; //区域左下方的坐标int iWidth; //区域宽度…

爬虫逆向实战(三)--天某云登录

一、数据接口分析 主页地址&#xff1a;天某云 1、抓包 通过抓包可以发现登录接口是account/login 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过“载荷”模块可以发现password、comParam_signature、comParam_seqCode是加密的 请求头是否加密&#xff1f; 无…

Lnton羚通关于PyTorch的保存和加载模型基础知识

SAVE AND LOAD THE MODEL (保存和加载模型) PyTorch 模型存储学习到的参数在内部状态字典中&#xff0c;称为 state_dict, 他们的持久化通过 torch.save 方法。 model models.shufflenet_v2_x0_5(pretrainedTrue) torch.save(model, "../../data/ShuffleNetV2_X0.5.pth…

港科夜闻|香港科大校长叶玉如教授、香港科大(广州)校长倪明选教授等两校领导共同出席香港科大(广州)首批本科新生见面会...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大校长叶玉如教授、香港科大(广州)校长倪明选教授等两校领导共同出席香港科大(广州)首批本科新生见面会。8月16日&#xff0c;香港科大(广州)首批本科新生参加了一次具有特殊意义的见面会。香港科大、香港科大(广州…

山西电力市场日前价格预测【2023-08-20】

日前价格预测 预测明日&#xff08;2023-08-20&#xff09;山西电力市场全天平均日前电价为341.71元/MWh。其中&#xff0c;最高日前电价为367.66元/MWh&#xff0c;预计出现在20: 30。最低日前电价为318.47元/MWh&#xff0c;预计出现在04: 15。 价差方向预测 1&#xff1a; 实…