`
dingjob
  • 浏览: 183228 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

插件式的监控实现

阅读更多

结合本周分享的《comsat 监控使用》,和以前听过的《comsat插件开发》,总结一下。

一.comsat 是什么?

  comsat 是基于FLEX 和 J2EE开发的监控系统,能够承接系统监控和应用监控的需求,对于系统监控,主要监控内存使用,JVM状态,cpu使用率等,系统监控侵入性较小,而对于应用监控,可以监控你自定义的一些key-value值,根据log打点来监控线程启动状况,通过覆盖log4j的expetionApender来监控异常等,以及通过AOP的方式,监控一些数据库连接异常等。同样,也可以很方便的开发自己的插件。

 

二.特性。

目前实现:

1.添加新的应用,需要comsat服务端配置,客户端web.xml配置监听器,并在本地classpath下配置comsat.xml(配置对应到comsat服务端的应用名称、协议和开放的端口名称)。

2.提供了基础的key-value监控,runtime监控,客户端需要加入plugin、collector等依赖等才能实现。

3.key-value监控需要依赖于日志的<CC>开头的纪录进行获取。

4.可以发送手机报警和旺旺等报警,并进行报警规则的设定。

 

----

不足

 

1.发送的exception信息较多,但是可以显示的统计信息不多。

2.客户端启动任务监听,启动task,对客户端性能有影响。

 

三.目前我们主要应用场景

1.监控系统运行情况

2.通过AOP方式监控数据库运行情况,在数据库断开时,不进行重试。

 

四.结合日志分析运行情况

 

启动客户端时,日志如下:

 

 

 

1.启动本地配置,本地没有comsat配置则启动服务端配置,采用w3c解析xml如下:

 

	URL url = PluginConfigurer.class.getResource("/comsat.xml");
		if (url == null) {
			url = PluginConfigurer.class.getResource("/META-INF/comsat-default.xml");
		}
		logger.info("Bootstrap " + url);
		Document doc = DomHelper.build(url);
		Element root = doc.getDocumentElement();
		// init global setting
		application = getSingleSubTextByName(root, "application", "unknown");
		String cfg = getSingleSubTextByName(root, "global-config", "true");
		globalConfig = Boolean.parseBoolean(cfg);
		serverUrl = getSingleSubTextByName(root, "server-url", "tcp://localhost:5843");

 

 这部分是采用了static的方法,是最先被初始化的

2. web.xml中配置的监听的servlet 容器的ComsatListener 启动

 public void contextInitialized(ServletContextEvent sce)
   {
 try {
     this.launcher = new Launcher();
     this.launcher.startup();
    } catch (Exception e) {
      logger.error("Fail to startup comsat collector!", e);
   }

}

 

public class Launcher
{
  private static final Log logger = LogFactory.getLog(Launcher.class);
 private static final PluginConfigurer configurer = (PluginConfigurer)SimpleBeanFactory.findService(PluginConfigurer.class);
 private static final SimpleScheduler scheduler = (SimpleScheduler)SimpleBeanFactory.findService(SimpleScheduler.class);
 private static final PluginLauncher plugins = (PluginLauncher)SimpleBeanFactory.findService(PluginLauncher.class);

public void startup() {
   logger.info("Ready to launch monitor's collector... ");
   scheduler.startup();
   startHeartBeat();
   startMsgSender();
  if (!(configurer.findGlobalConfig()))
      startPlugins();
 }

可以看到,先后启动了心跳的task,心跳一般是60s发送一次,和kv的task 一样,隔一段时间发送一次当前时间和应用给comsat;然后启动message发送task,这里把消息进行过滤并发往相应的ip端口?(为什么配置是tcp?)-tcp 只是标识,是一个标准的写法,其实没有用到和协议有关的东西,建立的是nio的socket连接

最后是启动你自己扩展的plugin。

 

3. task启动完成后,在MessageSender这里做了如下事情,启动socket的连接,建立连接通道,并在失败后重试。session的作用 - 保持了当前会话的状态,即本次连接的状态,由于没有建立在物理资源消耗上,没有做session的释放。

 

	public void connect() throws IOException {
		channel = ChannelBuilder.newSocketChannel(ip, port);
		session = new Session(this, channel, protocolChain, handlerChain);
		channel.register(selector, SelectionKey.OP_CONNECT, session);
		selector.select(DEFAULT_SELECT_TIMEOUT);
		super.read(session);
	}

 

 

4.在如上所述的建立的通道里会启动消息发送的方法,发送的消息采用了特有的标识<CC>。

 

五.项目应用,aop方式监控数据库异常。

<aop:aspect ref="dataAccessAspect">  
			<!-- 配置pointcut,即切入点,对哪些类的哪些方法起到AOP的作用 -->  
			<aop:pointcut id="chargeDao"
				expression="execution(* com.alibaba.itbu.billing.biz.charge.dao.*.*(..))" />
			<aop:pointcut id="collectDao"
</aop:aspect> 

 

public class DataAccessAspect {
    public Object monitorDataAccess(ProceedingJoinPoint joinPoint) throws Throwable{
        try{
            return joinPoint.proceed(joinPoint.getArgs());
        }catch(DataAccessException err){
            try {
                DataAccessFailMonitor task = new DataAccessFailMonitor();
                List<KVItem> items = task.getKVItems(err);
                Date collectTime = new Date();
                for (KVItem item : items) {
                    item.setCollectTime(collectTime);
                    task.send(item);
                }
            } catch (Exception e) {
            }            
            throw err;
        }catch(Exception err){
            throw err;
        }
    }
}

 

这样可以实现在数据库发生DataAceess异常时,保证能够收到异常的报警。

 

六.插件开发

其实上面的应用部分已经基本展示了插件开发的过程,只是没有在数据格式上扩展,数据格式扩展可以通过继承monitor_item去做,并且可以扩展DAO,将你要监控的数据纪录到监控端。总结起来就是四步

1.扩展数据格式,继承monitorItem

2.定义信息收集器

3.定义发送task,

4.可以初始化的监控端(如果你需要)继承MonitorPersistor

  • 大小: 84.8 KB
1
0
分享到:
评论

相关推荐

    大华web端调用监控-ocx插件-64位

    ActiveX控件是一种在Windows环境中运行的小型应用程序组件,常用于Web浏览器,以提供交互式功能和扩展服务,例如视频监控、文件操作等。 描述中的“支持ie,谷歌及其他需要自己按照文档封装”说明这款OCX插件不仅...

    大华web 实时监控,实测可用 OCX web插件

    标题中的“大华web 实时监控,实测可用 OCX web插件”表明这是一个关于大华公司的网络监控解决方案,利用了OCX(ActiveX控件)技术实现Web端的实时视频监控功能。OCX是一种在网页上嵌入特定功能的控件,常用于早期的...

    InVideo插件,支持UE5播放rtsp监控视频,支持5.0 、5.1

    通过支持RTSP(Real Time Streaming Protocol),该插件可以直接与各种网络监控摄像头通信,实现实时视频的无缝嵌入。 RTSP是一种用于控制媒体流传输的协议,常用于IP摄像机和其他视频源。InVideo插件的RTSP支持...

    大华视频监控插件&demo.rar

    大华的视频监控插件提供了云台控制接口,允许用户通过Web界面远程操控摄像头的上下左右移动,实现全景监控。在开发过程中,理解这些接口的工作原理和使用方法至关重要,能够帮助你构建具有灵活视角调整的监控系统。 ...

    大华摄像头插件DaHua下载

    《大华摄像头插件在Unity中的应用详解》 在当今数字化时代,实时视频捕捉与处理在游戏开发、虚拟现实、安防监控等...通过掌握和运用这一插件,开发者可以构建出更加丰富多元的交互式应用,满足不同领域的个性化需求。

    nmon监控插件.rar

    对于大型企业环境,结合自动化脚本和监控系统,nmon可以实现对多台服务器的批量性能监控,提高运维效率。 总的来说,nmon是一款必备的Linux系统监控工具,其直观的数据展示和灵活的配置选项,使得无论是初级还是...

    网站蜘蛛爬行监控插件 v2.0 20180403-ASP源码.zip

    综上所述,这个压缩包包含了使用ASP编程语言实现的网站蜘蛛爬行监控插件源码,适合对ASP有一定了解的开发者进行学习和定制。同时,它也涉及到网站管理和SEO优化的知识,对于网站管理员来说也是一个有价值的工具。

    大华摄像头web浏览器调用插件显示demo

    Web插件是扩展浏览器功能的一种程序,它可以嵌入到浏览器中,为用户提供特定服务,比如播放视频、交互式图形等。大华的Webplugin.exe就是这样一个插件,它专门用于处理大华摄像头的视频流和控制指令。 其次,Web...

    大华webplus插件实现web端实时及回放

    标题 "大华webplus插件实现web端实时及回放" 涉及的主要知识点是使用大华的WebPlus插件在Web端实现视频监控的实时流媒体播放和录像回放功能。大华WebPlus是一种专为Web浏览器设计的ActiveX控件,允许用户在网页上...

    WPF插件总结1

    在本文中,我们将深入探讨WPF插件架构的关键点,以实现动态加载和管理插件。WPF(Windows Presentation Foundation)是一种.NET Framework的用户界面框架,它提供了丰富的图形层和强大的数据绑定功能。通过插件架构...

    插件框架集成

    "基于插件式快速集成开发矿建"指的是利用插件框架技术来加速矿业建设项目的软件开发过程。这样的系统通常包含一个核心平台,该平台提供基础服务,以及一个插件平台,允许第三方开发者创建和插入特定功能的插件。这样...

    基于XML的插件式组件系统的研究

    基于XML的插件式组件系统的研究,不仅结合了C/S和B/S架构的优点,还利用了组件技术和XML的强大功能,实现了更加灵活、高效和易维护的软件开发模式。通过松耦合的架构设计、动态加载与卸载的支持以及高效的通信机制,...

    C#插件开发框架

    6. **插件管理**:为了便于管理和控制,通常需要一个插件管理系统,它可以负责插件的安装、卸载、更新和状态监控。 在压缩包文件"DC.PluginMgt"中,我们可以推测这可能是一个用于插件管理的库或者示例项目。它可能...

    4个海康威视视频插件WebComponents.zip

    海康威视作为全球领先的安防监控设备制造商,其产品广泛应用于各类场合,包括...开发者在进行这项工作时,不仅要有扎实的编程基础,还需要对监控领域的专业知识有一定了解,以便更好地利用这些插件实现自己的项目需求。

    UE5接入视频流插件-InVideo.zip

    InVideo插件是专为这个目的设计的,它允许开发者将外部视频源实时导入到UE5环境中,创建动态背景、电影级过场动画或交互式媒体元素。以下是关于使用InVideo插件在UE5中接入视频流的关键知识点: 1. **插件安装**:...

    java实现拓扑图插件 - 2(已亲测)

    8. **应用场景**:这个插件适用于网络管理、系统监控、数据中心可视化、软件架构演示等多种场合,帮助用户更好地理解和管理复杂系统。 9. **代码示例和文档**:为了更好地理解和使用JTopo,开发者通常会提供示例...

    8.13 基于插件注册和流程编排的渐进式DevOps体系建设-刘超.pdf

    文章首先介绍了DevOps的概念和重要性,然后深入讨论了基于插件注册和流程编排的渐进式DevOps体系建设的实现方法和技术架构。 插件注册是DevOps体系建设的核心组件之一,它可以实现插件的注册、管理和调用,提高开发...

    HTML网站源码-监控安全设备系统响应式网页模板-响应式源码.zip

    此外,它还内置了丰富的JavaScript插件,助您轻松实现各种复杂的交互效果。这套源代码文件具有极高的可定制性,您可以根据您的项目需求,对页面布局、颜色和内容进行个性化调整,轻松打造出独具特色的网站。同时,...

    A8插件式监护仪

    - **中央监测系统连接**:通过有线或无线方式连接中央监测系统,实现远程数据监控和管理。 - **背光按键**:适用于光线较暗的环境,方便夜间操作。 - **触摸屏(可选)**:支持鼠标和键盘操作,提高交互体验。 - **...

    插件式智能麻醉系统.rar

    随着物联网、5G和AI技术的快速发展,未来的插件式智能麻醉系统可能会实现远程监控、自动报警、智能预测等功能,进一步提升麻醉的精准度和效率。同时,通过大数据分析,系统能提供更加个性化和预见性的麻醉方案,促进...

Global site tag (gtag.js) - Google Analytics