Dubbo Monitor 分析

dubbo解析-详解监控Monitor的实现原理 DubboMonitor的作用总起来说是收集10项统计信息,然后使用定时任务将信息发送给监控中心。 dubbo只提供了DubboMonitor实现,监控中心必须使用dubbo协议。如果收集的信息不符合要求,需要重新实现MonitorFactory和Monitor接口,并且在配置参数dubbo.monitor.address中指定协议。 本文详细介绍DubboMonitor的创建以及send()、collect()方法的作用。 阅读详情

DubboRCP调用次数和调用时间的监控,以 Statistics 为中心,扩展接口为 MonitorFactory、Monitor、MonitorService.

 

 

 

MonitorService 主要提供两个接口,收集和查找监控数据.

/**

     * Collect monitor data

     * 1. support invocation count: count://host/interface?application=foo&method=foo&provider=10.20.153.11:20880&success=12&failure=2&elapsed=135423423

     * 1.1 host,application,interface,group,version,method: record source host/application/interface/method

     * 1.2 add provider address parameter if it's data sent from consumer, otherwise, add source consumer's address in parameters

     * 1.3 success,failure,elapsed: record success count, failure count, and total cost for success invocations, average cost (total cost/success calls)

     *

     * @param statistics

     */

    void collect(URL statistics);





    /**

     * Lookup monitor data

     * 1. support lookup by day: count://host/interface?application=foo&method=foo&side=provider&view=chart&date=2012-07-03

     * 1.1 host,application,interface,group,version,method: query criteria for looking up by host, application, interface, method. When one criterion is not present, it means ALL will be accepted, but 0.0.0.0 is ALL for host

     * 1.2 side=consumer,provider: decide the data from which side, both provider and consumer are returned by default

     * 1.3 default value is view=summary, to return the summarized data for the whole day. view=chart will return the URL address showing the whole day trend which is convenient for embedding in other web page

     * 1.4 date=2012-07-03: specify the date to collect the data, today is the default value

     *

     * @param query

     * @return statistics

     */

    List<URL> lookup(URL query);

 

Monitor 接口继承 Node 和 MonitorService. 也就是说是以 Monitor 提供对外服务.

 

MonitorFactory 创建 Monitor 的工厂.

 

BuiltinServiceDetector 加载内置服务,例如 EchoService、GenericService、MetricsService、MonitorService

 

AbstractMonitorFactory 创建 Monitor 的工厂. 抽象了 createMonitor 方法.

protected abstract Monitor createMonitor(URL url);

 

MonitorFilter 会按照 MonitorSerivce 中方法定义的格式,将调用情况封装成 url. 它作用于服务端和客户端.

1.在 invoke 方法中 concurrent + 1

2.在 onResponse 中 concurrent - 1,上报成功

3.在 onError 中 concurrent - 1,上报失败

4.url:count://host:port/serviceName/methodName?application=xxx&interface=xxx&method=xxx&provider=xxx:yyy&failure=xxx&success=xxx&elapsed=xxx&concurrent=xxx&input=xxx&output=xxx&group=xxx&version=xxx

new URL(COUNT_PROTOCOL, NetUtils.getLocalHost(), localPort, service + PATH_SEPARATOR + method, MonitorService.APPLICATION, application, MonitorService.INTERFACE, service, MonitorService.METHOD, method, remoteKey, remoteValue, error ? MonitorService.FAILURE : MonitorService.SUCCESS, "1", MonitorService.ELAPSED, String.valueOf(elapsed), MonitorService.CONCURRENT, String.valueOf(concurrent), INPUT_KEY, input, OUTPUT_KEY, output, GROUP_KEY, group, VERSION_KEY, version);

DubboMonitor 会将 URL 封装成 Statistics 对象.

看了上面的 url,是否可以做一些删减了?比如前面部分的 serviceName/methodName 是否必须?

 

Statistics(url、application、service、method、group、version、server、client) 为统计信息. 那么它专注那些信息了?

1.url

2.application

3.service

4.method

5.group

6.version

7.server

8.client

 

public class Statistics implements Serializable {

 

    private static final long serialVersionUID = -6921183057683641441L;

 

    private URL url;

 

    private String application;

 

    private String service;

 

    private String method;

 

    private String group;

 

    private String version;

 

    private String client;

 

    private String server;

 

    public Statistics(URL url) {

        this.url = url;

        this.application = url.getParameter(MonitorService.APPLICATION);

        this.service = url.getParameter(MonitorService.INTERFACE);

        this.method = url.getParameter(MonitorService.METHOD);

        this.group = url.getParameter(MonitorService.GROUP);

        this.version = url.getParameter(MonitorService.VERSION);

        this.client = url.getParameter(MonitorService.CONSUMER, url.getAddress());

        this.server = url.getParameter(MonitorService.PROVIDER, url.getAddress());

    }

}

 

 

DubboMonitor 实现 Monitor 接口,每隔 60s 上报一次. 主要是收集和查找监控数据.

 

update[0] :调用成功的次数

update[1] :调用失败的次数

update[2] :总调用流量(请求包的总大小)。

update[3] :总响应流量(响应包的总大小)。

update[4] :总响应时长(总服务调用开销)。

update[5] :一次收集周期的平均TPS。

update[6] :最大请求包大小。

update[7] :最大响应包大小。

update[8] :最大响应时间。

update[9] :最大TPS。

 

 

 

DubboMonitorFactory(protocol、proxyFactory) 继承 AbstractMonitorFactory 接口,创建 DubboMonitor 的工厂.

 

private Protocol protocol;

 

 

    private ProxyFactory proxyFactory;

 

 

MetricsFilter 实现 Filter 接口,待定。

 

 

Dubbo monitor 监控信息上报到那了?

 

流程是咋样的?

 

从网上 copy 了下:

 

dubbo-monitor-simple

基本用法

  • 启动com.alibaba.dubbo.monitor.simple.MonitorStarter#main

  • 需要进行监控的服务,在xml中配置<dubbo:monitor protocol="registry"/>

  • 打开监控页面http://localhost:8080可以看到服务调用相关的统计

实现原理

dubbo-monitor-simple

  • dubbo-monitor-simple启动的时候,发布服务:com.alibaba.dubbo.monitor.MonitorService(实现类:com.alibaba.dubbo.monitor.simple.SimpleMonitorService),只实现了collect方法,将RPC调用过来的URL存到queue里面

  • com.alibaba.dubbo.monitor.simple.SimpleMonitorService启动了两个线程,分别执行write和draw方法,write从queue里面取出URL进行统计分析,结果写文件,draw方法把这些结果画成折线图,存本地图片文件

  • com.alibaba.dubbo.monitor.simple.pages.ChartsPageHandler和com.alibaba.dubbo.monitor.simple.pages.StatisticsPageHandler负责在页面上渲染展示这些数据

Dubbo应用

  • Dubbo服务在配置了<dubbo:monitor protocol="registry"/>标签后,调用经过com.alibaba.dubbo.monitor.support.MonitorFilter时,会进行结果收集操作。

  • 最终在调用到com.alibaba.dubbo.monitor.dubbo.DubboMonitor#collect,该方法将调用过程中的统计信息存放在statisticsMap中。并且,有另一个线程定期(默认为60秒)调用dubbo-monitor-simple暴露的com.alibaba.dubbo.monitor.MonitorService服务,将这些信息发送给monitor。

Dubbo-montitor-simple实现的过程借助了dubbo服务调用:Monitor端暴露服务,Dubbo应用通过配置去消费这些服务,消费的过程就是自身服务数据上报的过程。

 

Dubbo-monitor-simple的代码在本项目的master分支

 

通过摘抄自 wiki 的描述,我们能很清晰看到 dubbo 的服务监控是如何做的.

 

1.服务在被调用之前,进过 MonitorFilter,在 MonitorFilter 中获取 DubboMonitor 完成监控数据的收集.

2.在 DubboMonitorFactory 中完成 MonitorService 服务的引用. Protocol 得到 Invoker,proxyFactory 完成透明化调用.

        Invoker<MonitorService> monitorInvoker = protocol.refer(MonitorService.class, urlBuilder.build());

        MonitorService monitorService = proxyFactory.getProxy(monitorInvoker);

3.在 DubboMonitor 中的 send 方法中,完成每个 60s 上报一次监控数据.

4.也就是说 dubbo 的服务监控,也是通过 dubbo 服务,将服务端和消费端的调用数据自动上报到 dubbo-monitor-simple 应用服务.

 

dubbo 接入 trace 原理:https://segmentfault.com/a/1190000018515411

 

 

参考:

① https://blog.youkuaiyun.com/prestigeding/article/details/82254649

② https://blog.youkuaiyun.com/weixin_38308374/article/details/106157243

     http://dubbo.apache.org/zh/docs/v2.7/user/simple-monitor/

     https://github.com/apache/dubbo-admin/wiki/dubbo-monitor-simple

 

Dubbo基础及监控平台安装部署 目录 1、Dubbo背景 2、Dubbo基础概念 2.1 架构图 2.2 Dubbo特性 3、Dubbo入门示例 3.1 基本依赖 3.2 服务提供者 3.3 服务消费者 3.4 纯手工API实现(了解) 4、Dubbo常用功能 4.1 启动时检查 4.2 直连提供者 4.3 只订阅 4.4 只注册 4.5 静态服务 4.6 多协议 4.7 多注册中心 4.8 服务分组 4.9 多版本 4.10 分组聚合 4.11 结果缓存 4.12 回声测试 4.13 . 阅读详情

相关推荐

全面解读Dubbo Monitor:监控与优化Java服务框架

Apache Dubbo是阿里巴巴开源的一款高性能Java RPC框架,诞生于2011年,并迅速成为业界主流的分布式服务框架之一。它支持多种通信协议,便于企业快速构建和部署分布式应用。监控系统对于分布式服务架构来说,至关重要。它不仅能够提供实时的服务健康状况和性能指标,而且在问题发生时能快速定位问题并采取相应措施。监控系统确保服务的高可用性、稳定性和可靠性,对业务的连续性和用户体验有着深远的影响。

weixin_42300144的博客 1002

Dubbo:搭建监控中心(dubbo-monitor-simple)

Dubbo-Monitor介绍 Dubbo-Monitor主要用来统计服务的调用次数和调用时间,服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心,监控中心则使用数据绘制图表来显示。 Dubbo-Monitor挂掉不会影响到Consumer和Provider之间的调用,所以用于生产环境不会有风险。   配置好了之后可以结合admin管理后台使用,可以清...

琦彦 1万+

dubbo-monitor-simple-2.5.3.zip

dubbo-monitor-simple-2.5.3-assembly.tar.gz dubbo的monitor监控中心安装包,2.5.3版本

Dubbo Monitor 实现原理?

1. 数据收集: Dubbo Monitor 通过在 Dubbo 的核心逻辑中插入监控代码,收集各种服务调用的信息。3. 数据展示: 监控中心会接收、存储和展示收集到的监控数据。Dubbo Monitor 的实现原理涉及到数据的收集、传输和展示三个关键步骤,通过在 Dubbo 框架中集成监控代码,能够实时监控 Dubbo 服务的运行状态,有助于系统的性能优化和故障排查。Dubbo Monitor 是 Dubbo 框架提供的一个监控功能,用于收集和展示 Dubbo 服务的运行状态、性能指标和调用情况。

NZC2237的博客 761

①Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网

MS-A1-50X1系列作为MODBUS TCP通信的服务器进行动作。可通过MODBUS TCP 通信,将 MS-A1-50X1 系列产品通过 RS485 采集的仪器仪表之类的值作为通信数 据输出到 PLC,上位机等。

2401_89571741的博客 1398

海康威视HiTools实战:5分钟搞定工业镜头选型(附避坑指南)

本文详细解析了海康威视HiTools在工业镜头选型中的应用,通过五步操作流程帮助用户快速匹配适合的镜头型号。文章深入探讨了工业视觉系统的核心参数,包括焦距、视野、景深和畸变控制,并提供了光源搭配和系统集成的实战指南,助力提升机器视觉检测精度与效率。

u0v1w2x3的博客 1056

dubbo monitor 原理分析

文章目录开启dubbo monitor原理分析开启dubbo monitor 监控中心配置。对应的配置类: org.apache.dubbo.config.MonitorConfig 开启有两种方法, 2. 通过注册中心发现服务 直连监控中心的服务 <dubbo:monitor address="dubbo//127.0.0.1:18109" /> 通过注册中心 <dubbo:monitor protocol="registry"/> 原理分析 <dubbo:

Emine 1918

EtherCAT FOE从站开发实战:SSC工具包实现固件在线升级与文件传输

EtherCAT从站开发中,固件在线升级与文件传输是常见需求。FOE(File Access over EtherCAT)作为邮箱通信协议,在实时总线上提供可靠的文件读写通道,与PDO、DC同步共存。其原理基于SM邮箱和状态机,通过SSC工具包可快速启用。技术价值在于无需拆机即可更新固件、导出日志,提升产线效率。应用场景包括伺服驱动器、IO模块等从站的固件升级与参数配置。本文深入讲解从站侧FOE读写实现、主站调用及工程化建议,助力嵌入式工程师高效开发。

weixin_29169899的博客 127

Dubbo monitor模块分析

Monitor功能模块的逻辑在MonitorFilter类中,通过Dubbo的SPI的activate机制   @Activate(group = {Constants.PROVIDER, Constants.CONSUMER}) public class MonitorFilter implements Filter 服务提供者和消费者都会激活这个filter,invoke方法内部会调...

金溪的博客 1390

ASPICE(Automotive SPICE)流程落地,研发管理工具自研,如何从量化数据体现研发效率提升的

摘要: ASPICE流程显著提升研发效率,主要体现在质量、成本和时间三个维度。关键量化指标包括:缺陷率降低30%-60%,维护工作量减少28%,研发周期缩短10%-20%,需求变更率降低58%,代码评审效率提升300%。初期开发成本虽增加9%,但长期回报率高。核心方法包括缺陷预防前移、需求精准管理和流程标准化与自动化。建立量化度量体系需覆盖缺陷密度、需求稳定性、进度偏差等指标,并依托工具链支持数据收集。实施ASPICE是短期投入换取长期质量提升和成本优化的高效投资。

汽车软件开发 183

[EdgeAI] NXP eIQ 机器学习Toolkit (一):准备篇

eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。............

HowieXue 薛永浩的博客 1万+

dubbo源码分析之服务监控monitor-18

在分布式服务当中监控服务的各项指标至关重要,而 dubbo 也提供了一个简单的监控中心(Simple Monito)。Simple Monitor挂掉不会影响到Consumer和Provider之间的调用,所以用于生产环境不会有风险。 并且配置好了之后可以结合 admin 管理后台使用,可以清晰的看到服务的访问记录、成功次数、失败次数等….. Simple Monitor 采用磁盘存储统计信息,...

Jack博客 997

数据挖掘实战-基于情感分析+网络语义分析+LDA主题分析对大唐不夜城用户评论进行文本分析

本研究基于去哪儿网和携程网的1888条大唐不夜城游客评论数据,运用Python进行文本分析。通过情感分析发现游客评价以积极为主(占比约70%),中性占20%,消极占10%。采用ROSTCM6软件进行社会网络语义分析,识别不同情绪下的高频词汇。使用LDA主题模型将评论划分为3个主题(夜景、表演、美食),并分析主题强度随时间变化趋势。实验包含数据采集、预处理、情感分析、语义网络分析和LDA建模等完整流程,为景区管理优化提供数据支持。源代码涵盖爬虫、数据处理和可视化分析的全套实现。

m0_64336780的博客 1万+

dubbo monitor simple 监控原理分析

监控机制: 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。监控中心负责统计各服务调用次数,调用时间等。 监控元数据存储目录结构: --dubbo.jetty.directory ----statistics ------day --------interface ----------method ------------...

weixin_34247155的博客 192

【深度学习新浪潮】Qwen门控注意力斩获NeurIPS 2025最佳论文!技术解析与代码实现

Qwen团队的门控注意力机制获得NeurIPS 2025最佳论文,不仅是中国AI研究的重大突破,更是大模型架构创新的重要里程碑。这项研究证明,通过巧妙的架构设计,可以在不显著增加计算成本的前提下,大幅提升模型性能。正如论文所展示的,用一个极其简单的改动,同时解决了Transformer架构中的多个核心问题,这正是优秀研究的价值所在。该技术已成功应用于Qwen3大模型,为通义千问系列产品的性能提升提供了坚实的技术支撑。轻量化大模型设计多模态统一架构专用领域大模型优化边缘计算场景部署。

专注:太空算力、AI infra、异构调度、大模型成本工程 569

Tableau学习教程(万字保姆级教程)​​​​​​

​Tableau学习教程(保姆级教材,学不会私信留言来找我) 从BI系统开发的角度来学习tableau工具,更学会报表开发的流程 内含学习使用数据源,tableau打包工作簿,可直接提取使用 ​...

小菜菜的博客 6万+

俯瞰Dubbo全局,阅读源码前必须掌握这些!!

写在前面 在上一篇《冰河开始对Dubbo下手了!》一文中,我们重点介绍了为何要学习Dubbo,而且还是要深入理解Dubbo的原理和核心源码。既然是要写深度解析Dubbo源码的系列专题,我们首先要做的就是搭建一套Dubbo的源码环境,正所谓“工欲善其事,必先利其器”。但是,为了更好的理解Dubbo,我将本文重点分成三个部分:Dubbo中的核心角色、搭建Dubbo源码环境、Dubbo核心模块说明、运行Dubbo的示例程序 四个部分。说干就干,上重点。 注:本系列专题,我是基于Dubbo 2.7.8版本进行源码分

qq_40848737的博客 151

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Forbid consumer 10.100.8.14 access service com.alibaba.dubbo.monitor.MonitorService解决办法

网上有很多文章分析这个错误的原因,甚至贴出源码,结论是缺少服务提供者。我这里也复现了这样的问题。2018-04-28 11:03:58,806 (186601 ms) ERROR [DubboMonitorSendTimer-thread-2] com.alibaba.dubbo.monitor.dubbo. DubboMonitor :  [DUBBO] Unexpected error occ...

feinifi的博客 9287

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

理论:第十二章:Dubbo的运行原理,支持什么协议,与SpringCloud相比它为什么效率要高一些,Zookeeper底层原理

Dubbo 简单的介绍一下Dubbo?(Dubbo是什么) dubbo就是个服务调用的东东。 为什么怎么说呢? 因为Dubbo是由阿里开源的一个RPC分布式框架 那么RPC是什么呢? 就是不同的应用部署到不同的服务器上,应用之间想要调用没有办法直接调用,因为不在一个内存空间,需要通过网络通讯来调用,或者传达调用的数据。而且RPC会将远程调用的细节隐藏起来,让调用远程服务像调用本地服务一样简单。 dubbo有哪些组件? 紫色虚线:在Dubbo启动时完成的功能  蓝青色的线:都是程序运.

我是Java程序员廖志伟,感谢朋友们的支持! 4886

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

DUBBO本地搭建及小案例

DUBBO本地搭建及小案例 2014-12-26 16:51 27818人阅读 评论(7) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载。 DUBBO的介绍部分我这里就不介绍了,大家可参考官方文档。 DUBBO的注册中心安装 DUBBO的注册中心支持好几种,公司用到zookeeper注册中心,所以我这边只说明zookeep

gaoqiao1988的专栏 341

添加dubbo监控

添加dubbo监控

fangfengzhen115的专栏 2560

dubbo原理整理(菜鸟笔记)

dubbo的框架 config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类 proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy为中心,扩展接口为 ProxyFactory registry 注册中...

Zohar的博客 262

dubbo 协议_北京尚学堂卓越班252天[第113天]—Dubbo

Dubbo 架构图的执行流程Dubbo 执行流程 0 start: 启动 Spring 容器时,自动启动 Dubbo 的 Provider 1 register: Dubbo 的 Provider 在启动后自动会去注册中心注册内容.注册的内容包括: 1.1 Provider 的 IP 1.2 Provider 的端口. 1.3 Provider 对外提供的接口列表.哪些方法.哪些接口类 1.4 D...

weixin_32159771的博客 87

中dubbo所需要的依赖_Dubbo介绍、dubbo架构图、dubbo运行和执行流程、dubbo支持的协议以及支持的注册中心...

第67次(Dubbo) 学习主题:Dubbo学习目标:掌握Dubbo的作用,理解Dubbo的架构图掌握Dubbo支持的协议以及支持的注册中心1. Dubbo介绍1.1 什么是Dubbo?Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架, 使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。 Dubbo 框架,是基于容器 运行的.。容器是 Sprin...

weixin_39636099的博客 219

1-Dubbo初学-框架

Dubbo 1、dubbo文件核心目录 1.1、dubbo-common ​ Dubbo通用模块,定义了业务无关的工具类例如io处理、日志处理、配置处理、类处理等等操作,以及对于线程池的扩展,二进制编码处理,class编译处理,json数据处理,数据持久化接口处理等等。 1.2、dubbo-rpc-api ​ 分布式服务调用框架RPC的核心基本实现,可以看到其中提供了很多的RPC抽象类、接口和实现类,包括服务发布,服务调用,远程调用,RPC调用网络协议,RPC条用监听和过滤器等功能。提供了默认的基于Dubb

qq_35251212的博客 1696

dubbo服务RpcException异常

....Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2018-12-26 09:37:31.512, end time: 2018-12-26 09:37:51.513, client elapsed: ...

u014594604的博客 5212
上一篇: JVM参数优化及OOM故障分析步骤
下一篇: Kafka 索引设计
^一剪梅^
博客等级 码龄12年 4粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值