监控程序架构
监控程序架构
监控程序为 独立的一个java项目 需要一个java端口(用于jmx remote) 及 一个 web端口(用于web访问)
客户端可连接程序 为 jconsole 和 html网站
MonitorJmx
----com.kompakar.ehealth.monitor
---------------------------------agent(主要存放类似于main函数的 启动程序 启动程序需要初始化jmx容器 将mbean注册到容器中,agent分3个级别的 手工注册、按系统分包的、全部的 ,后两种可以动态导入不用手工注册) MainAgent
---------------------------------config(主要存放一些配置文件) Constant 服务器url 可以放到属性文件中
---------------------------------mbean(存放监控bean,需要遵循规约 以MBean结尾 实现和接口需要放在一个包中) OperatingSys OperatingSysMBean Database DatabaseMBean Jvm JvmMBean
------------------------------------------ihis cp (如果监视多系统 可以进一步分包)
---------------------------------util(一些工具类 如jmx远程连接工具类)RMIClientFactory Mail
实现监控只需要 编写接口MBean和 实现 并注册到对应的agent
监控大多是主动请求,如查看硬件信息 则主动调用获取的函数 , 查看数据库连接池情况则 同样调用对应函数
第二中是被动告知 如数据库链接数不够 内存溢出(这种情况下主动请求可能就需要不停的监控)
对于目前kthis 的监控:
目前写的2个MBean 是2种方式的
第一个是对OperatingSys 硬件基础信息的监控,目前资源是直接读取tomcat对外开放的jmxremote
第二个是对Database 连接池的监控 资源是在 eHealth中创建了一个 mbean包编写 监控接口和实现 并在EntryServlet(主要是需要得到spring的所有单例服务)中注册到tomcat jmx容器中 然后供监控程序远程获取
EntryServlet新增代码
private void jmxreg(){
try {
BasicDataSource ds = (BasicDataSource) wac.getBean(
"eHealthDataSource", BasicDataSource.class);
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName DatabaseName = new ObjectName(
"monitor:name=Database");
Database db = new Database(ds);
server.registerMBean(db, DatabaseName);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
监控端一个MBean的实现
public int getNumActive(){
int numActive = 0;
try {
MBeanServerConnection client = RMIClientFactory
.getClient(Constant.SERVER_1);
ObjectName objectName = new ObjectName(
"monitor:name=Database");
numActive = Integer.parseInt(client.getAttribute(objectName, "NumActive").toString());
} catch (Exception e) {
e.printStackTrace();
}
return numActive;
}
针对数据库层可以修改 log4jdbc的代码 设置相应的度量标准 去通知监控
为了尽量不影响现有系统 所有的代码 尽量是新添或 在系统切入切出部分修改
目前雷暴提供基础的监控页面都比较朴素 如果要用户体验比较高的 建议以后使用BS形式
上一篇: log4jdbc
下一篇: grails脚手架2次优化