即运行时数据,指的是在程序运行时产生的信息,程序占用的CPU、堆内存、JVM信息以及提供服务访问与客户端调用的相关统计信息(平均响应时间、访问计数等)。
3.2 服务端数据采集DefaultMonitorSupporter的实现
服务端数据采集以DefaultMonitorSupporter.start为入口点,构建monitor实例:
默认构建service类型的StandardMonitor实例,其中包含StandardMonitorRepository实例,StandardMonitorRepository实例注册monitor,一个该实例包含多个MonitorElement实例,并将所有的MonitorElement实例保存在elemsMap属性中。
elemsMap属性根据不同的采集对象保存不同的采集类handler:
ServerEndRespTimeCapHandler:采集Server、APP、URL的响应时间和加载计数等.
JVMStateCapHandler:采集jvm状态,包括Heap使用、GC计数、线程计数、CPU、class计数等。
代码片段如下:
3.3 客户端数据采集DefaultClientMonitorSupporter的实现
客户端数据采集以DefaultClientMonitorSupporter.start为入口点,构建monitor实例:
默认构建client类型的StandardMonitor实例,其中包含StandardMonitorRepository实例,StandardMonitorRepository实例注册monitor,一个该实例包含多个MonitorElement实例,并将所有的MonitorElement实例保存在elemsMap属性中。
elemsMap:属性只保存一个ClientRespTimeCapHandler采集类。
ClientRespTimeCapHandler:采集客户端的响应时间和加载计数等。
无论是客户端的数据采集还是服务端的数据采集,都会将monitor安装到DataObserver中;并且最后都会将构建成功的monitor绑定至指定的捕获方法(即precap和docap)。
3.4 DataObServer的实现DataObServer提供了两种模式来暴露接口数据,分别为JMX和HTTP:
HTTP方式:由HttpDataObserverWorker.start作为入口点,分别注册了三个handler,分别为获取JVM数据、Monitor数据以及profile数据的handler。不同的handler暴露了不同的接口,最终都返回了JSON格式的数据。
JMX方式:JMX代理通过getMBeanInfo方法获取暴露的接口,来获取数据。
DataObServer还提供了安装与卸载monitor、增加与移除listener以及获取profile和monitor的方法:
官方网站:https://uavorg.github.io/main/
开源地址:https://github.com/uavorg