Dubbo 可观测性实践之 Metrics 功能解析

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 目前 Dubbo 3 的可观测性正在建设中,本文主要介绍 Metrics 模块基础知识与进度。

作者:姚辉


在 2018 年,Observability(即可观测性)首次被引入 IT 领域,并逐渐取代只关注系统整体可用性的传统监控。随着云原生技术的不断发展,企业从单体架构发展到分布式架构,使用容器部署拆分出来的一众微服务、与业务联系紧密,传统的监控仅适合报告系统的整体运行情况无法进行高度细化的分析与关联,于是需要将研发视角融入监控,发展具有比原有监控更广泛、更主动、更细粒度的能力,这种能力就是可观测性。


Dubbo 3 的建设规划有上云,可观测性是上云必不可少的能力,集群间根据实例可用性负载均衡、Kubernetes 弹性伸缩、建立实例健康模型等等运用场景都需要可观测性。


目前 Dubbo 3 的可观测性正在建设中,本文主要介绍 Metrics 模块基础知识与进度。


零-APM 介绍


APM全称是 application performance management,翻译过来就是应用的性能管理,主要是用来管理和监控软件系统的性能和可用性。可以保障线上服务的质量,是一个重要的服务治理工具。


如果从系统职能上分的话,APM 系统的话可以可以分为三个子系统,分别是 Metrics、Tracing 和 Logging。


Metrics 也叫指标监控,主要是负责处理一些结构化的可以聚合的一些指标数据。


Tracing 又叫链路追踪,主要是围绕单次请求进行信息处理,然后所有的数据都被绑定到系统的单个请求或者说单个事务上。


Logging 是日志监控,主要梳理一些非结构化的事件。


1.png


Metrics 结构与类型


2.png


一个 Metrics 由四部分组成,第一个是指标名称;第二个是 labels 或者说 tags 也就是标签,是一些维度数据,这些维度数据可以用来做一些过滤或者聚合查询;第三个是时间戳,就是它的时间字段;第四个就是具体的指标的一个值。


除了上述四个部分之外,还有一个非常重要的字段没有体现在数据模型里,就是这条数据的指标类型。不同的指标类型的话它是会用在不同的监控场景,同时它的一些查询和可视化的一些方式,也会有一些区别。


下面简单介绍一些常用的指标类型。


3.png


第一个是 Gague,这个类型的特点就是他是可增可减的。比如说 CPU 负载、活跃线程数、内存使用率、磁盘使用率,这些数它都是会随着时间进行波动的。它存储和展示的都是一个瞬时值。


第二个指标类型 Counter,这个类型的特点是只增不减,比如说接口请求总量,对于这个类型,一般会有几个衍生的处理,一个是可以比较两个时间点前后的一个差值,这样可以计算出这个单位时间内的请求的一个波动量。第二个就是对时间进行求导之后,就得到 QPS 这种类型的一个字段。


第三个指标类型是 Summary,主要做的是一个汇总统计,比如说平均值,分位数这样的一些指标。然后这个指标类型的话主要用于接口响应延迟这样的一个场景。因为我们平时在看接口响应延迟这个指标的时候,一般除了看它的平均值,可能还会看一些那种分位数指标。


第四个指标类型是 Historgram,它是一个柱状统计,一般是会先对指标进行一个分桶,分桶之后再去统计它的一些值。比如说我们的还是以那个接口响应延迟为例的话,它会比如说有一些那种可视化展示的话,展示它的那个柱状图。


指标收集


4.png


Dubbo 的指标体系,总共涉及三个模块,分别是指标收集、本地聚合、指标推送。


  • 指标收集:将 Dubbo 内部需要监控的指标推送至统一的 collector 中进行存储。
  • 本地聚合:指标收集获取的均为基础指标,而一些分位数指标则需通过本地聚合计算得出。
  • 指标推送:而获取指标的话有两种方式,第一种是直接访问 Dubbo 暴露的接口就可以获得 Dubbo 内部统计的指标,第二种是接入第三方服务器进行指标推送,Dubbo 会将收集和聚合后的指标通过 pull 或者push的方式推送至第三方服务器,目前只涉及 Prometheus,其中 pull 或者 push 由用户选择。 


指标收集

5.png


指标收集的目的是为了存储微服务的运行状态,相当于给微服务拍了一个快照,以及为进一步的分析(比如指标聚合)提供基础数据。


上图为 Dubbo 的架构图,本方案中指标收集的埋点位置或者说切入位置是在 provider 中通过 SPI 的方式添加一个 Filter。


这里贴了部分代码,展示了其中一部分指标收集的逻辑。


6.png


我们是通过 interfaceName、methodName、group、version 四个维度的信息作为 map 存储结构的 key ,当然这四个维度的信息最后在指标导出的时候都会转换成前面 metrics 存储结构的 labels 或者说 tags。


接下来给大家展示一个的是我们一个默认存储器的成员变量。


7.png


运用分段锁结构的 ConcurrentHashMap 来保证并发度,其中的 MethodMetric 就是前文说的四个维度信息组成的一个 class。


有一个比较重要的结构是一个 MetricsListener 的 list ,这里其实是一种生产者消费者的模式,因为默认收集器是我们默认接入的,但是如果需要收集其他指标则需要继续在此添加监听,让其他收集器监听默认收集器的状态,当默认收集器收集到了值就向监听列表推送一个事件,这样其他收集器就能收集到元信息再进一步加工处理。这里也是本地聚合实现的一个逻辑,具体细节不展示了,有兴趣的同学可以去看看 Dubbo 3.1 的代码。


本地聚合-滑动窗口与 TDigest



8.png


本地聚合主要使用滑动窗口与 TDigest,滑动窗口原理如图,假设我们初始有 6 个 bucket,每个窗口时间(即一个 bucket 在 current 指针下的停留时间)设置为2分钟,每次写入指标数据时,会将数据分别写入 6 个 bucket 内,也就是一条数据写六遍,我们会每隔两分钟移动一个 bucket 并且清除原来 bucket 内的数据,读取指标时,会读取当前 current 指向的 bucket 内的指标数据,以达到滑动窗口的效果。


滑动窗口的作用是为了能够对近期的数据做一个聚合,使得我们每次指向的 bucket 里面存储的都是从当前时间到过去一个 bucket 生命周期(即 [ now - bucketLiveTime * bucketNum, now ] 这样一个时间区间)的指标数据。其中 bucket 的生命周期受窗口时间和 bucket 数量控制,这个支持用户自定义配置。


9.png


接下来是介绍 Dubbo 分位数指标的处理,我们常说的 p99,p95 这样的指标就是分位数指标,p99 是指在 100 个请求里面,响应时延排名第 99 位的值,可以较好的反应一个服务的可用性,被称为黄金指标。


Dubbo 在计算分位数指标的时候使用了 TDigest 算法,TDigest 是一个简单,快速,精确度高,可并行化的近似百分位算法。


TDigest 使用的思想是近似算法常用的 Sketch,也就是素描,用一部分数据来刻画整体数据集的特征,就像我们日常的素描画一样,虽然和实物有差距,但是却看着和实物很像,能够展现实物的特征。


10.png


下面是 TDigest 的原理。假如有 500 个 -30 ~ 30 间的数字,可以使用概率密度函数也就是 PDF 函数表示这一数据集


11.png


该函数上的某一点的 y 值就是其 x 值在整体数据集中的出现概率,整个函数的面积相加就正好为 1 ,可以说它刻画了数据在数据集中的分布态势,也就是大家熟悉的正态分布。


有了数据集对应的 PDF 函数,数据集的百分位数也能用 PDF 函数的面积表示。如下图所示,百分位数 P75 就是面积占了 75% 时对应的 x 坐标。


12.png


PDF 函数曲线中的点都对应着数据集中的数据,当数据量较少时,我们可以使用数据集的所有点来计算该函数,但是当数据量较大时,只有通过少量数据来代替数据集的所有数据。


这里,需要将数据集进行分组,相邻的数据分为一组,用平均数和来代替这一组数。这两个数合称为质心数,然后用这个质心数来计算 PDF,这就是 TDigest 算法的核心思想。


如下图所示,质心数的平均值作为x值,个数作为 y 值,可以通过这组质心数大致绘制出这个数据集的 PDF 函数:


13.png


对应的,计算百分位数也只需要从这些质心数中找到对应的位置的质心数,它的平均值就是百分位数值。


很明显,质心数的个数值越大,表达它代表的数据越多,丢失的信息越大,也就越不精准。如这张图所示,太大的质心数丢失精准度太多,太小的质心数则有消耗内存等资源较大,达不到近似算法实时性高的效果。


14.png


所以,TDigest 在压缩比率的基础上,按照百分位数来控制各个质心数代表的数据的多少,在两侧的质心数较小,精准度更高,而在中间的质心数则较大,以此达到 P1 或 P99 的值要比 P20 更准确的效果。


指标推送之 Prometheus


指标推送的作用是为了将目前 Dubbo 提供的指标进行进一步的存储、运算和可视化,目前第三方服务器只支持 Prometheus。Prometheus 是 CNCF 开源的一个应用于应用监控的系统。主要有三个模块组成,分别是获取数据,存储数据,数据查询。


获取数据有 Pull 和 Push 两种方式,也是 Dubbo 接入的方式;存储数据 Prometheus 是用的时序数据库这里就不展开讲了;数据查询是其自定义的一套查询 IDL,可以接入 Grafana 这一类报警系统,当监控指标异常时候可以使用邮件报警或者电话报警。


15.png


目前的设计:


指标推送只有用户在设置了配置且配置 protocol 参数后才开启,若只开启指标聚合,则默认不推送指标。


  • Promehteus Pull ServiceDiscovery:启动时根据配置将本机 IP、Port、MetricsURL 推送地址信息至中间层,暴露 HTTP ServiceDiscovery 供 Prometheus 读取,配置方式如 ,其中在 Pull 模式下 address 为可选参数,若不填则需用户手动在 Prometheus 配置文件中配置地址。 


  • Prometheus Push Pushgateway:用户直接在 Dubbo 配置文件中配置 Prometheus Pushgateway 的地址即可


其中 interval 代表推送间隔


相关 Dubbo Metrics 功能我们预计会在 3.1.2 / 3.1.3 版本中正式 release 发布。


服务治理与商业化


Dubbo 3 的可观测性建设是 Dubbo 3 上云必不可少的一个环节。在 Dubbo 3 对标的商业化产品微服务引擎 MSE 中,针对 Dubbo 3 做了全方面的增强,以一种无侵入的方式增强 Dubbo 3 服务,使其具备完整的微服务治理能力。


在建设 Dubbo 可观测性的同时,我们也在结合 OpenSergo 标准构建 Dubbo 3 的完整的服务治理体系。


16.png


OpenSergo 在联合各个社区进行进一步的合作,希望通过社区来一起讨论与定义统一的服务治理标准。当前社区也在联合 bilibili、CloudWeGo 等企业、社区一起共建标准,也欢迎感兴趣的开发者、社区与企业一起加入到 OpenSergo 服务治理标准共建中。欢迎大家加入 OpenSergo 社区交流群(钉钉群)进行讨论:34826335

相关文章
|
6月前
|
人工智能 监控 算法
销售易CRM:功能与优势全解析
销售易CRM是国内领先的客户关系管理(CRM)系统,提供强大的销售管理、全方位客户管理、丰富的营销自动化工具、智能AI赋能及灵活的开放性平台。其功能涵盖线索获取、商机管理、客户画像、营销活动策划、智能预测等,支持企业高效管理客户、优化业务流程、提升销售效率和客户满意度。通过灵活的二次开发和API接口,销售易CRM可无缝集成企业现有系统,助力企业在数字化转型中实现业绩高质量增长。
|
6月前
|
弹性计算 运维 安全
优化管理与服务:操作系统控制平台的订阅功能解析
本文介绍了如何通过操作系统控制平台提升系统效率,优化资源利用。首先,通过阿里云官方平台开通服务并安装SysOM组件,体验操作系统控制平台的功能。接着,详细讲解了订阅管理功能,包括创建订阅、查看和管理ECS实例的私有YUM仓库权限。订阅私有YUM仓库能够集中管理软件包版本、提升安全性,并提供灵活的配置选项。最后总结指出,使用阿里云的订阅和私有YUM仓库功能,可以提高系统可靠性和运维效率,确保业务顺畅运行。
|
5月前
|
存储 前端开发 JavaScript
调用DeepSeek API增强版纯前端实现方案,支持文件上传和内容解析功能
本方案基于DeepSeek API增强版,提供纯前端实现的文件上传与内容解析功能。通过HTML和JavaScript,用户可选择文件并调用API完成上传及解析操作。方案支持多种文件格式(如PDF、TXT、DOCX),具备简化架构、提高响应速度和增强安全性等优势。示例代码展示了文件上传、内容解析及结果展示的完整流程,适合快速构建高效Web应用。开发者可根据需求扩展功能,满足多样化场景要求。
1899 64
|
6月前
|
人工智能 API 语音技术
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
351 31
|
6月前
|
供应链 监控 搜索推荐
反向海淘代购独立站:功能解析与搭建指南
“反向海淘”指海外消费者购买中国商品的现象,体现了中国制造的创新与强大。国产商品凭借高性价比和丰富功能,在全球市场备受欢迎。跨境电商平台的兴起为“反向海淘”提供了桥梁,而独立站因其自主权和品牌溢价能力逐渐成为趋势。一个成功的反向海淘代购独立站需具备多语言支持、多币种支付、物流跟踪、商品展示、购物车管理等功能,并通过SEO优化、社交媒体营销等手段提升运营效果。这不仅助力中国企业开拓海外市场,还推动了品牌全球化进程。
186 19
|
6月前
|
SQL 运维 监控
高效定位 Go 应用问题:Go 可观测性功能深度解析
为进一步赋能用户在复杂场景下快速定位与解决问题,我们结合近期发布的一系列全新功能,精心梳理了一套从接入到问题发现、再到问题排查与精准定位的最佳实践指南。
|
6月前
|
算法 前端开发 定位技术
地铁站内导航系统解决方案:技术架构与核心功能设计解析
本文旨在分享一套地铁站内导航系统技术方案,通过蓝牙Beacon技术与AI算法的结合,解决传统导航定位不准确、路径规划不合理等问题,提升乘客出行体验,同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文档可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~
355 1
|
6月前
|
缓存 边缘计算 安全
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
382 7
|
6月前
|
JSON 自然语言处理 前端开发
WebSocket调试工具深度对比:Postman与Apipost功能实测解析
本文深入对比了Postman与Apipost两款WebSocket调试工具。作为实时通讯系统工程师,作者在开发智能客服系统时遇到了传统工具调试复杂、文档管理不便的问题。通过引入Apipost的智能连接池、消息分组管理和自动化文档生成等功能,实现了多环境自动切换、消息分类和接口文档自动生成,极大提升了调试效率和团队协作效果。最终,使用Apipost使接口调试时间减少40%,文档维护成本降低70%,跨团队沟通效率提升50%。
|
6月前
|
人工智能 搜索推荐 数据挖掘
销售易CRM:功能与优势全解析
销售易CRM是国内领先的客户关系管理系统,提供从线索获取到订单成交的完整销售漏斗管理,涵盖销售、客户、营销管理和AI赋能等功能。其强大的销售管理功能包括线索与商机管理、销售预测等;全方位客户管理实现360度客户视图;丰富的营销自动化工具支持多渠道营销活动;智能AI技术提升销售效率和客户满意度;灵活的开放性平台满足定制化需求;现代化界面设计简洁直观,支持多设备访问;移动端功能齐全,协同工具丰富;优质的客户服务确保快速响应和技术支持。销售易CRM助力企业优化业务流程,推动销售增长。

推荐镜像

更多
  • DNS