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

基于Cadence IC617的共源级放大器设计:从直流到交流的virtuoso仿真实践

本文详细介绍了使用Cadence IC617的Virtuoso平台进行共源级放大器设计的完整仿真流程。从电路图绘制、直流工作点分析,到负载电阻RD的参数扫描及其对增益和带宽的影响,再到交流小信号频率响应仿真,提供了从理论到实践的全面指导,帮助初学者掌握模拟集成电路设计的核心仿真技能。

jj890的博客 479

svn 分支(branch)和标签(tag)管理

svn的分支管理

caohongxing的博客 3万+

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

Hifiasm参数调优实战:当N50不理想时的7个排查方向与解决方案

本文详细解析了Hifiasm参数调优实战,针对基因组组装中N50不理想的7个排查方向与解决方案。通过调整--hom-cov、-D、-N等核心参数,结合HiFi数据和参考基因组分析,有效提升组装质量。文章以猪毛菜基因组为例,展示了从2.1MB到4.3MB的N50优化过程,为生物信息学研究者提供实用指南。

weixin_30642561的博客 425

Dubbo monitor模块分析

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

金溪的博客 1390

【STM32】STM32 CANFD外设的几种消息接收过滤模式

在控制器区域网络(CAN)系统中,正确配置消息过滤器对于有效管理网络通信至关重要。特别是在使用Flexible Data-rate Controller Area Network(FDCAN)时,选择合适的过滤器类型可以大大提高网络效率和消息处理速度。

林愿留的博客 6226

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2838

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

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

Jack博客 997

科研绘图系列:R语言circos图(circos plot)

科研绘图系列:R语言circos图(circos plot)

专注生信领域 3432

dubbo monitor simple 监控原理分析

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

weixin_34247155的博客 192

微信小程序 - [wxapplib]] backgroundfetch privacy fail {“errno”:101,“errMsg”:“private_getBackgroundFetchDa

微信小程序报错之backgroundfetch privacy fail,微信小程序报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {“errno“:101,怎么解决?问题出现:调用wx.chooseMessageFile报错(开发者工具中正常)用户隐私协议中未声明小程序使用此功能,安卓真机调试报错:backgroundfetch privacy fail ,怎么解决?微信小程序[wxapplib]] backgrou

🏆 前端领域优质创作者 1万+

Multisim14.0仿真应用设计(十六)74LS138译码器应用仿真

74LS138为3线-8线译码器。

zhusl6688的博客 2981

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

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

qq_40848737的博客 151

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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、付费专栏及课程。

余额充值