结合本周分享的《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
分享到:
相关推荐
jQuery EasyUI开发前端页面,利用jQuery文件上传插件实现拖拽上传的效果并对文件 类型、大小、数量进行控制;利用searchbox实现查找功能 Druid(数据源配置 sql防注入 sql性能监控) 统一的异常处理 JSP JSTL ...
该系统的下位机子系统运行于现场嵌入式工控机,其核心软件程序具有插件式体系结构;上位机子系统基于 JAVA EE 技术研发,具有包含实体层、业务逻辑层、表现层等的分层体系结构。示范应用表明,该系统能够持续全面...
基于插件式开发技术,以开源软件Inkscape作为主程序,利用其专业的画图功能绘制电力系统图元,利用Python语言做插件开发对Inkscape软件进行功能扩展,在Inkscape平台上完成设备建模与数据信息录入、自动网络拓扑分析...
此外,它还内置了丰富的JavaScript插件,助您轻松实现各种复杂的交互效果。这套源代码文件具有极高的可定制性,您可以根据您的项目需求,对页面布局、颜色和内容进行个性化调整,轻松打造出独具特色的网站。同时,...
IT管理系统,实现自动化运维,整合CMDB和监控,实现自动化部署,打通开发、运维和测试的边界,实现一栈式管理。 IT管理系统,实现自动化运维,整合CMDB和监控,实现自动化部署,打通开发、运维和测试的边界,实现一...
此外,它还内置了丰富的JavaScript插件,助您轻松实现各种复杂的交互效果。这套源代码文件具有极高的可定制性,您可以根据您的项目需求,对页面布局、颜色和内容进行个性化调整,轻松打造出独具特色的网站。同时,...
主要包括:计划进度、设备管理、工艺监控、物料监控、人员监控、质量监 ...jQuery EasyUI开发前端页面,利用jQuery文件上传插件实现拖拽上传的效果并对文件 类型、大小、数量进行控制;利用searchbox 实现查找功能
同时,该系统还支持插件式的扩展和定制,方便用户根据自身需要进行功能扩展和定制。 总之,该系统是一个功能强大、易于使用和定制的OA流程可视化系统,可为企业和组织提供高效、安全和可靠的办公流程管理和控制。
- jQuery EasyUI开发前端页面,利用jQuery文件上传插件实现拖拽上传的效果并对文件类型、大小、数量进行控制;利用search-box实现查找功能 - [Druid(数据源配置 sql防注入 sql性能监控)] - 统一的异常处理 - JSP ...
uoYi是一个后台管理系统,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf)主要目的让开发者注重专注业务,降低技术难度,从而节省人力成本,缩短项目...支持服务监控,数据监控,缓存监控功能。
论文将测量系统分为平台支撑层、平台框架层、平台应用层,提出并实现了“插件式应用”的概念,保证了软件系统的稳定性、可复用性和可扩展性。NetManager实现了将“数据采集”和应用程序的剥离,与其它网络测量和管理...
这是一个面向程序员的专业级量化交易软件,用于期货、股票、外汇、炒币等多种交易场景,实现自动交易。一站式平台,可适配对接不同的交易所;集成了Tensorflow框架,可以运行预训练...项目架构采用事件驱动+插件式开发
Spring Boot、MyBatis、Vue ,内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源,...支持服务监控,数据监控,缓存监控功能。
以软件的通用性和实用性为出发点,兼顾软件的可扩展性,设计了具有管理产品所具有的网络信息捕获功能,且可利用插件式的机制扩展系统应用范围。提出了自动拓扑布局算法,以自动拓扑发现为核心,充分简化基本的网络...
jQuery EasyUI开发前端页面,利用jQuery文件上传插件实现拖拽上传的效果并对文件类型、大小、数量进行控制;利用search-box实现查找功能 Druid(数据源配置 sql防注入 sql性能监控) 统一的异常处理 JSP ...
此外,它还包含了丰富的JavaScript插件,可以实现各种复杂的交互效果。这套源代码文件还具有高度的可定制性。您可以根据自己的需求对页面进行布局调整、颜色更改以及内容替换,轻松打造出符合您项目风格的网站。同时...
云端在线采集:一站式云服务模式,云上完成采集任务,实现24小时无人值守; 强大监控更新:通过新增监控与变动监控实时更新目标网站最新数据; 高级语义接口:关键字提取、伪原创、情感分析等都多项技术; 智能匹配...
Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 ...
jQuery EasyUI开发前端页面,利用jQuery文件上传插件实现拖拽上传的效果并对文件类型、大小、数量进行控制;利用search-box实现查找功能 Druid(数据源配置 sql防注入 sql性能监控) 统一的异常处理 JSP JSTL ...