欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

监控程序架构

程序员文章站 2022-07-14 13:38:02
...

监控程序架构

监控程序为 独立的一个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次优化