监控程序架构

监控程序架构

监控程序为 独立的一个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形式

猜你喜欢

转载自csc365kl.iteye.com/blog/1627293