Monitor功能模块的逻辑在MonitorFilter类中,通过Dubbo的SPI的activate机制
@Activate(group = {Constants.PROVIDER, Constants.CONSUMER})
public class MonitorFilter implements Filter
服务提供者和消费者都会激活这个filter,invoke方法内部会调用MonitorFilter内部的collect方法,其主要逻辑
(1)通过url的monitor_key及spi机制得到Monitor
(2)调用Monitor的collect方法。
注意的是,协议在接收请求时,应记录请求来源方地址信息
public interface Monitor extends Node, MonitorService {
}
/**
* 监控数据采集.
* 1. 支持调用次数统计: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 记录监控来源主机,应用,接口,方法信息。
* 1.2 如果是消费者发送的数据,加上provider地址参数,反之,加上来源consumer地址参数。
* 1.3 success,faulure,elapsed 记录距上次采集,调用的成功次数,失败次数,成功调用总耗时,平均时间将用总耗时除以成功次数。
*
* @param statistics
*/
void collect(URL statistics);
/**
* 监控数据查询.
* 1. 支持按天查询:count://host/interface?application=foo&method=foo&side=provider&view=chart&date=2012-07-03
* 1.1 host,application,interface,group,version,method 查询主机,应用,接口,方法的匹配条件,缺失的条件的表示全部,host用0.0.0.0表示全部。
* 1.2 side=consumer,provider 查询由调用的哪一端采集的数据,缺省为都查询。
* 1.3 缺省为view=summary,返回全天汇总信息,支持view=chart表示返回全天趋势图表图片的URL地址,可以进接嵌入其它系统的页面上展示。
* 1.4 date=2012-07-03 指定查询数据的日期,缺省为当天。
*
* @param query
* @return statistics
*/
List<URL> lookup(URL query);
通过spi获得的Monitor是DubboMonitor,DubboMonitor的collect方法,里面的一个关键数据结构为Statistics
private URL url;
private String application;
private String service;
private String method;
private String group;
private String version;
private String client;
private String server;
DubboMonitor在初始化时,会启动一个定时器,默认60s执行一次send方法。这个send方法会把汇总的信息,通过dubbo服务MonitorService发送到监控中心,然后从汇总信息中减掉已统计数据。
最后欢迎大家访问我的个人网站:1024s