最近看到一位同事正在开发一个监控软件,要求就是通过针对服务器现有的一些接口,通过这些接口返回的数据进行分析,如果监控的值到达预先设定的范围则通过短信的方式发送给管理员。
从整个开发的功能上来看是一个比较单一也很明确的功能,所开发的系统对所其所监控的软件的依赖性也非常大,主要是监控的数据分析行为和监控信息的服务报警行为这块。既然这两块很难做成一个通用的功能模块,那就搭建一个监控平台,可以让这些功能模块通过组件的方式自由的注册和销毁。
所有我构思了这个监控平台,它对外有三个接口,分别是监控接口,报警接口和监控消息监控接口。由平台统一管理这些组件的生命周期,每个组件都过单独的线程运行。提供一个核心组件CoreComponent调度所有监控数据的流转。平台本身还使用基于jmx管理服务技术提供对所有当前使用的组件运行情况的监控,也包括动态的启动和停止组件的运行状态。
附件中程序和部分的开发说明文档(由只用了几个晚上开发出来,文档不够完整,以后慢慢补上)
下面我利用该平台开发一个监控ActiveMQ状态的组件ActiveMQJmxSpyComponent,该组件实现对AMQ运行状态的监控(监听失败或失败后重新连接成功)。可以通过指定Queue名称列表来指定要监控Queue队列的消费者是否为0(通常表示对方可能因为网络或服务中断而失去监控)或是队列消息都由0变为大于0表示消费者重新监听上服务。
public class ActiveMQJmxSpyComponent extends AbstractSpyComponent {
/**
* Logger for this class
*/
private static final Logger LOGGER = Logger.getLogger(ActiveMQJmxSpyComponent.class);
//AMQ jmx serverUrl to spy
private String serverUrl;
//detect interval(unit is ms)
private int detectInterval = 5000;
//the Queue name list to spy
private Set<String> destinationNamesToWatch;
// if queue's consumer suspends after then certain time then to notify. default is 3 minutes
private int queueSuspendNotifyTime = 3*60*1000;
下面是一个报警组件的实现:只是简单的把监控消息打印在屏幕上PrintScreenAlertComponent
public class PrintScreenAlertComponent extends AbstractAlertComponent {
/* (non-Javadoc)
* @see org.xmatthew.spy2servers.core.Component#getName()
*/
public String getName() {
return "PrintScreenAlertComponent";
}
/* (non-Javadoc)
* @see org.xmatthew.spy2servers.core.Component#startup()
*/
public void startup() {
setStatusRun();
}
/* (non-Javadoc)
* @see org.xmatthew.spy2servers.core.Component#stop()
*/
public void stop() {
setStatusStop();
}
@Override
protected void onAlert(Message message) {
System.out.println(message);
}
}
下面该组件的注册。${CUR_PATH}/conf/spy2servers.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean class="org.xmatthew.spy2servers.core.CoreComponent"></bean>
<bean class="org.xmatthew.spy2servers.jmx.JmxServiceComponent"></bean>
<bean class="org.xmatthew.spy2servers.component.alert.PrintScreenAlertComponent"></bean>
<bean class="org.xmatthew.spy2servers.component.spy.jmx.ActiveMQJmxSpyComponent">
<property name="serverUrl" value="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"></property>
<property name="destinationNamesToWatch">
<set>
<value>Matthew.Queue</value>
<value>Rocket.Queue</value>
</set>
</property>
<property name="queueSuspendNotifyTime" value="50000"></property>
</bean>
</beans>
ok,现在ActiveMQJmxSpyComponent监控到的消息能会被PrintScreenAlertComponent打印到屏幕上。
如果此时需要建立一个消息报警的规则,只要实现以下接口,并注入到CoreComponent的alertRule属性中即可。
public interface AlertRule {
boolean isAlertAllow(MessageAlertChannel channel);
}
通过jconsole大家就可以看到那几个组件已经在正常运行了,如果本地没有运行MQ,运行时会提示ActiveMQJmxSpyComponent监控失败,在jmx管理上会收到条AMQ服务未启动的报警信息。
应用这个平台开发监控的组件就这么简单。
备注:因为开发时间比较紧,如果有什么Bug也希望大家反馈给我,我会改进。
Good luck!
Yours Matthew!
- lib.rar (2.9 MB)
- 描述: 第三方类库,放到lib目录中
- 下载次数: 4643
分享到:
相关推荐
监控系统的安装和配置是一个复杂的过程,需要对系统架构、监控原理、以及Zabbix的组件和术语有所了解。此外,在搭建过程中还需要注意安全问题和环境的兼容性。通过马哥教育的视频原创图片和相关网友的做法,可以顺利...
总的来说,这篇论文通过深入研究SpringBoot框架,展示了如何在实际项目中设计和实现一个高效、稳定的大型监控系统,对于学习SpringBoot的开发者来说,是一份宝贵的参考资料。通过阅读和实践,读者不仅可以理解...
vSphere作为VMware公司的旗舰产品,是一款在业界广受认可的服务器虚拟化平台,与OpenStack并列,是大中小企业构建高效、灵活数据中心的关键技术。 本教程由一位经验丰富的VCP(VMware Certified Professional)认证...
1. 人工智能-深度学习:人工智能(AI)是一种模拟人类智能的科技,而深度学习是AI的一个分支,它借鉴了人脑神经网络的工作原理来处理复杂的数据。深度学习通过多层非线性变换的计算模型,如深度神经网络(DNN),...
综上所述,该毕业设计项目旨在构建一个实用的环境监测系统,通过STM32的处理能力和物联网技术,实现对工业环境的智能化监控,以提高生产安全性和环保水平。设计过程中,学生需要掌握嵌入式系统、传感器技术、物联网...
文档提供了一个具体案例,说明了部署Kubernetes集群时所涉及的各个组件和它们的功能,例如kube-apiserver负责API的接入和服务,metrics-server用于集群资源监控,EFK(Elasticsearch、Fluentd、Kibana)用于日志的...
- **前端设计**:Vue.js是一个轻量级的前端框架,其组件化开发方式使得代码结构清晰,易于维护。可以结合 Vuex 进行状态管理,实现跨组件的数据共享。还可以利用Vue Router进行路由管理,实现页面间的跳转。 4. **...
【标题】"ASP源码—自己人策划ASP企业网站建站系统" 提供的是一个基于ASP(Active Server Pages)技术的企业网站建设解决方案。ASP是微软推出的一种服务器端脚本语言,用于构建动态、交互式的Web应用程序。这个源码...
开发者可以使用Vue组件化的方式构建页面,与后端通过RESTful API进行数据交互。 在前后端分离的模式下,通信通常通过JSON格式的数据进行。当用户发起请求时,SpringSecurity会对请求进行拦截,判断是否已登录以及...
在“每特教育蚂蚁课堂余老师原创制作SpringBoot教学文档.docx”中,你可能会学习到如何创建第一个SpringBoot应用,理解自动配置的工作原理,以及如何编写Controller、Service、Repository等核心组件。此外,文档可能...
【my-first-app-master】这个文件名可能是一个小程序的初始项目模板,通常包含小程序的根目录结构,如app.js、app.json、pages等,帮助初学者快速搭建小程序的基础框架。在`demo导入说明.docx`文档中,可能会详细...
开发这样一个系统时,通常需要以下步骤: 1. 初始化OV7670:设置其工作模式、分辨率、像素格式等参数,可以通过向其发送特定的控制命令来完成。 2. 配置STM32的SPI接口:根据OV7670的数据速率要求设置SPI的时钟频率...
- **React**:以其虚拟DOM和组件化的思想,被广泛应用于高性能的前端应用开发。 - **Vue.js**:简单易学,上手快,同时拥有丰富的生态系统。 #### 三、前端调试技巧 - **基本调试技巧**: - 实时调试:使用...
- **自动化运维**:实现自动化监控、报警和日志记录等功能,降低运维成本。 #### 三、详尽建设方案 **3.1 一站式大数据采集、储存、清洗、训练、导出** - **一站式解决方案**:提供从数据采集、存储、清洗到分析和...
Vue.js则是一种轻量级的MVVM框架,方便管理数据和视图,实现组件化开发。 5. **版本控制**:在开发过程中,版本控制工具如Git起到了关键作用。Git帮助开发者跟踪文件变更,协同工作,并能轻松回溯到任何历史版本,...
总的来说,SpringBoot_v2是一个集成了MyBatis-Plus的高效后台管理系统框架,它以Spring Boot为核心,结合现代前端技术和最佳实践,旨在帮助开发者快速构建稳定、易维护的后台系统。通过深入理解和实践,开发者可以更...
无框架CMDB系统,如"original_CMDB",旨在提供一个灵活、可定制化的解决方案,以满足不同企业的特殊需求。这个系统可能不依赖于特定的开发框架,而是采用Python作为主要编程语言,利用其强大的库支持和简洁的语法来...