CN101478445A - 用于信息系统监控的通用监控模型技术 - Google Patents

用于信息系统监控的通用监控模型技术 Download PDF

Info

Publication number
CN101478445A
CN101478445A CNA2008101670414A CN200810167041A CN101478445A CN 101478445 A CN101478445 A CN 101478445A CN A2008101670414 A CNA2008101670414 A CN A2008101670414A CN 200810167041 A CN200810167041 A CN 200810167041A CN 101478445 A CN101478445 A CN 101478445A
Authority
CN
China
Prior art keywords
attribute
java
name
lang
information system
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008101670414A
Other languages
English (en)
Other versions
CN101478445B (zh
Inventor
卞旭东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Lianhua Letter Technology Co Ltd
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN2008101670414A priority Critical patent/CN101478445B/zh
Publication of CN101478445A publication Critical patent/CN101478445A/zh
Application granted granted Critical
Publication of CN101478445B publication Critical patent/CN101478445B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明是一种利用通用监控模型对信息系统监控的方法,包括步骤:(1)将信息系统中的各种监控对象统一设定为通用管理对象进行描述,每个管理对象包括:能够监控到的属性、获取属性的方法;(2)使用通用访问协议实现获取属性的方法;(3)通过配置方式定义管理对象及其访问,按照一定的语法要求,通过编写配置文件的方式对管理对象进行描述,完成配置文件编写后,通过程序生成与该类设备对应的java程序;该java程序每创建一个实例对象,即与现实中该类设备的一个实例设备对应,通过对该java对象的控制,可实现对实际设备的监控。

Description

用于信息系统监控的通用监控模型技术
技术领域
本发明涉及计算机技术,尤其是涉及利用通用监控模型,对IT信息系统设备进行监控,保障系统稳定运行的通用监控模型技术。
背景技术
随着计算机信息系统的广泛使用,保障系统稳定运行的IT系统监控显得尤为重要。
从IT信息系统的典型组成看,可以划分为:基础设施类软硬件设备和针对具体需求定制开发的应用软件。其中,基础设施类软硬件设备包括了:网络设备、主机等硬件设备(含各种e化设备)、操作系统软件、数据库软件、应用服务器软件等。
从系统故障概率看,基础设施类的软硬件设备多出于大型供应商,其市场覆盖大、产品成熟度高,故障概率较低,监控需求较为固定;而定制开发的应用软件往往是主要的故障源,各个应用软件采用的技术千差万别,故障点、故障现象亦千差万别,因此,相应的监控需求呈现出日益个性化的特点。
由于各种计算机信息系统(特别是定制开发的应用软件),所采用的技术千差万别,导致当前各个监控软件供应商基本只能提供针对由各大厂商研制的商品化软硬件设备的监控,如:网络设备监控、数据库监控、操作系统监控、应用服务器监控、某些大型商品化应用软件(如:SAP软件)等。针对各种定制化应用软件的监控则几乎为空白。从而严重制约了IT系统监控软件的有效性和实用性。
因此,迫切需要一种成熟的监控技术,能够有效满足各种个性化监控需求。
在信息系统监控中,通过监控软件对监控对象进行监控时,一般均包括三个动作:连接监控对象、获取监控指标报文、报文解析。其中:
■连接监控对象是指监控软件通过一定的传输通信协议与监控对象连接,此时,传输通信协议的任务包括:连接监控对象、断开监控对象、连接状态判断、传输监控指标报文、传输过程中的通信校验与纠错等。
■获取监控指标报文是指通过一定的动作获取包含监控指标值的报文的行为。
■报文解析是指通过一定的运算处理,获取报文中包含监控指标值的行为。
针对上述过程,常规监控软件在具体代码实现时,将上述三部分作为整体写入程序中,经过编译后,以二进制代码运行。这种技术必然存在扩展性差的缺陷,主要表现在以下几方面:
1.监控指标的种类固定。针对每种监控对象,均采用这种固定程序编写方式,监控指标的个数和种类都固化在程序中,因此,监控指标的种类固定、个数固定,监控指标扩展性差。
2.通信协议与监控指标的组合固定。由于监控中每个监控指标的获得都是在建立通信的基础上进行的,采用上述技术时,对不同的通信协议,都要通过编程方式实现在该协议下所采集的全部监控指标。厂家能够提供哪些协议支持,就仅能使用这些协议,监控的适应性差。
发明内容
针对上述现状,本发明的目的在于提出了一种通用监控模型技术,采用具有良好扩展性的开放模型描述现实中的各类监控对象,并通过本发明提供的技术实现,可以很方便地实现对各类新监控对象的扩展,很好满足监控需求的变化。
本发明的目的通过下述方法实现,本发明的一种利用通用监控模型对信息系统监控的方法,包括步骤:
(1)将信息系统中的各种监控对象统一设定为通用管理对象进行描述,每个管理对象包括:能够监控到的属性、获取属性的方法;
(2)使用通用访问协议实现获取属性的方法,其中:连接管理对象是通过使用通信协议方式进行的;获取属性则通过设定的动作完成;结果解析包括字符串解析、拼装或对数值结果的运算;
(3)通过配置方式定义管理对象及其访问,按照一定的语法要求,通过编写配置文件的方式对管理对象进行描述,完成配置文件编写后,通过程序生成与该类设备对应的java程序;该java程序每创建一个实例对象,即与现实中该类设备的一个具体实例设备相对应,通过对该java对象的控制,可实现对实际设备的监控。
步骤3所述的配置文件采用XML文件,XML文件的总体结构如下:
<ModelMBeanWrapper>
  <ModelMBeanDescriptor>
    该类监控对象总体描述,名称、描述信息;
</ModelMBeanDescriptor>
<constructor>
    该类监控对象的java类的初始化参数,包括:可能会使用到的通信协议
    所对应的java类有哪些,监控结果解析规则所对应的java类的声明;
</constructor>
 <attributeDescriptors>
     该类监控对象的各种属性定义,包括属性名称、属性种类:配置属性/状
     态属性/性能属性,数据类型、属性的显示名称、属性的获取方法名称、
     其它辅助信息;
</attributeDescriptors>
<operationDescriptors>
    由若干Operation组成,每个Operation定义了针对实际监控对象进行监
    控时的相关动作,包括:与设备的连接动作、断开动作、每个属性的获
    取方法;
    在每个Operation内部,由若干WrapperMethod组成,每个WrapperMethod
    是该通用监控对象java类初始化时所声明的java类所提供的方法,包括
    通信协议java类所提供的方法或结果解析java类所提供的方法;通过各
    个WrapperMethod的顺序执行,可实现该Operation所需执行的动作。
</operationDescriptors>
</ModelMBeanWrapper>
在所述XML文件中,可根据实际需要:对采用何种通信协议连接管理对象、对象的属性有哪些、每个属性的获取方法是什么等,根据实际需要进行增加、删除、修改,保证了监控模型具有可扩展性。
在步骤1中所述的属性包括:
配置属性:表明管理对象的配置信息;状态属性:表明监控对象的当前状态;性能属性:展现管理对象性能随时间连续变化的参数。
在步骤2中,所述的连接管理对象、获取属性和结果解析等动作都用对应的java对象实现,通过对象的组合使用,实现对管理对象属型的访问获取。
在步骤2中,所使用的通信协议是ssh、telnet、JDBC、JMX、SNMP、Tuxedo ATMI、SQL*Net或特定的私有通信协议。
在步骤2中,获取属性设定的动作可以是:执行某个操作系统命令行、访问mib库、执行某个SQL语句、执行某个方法调用等,具体动作可结合实际的监控设备具体决定。
具体实施方式
本发明提出的通用监控模型引入以下的概念:
1.通用监控对象
首先,从概念上,引入通用监控对象的概念,用以将现实世界中的各种监控对象统一抽象为通用监控对象(Mbean,也称管理对象)进行描述。每个管理对象包括:能够监控到的属性(即监控指标)、获取属性的方法(即获取监控指标值的方法)。
●属性
每个管理对象都有若干属性,即各种监控指标。在本模型中,将属性延伸细分为:
■配置属性:管理对象的配置信息,一般变化较少,只有当系统配置发生变化时,配置属性发生变化(如:表空间的大小)。针对这类属性的值,一般是因需采集。
■状态属性:管理对象的一组离散的状态值,表明监控对象的当前状态(如:表空间的离线状态、在线状态等)。一般也是因需采集。
■性能属性:展现管理对象性能变化的参数,是随时间连续变化的属性(如:CPU利用率,随时间变化而变化)。一般需要持续采集监控。
●获取属性的方法
是指如何连接到管理对象上(通过某种通信协议),如何获取监控指标,如何解析监控指标的值等。(参见通用协议访问)
2.通用访问协议
通用协议访问实现了获取属性的方法。任何一个管理对象属性的获得包括三个步骤:连接管理对象、获取属性、结果解析。其中:
●连接管理对象都是通过一定的通信方式进行的,如:ssh、telnet、JDBC、JMX、SNMP、Tuxedo ATMI、SQL*Net等,也可以是特定的私有通信协议;
●获取属性则通过一定的动作完成,如:执行某个命令行、访问mib库、执行某个SQL语句、执行某个方法调用等;
●结果解析则可以包括:诸如字符串解析、拼装;数值结果的各种运算等。
●在通用协议访问模型中,上述三部分都有对应的对象实现,通过各种对象的组合使用,实现对管理对象属型的访问获取。
3.通过配置方式定义管理对象及其访问
当对现实中的某类监控对象进行监控时,按照通用监控模型,可采用通用监控对象描述该类设备。描述时,可按照一定的语法要求,通过编写配置文件的方式进行。完成配置文件编写后,可通过程序生成与该类设备对应的java程序类。该java程序类每创建一个实例对象,即与现实中该类设备的一个实例设备对应,通过对该Java对象的控制,可实现对实际设备的监控。
4.配置文件说明
如上所述,针对某类监控对象进行监控时,采用XML文件方式进行监控对象的定义。在XML文件中,定义了对某类监控对象进行访问时的协议是什么,该类监控对象具有哪些监控属性,每个属性的获取方式是什么等。
XML文件的总体结构说明如下:
<ModelMBeanWrapper>
  <ModelMBeanDescriptor>
   该类监控对象总体描述,名称、描述信息;
</ModelMBeanDescriptor>
<constructor>
   该类监控对象的java类的初始化参数,包括:可能会使用到的通信协议
   所对应的java类有哪些,监控结果解析规则的java类的声明;
</constructor>
 <attributeDescriptors>
   该类监控对象的各种属性定义,包括属性名称、属性种类:配置属性/状
   态属性/性能属性,数据类型、属性的显示名称、属性的获取方法名称、
   其它辅助信息;
</attributeDescriptors>
<operationDescriptors>
   由若干Operation组成,每个Operation定义了针对实际监控对象进行监
   控时的相关动作,包括:与设备的连接动作、断开动作、每个属性的获
   取方法;
   在每个Operation内部,由若干WrapperMethod组成,每个WrapperMethod
   是该通用监控对象java类初始化时所声明的java类所提供的方法,包括
   通信协议java类所提供的方法或结果解析java类所提供的方法;
</operationDescriptors>
</ModelMBeanWrapper>
在上述文件中,由于采用什么协议、具有哪些属性、每个属性的获取方法等,均可根据实际需要进行增加、删除、修改,因此,保证了监控模型具有很好的可扩展性。
实施例1
当使用上述模型进行Linux系统监控时,需要确定Linux属性有哪些、通过什么协议连接Linux系统,如何获取属性等问题。以下举例作详细说明。
1.Linux系统的属性举例
Linux系统的监控指标可划分为配置属性、状态属性、性能属性。按照上述关于配置属性、状态属性和性能属性的划分原则,各属性举例如下:
●配置属性
用于描述Linux系统的配置信息,一般不随时间而变化的信息,例如:操作系统版本、CPU类型等信息。
●状态属性
指反应系统的状态的指标,具有离散值的特征。如:某进程的数目,为1或0,分别标明该进程存在或不存在。
●性能属性
反应系统性能变化的指标,随时间连续变化的参数指标。如:CPU总使用率等。
2.访问协议
针对Linux的监控,可通过Telnet协议或Ssh协议进行访问,需在Unix系统中建立一个系统用户,该用户能够执行相关操作系统命令获取监控指标。
3.属性获取方法
针对每个属性,通过执行相关的操作系统命令,即可获得各个监控指标。例如:
●配置属性
■操作系统版本:通过执行“uname-o-r”Linux系统命令,取返回结果的第一行第一列即可得到操作系统版本信息。
■CPU类型:通过执行“uname-p”Unix系统命令,通过Linux的awk命令取返回结果中包含cputype信息的一行,即可获得CPU类型信息。
●状态属性
■进程状态:通过执行“ps-ef|grep$1|wc-1”Linux系统命令,获取所关心进程的当前数目。
●性能属性
■CPU总使用率:通过执行“sar-u12|grep Average”Linux系统命令,通过获取返回结果第一行第3列获得CPU总使用率信息。
4.配置文件举例
配置文件内容如下:
<ModelMBeanWrapper>
//以下部分用于该通用监控对象的总体描述
<ModelMBeanDescriptor
   name="LinuxOsManagement"displayName="LinuxOSManBySSH"
   visibility="1"persistPolicy="Never"persistPeriod="0"
   description="management for Linux OS by SSH protocol"
   presentationString="notValid"
/>
//以下用于描述该通用监控对象所对应的java类初始化所需要的信息,包括:该通用对象监控时使用的通信协议、以及监控中所获取结果的解析方法。
<constructor>
//初始化参数
    <params>
        <param name="CommandConfig"value="ShellCommandsForLinux_2.6_.xml"
type="java.lang.String"/>//执行外部Linux命令的文件,获取各个参数时执行的操作系统命令在该文件中
定义
    </params>
    //定义所使用的预定义类,包括使用SSH协议连接监控对象,获取结果后的各种解析方法。
    <objectReferences>
      //使用ssh协议连接监控对象
       <objectRefclassname="cn.com.dhit.management.mbean.ssh.SshMan"name="handle"
    type="object">
             <param name="CommandConfig"type="java.lang.String"/>
        </objectRef>
        //通过使用ToolUtil包中的各个函数进行结果解析。
        <objectRefclassname="cn.com.dhit.management.mbean.misc.ToolUtil"name="util"type="object"
/>
    </objectReferences>
</constructor>
//以下定义该监控对象所具有的各个属性
<attributeDescriptors>
     //操作系统版本属性的定义,包括名称、数据类型、描述等,该属性通过后面的getOSInformation方法
获得,Flag=0表明该属性是配置属性。
    <attribute name="OSVersion"type="java.lang.String"description="操作系统版本"
               isMain="true"isReadable="true"isWritable="false"isIs="false"
               displayName="操作系统版本"getMethod="getOSInformation"Flag="0"
    />
    //CPU类型的配置属性定义,包括名称、数据类型、描述等,该属性通过后面的getCpuType方法获得,
Flag=0表明该属性是配置属性。
    <attribute name="CPUType"type="java.lang.String"description="CPU类型"
               isMain="true"isReadable="true"isWritable="false"isIs="false"
               displayName="CPU类型"getMethod="getCpuType"Flag="0"
    />
    //CPU总使用率性能属性定义。包括名称、数据类型、描述等,该属性通过后面的getCpuTotal方法获
得,Flag=2表明该属性是配置属性。
    <attribute name="CpuTotal"type="java.lang.Float"description="CPU总使用率"
               unit="%"isRead able="true"isWritable="false"isIs="false"
               displayName="Cpu总使用率"getMethod="getCpuTotal"Flag="2"
  />
</attributeDescriptors>
//以下定义了该通用监控对象所提供的各种方法,包括连接实际监控对象的方法,上述各个属性的获取方法等。在每个方法内,调用了ssh协议类所提供的获取监控指标值的方法,获取指标值后的进一步解析处理,通过调用Util包提供的方法进行。
<operationDescriptors>
   //与监控设备连接参数设置,调用SSH协议类提供的setParams方法
   <operation name="setParams"operResponseType="void">
    <signatures>//定义传入参数
       <signature name="NM_IP"displayName="设备地址"type="java.lang.String"/>
       <signature name="username"displayName="访问帐号"type="java.lang.String"/>
       <signature name="passwd"displayName="访问口令"type="java.lang.String"defaultValue="public"/>
    </signatures>
     <wrapperMethods>//顺序调用如下的各个方法,每个方法是ssh协议模块提供的方法
         <wrapperMethod objectRef="handle"method="setParams"returnType="void">
            <params>
            <param name="hostaddress"type="java.lang.String"valueRef="reference"value="NM_IP"/>
                 <param name="username"type="java.lang.String"valueRef="reference"
value="username"/>
                 <param name="passwd"type="java.lang.String"valueRef="reference"value="passwd"/>
               </params>
          </wrapperMethod>
     </wrapperMethods>
   </operation>
   //与监控对象连接的方法,调用SSH协议类提供的Connect方法
   <operationname="Connect"operResponseType="void">
       <signatures></signatures>
       <wrapperMethods>
          <wrapperMethod objectRef="handle"method="Connect"returnType="void">
             <params></params>
          </wrapperMethod>
       </wrapperMethods>
   </operation>
   //与监控对象断开的方法,调用SSH协议类提供的disConnect方法
   <operation name="disConnect"operResponseType="void">
     <signatures></signatures>
     <wrapperMethods>
        <wrapperMethod objectRef="handle"method="disConnect"returnType="void">
           <params></params>
        </wrapperMethod>
     </wrapperMethods>
   </operation>
   //判断与监控对象是否连接,调用SSH协议类所提供的isConnect方法
   <operation name="isConnected"operResponseType="java.lang.Boolean">
      <signatures></signatures>
     <wrapperMethods>
        <wrapperMethod objectRef="handle"method="isConnect
                   returnType="java.lang.Boolean">
           <params></params>
        </wrapperMethod>
     </wrapperMethods>
 </operation>
//获取操作系统属性信息,调用了SSH协议类所提供的getSingleValue方法,该方法执行了在ShellCommandsForLinux_2.6_.xml文件中定义的与osinfo相关的命令行,获取操作系统信息
<operationname="getOSInformation"operResponseType="java.lang.String">
   <signatures></signatures>
   <wrapperMethods>
        <wrapperMethod objectRef="handle"method="getSingleValue"returnType="java.lang.Object">
          <params>
            <param name="ItemName"type="java.lang.String"valueRef="constant"value="osinfo"/>
          </params>
        </wrapperMethod>
   </wrapperMethods>
</operation>
//获取CPU类型属性信息,调用了SSH协议类所提供的getSingleValue方法,该方法执行了在ShellCommandsForLinux_2.6_.xml文件中定义的与cputype相关的命令行,获取CPU类型信息
<operation name="getCpuType"operResponseType="java.lang.String">
   <signatures></signatures>
   <wrapperMethods>
      <wrapperMethod objectRef="handle"method="getSingleValue"returnType="java.lang.Object">
          <params>
             <param name="ItemName"type="java.lang.String"valueRef="constant"value="cputype"/>
          </params>
      </wrapperMethod>
   </wrapperMethods>
</operation>
//获取CPU总利用率信息,调用了SSH协议类所提供的getMutiValues方法,该方法执行了在ShellCommandsForLinux_2.6_.xml文件中定义的与cpu_total相关的命令行,获取CPU利用率信息。由于获的信息为分项CPU利用率,并不能直接解释为总利用率,因此,还需调用SSH协议类所提供的sumValues方法,将各个获取结过求和,再调用SSH协议类所提供的calPercent方法,计算百分比。
<operation name="getCpuTotal"operResponseType="java.lang.Float">
   <signatures></signatures>
   <wrapperMethods>
   //取CPU分项利用率值
   <wrapperMethod objectRef="handle"method="getMutiValues"returnType="[Ljava.lang.Object;"
            paramName="tempValues">
       <params>
          <param name="ItemName"type="java.lang.String"valueRef="constant"value="cpu_total"/>
             </params>
        </wrapperMethod>
       //分项求和
        <wrapperMethod objectRef="handle"method="sumValues"returnType="java.lang.Object"
paramName="tempSumValue">
             <params>
                <param name="array"type="[Ljava.lang.Object;"valueRef="reference"value="tempValues"/>
                 <param name="sequence"type="java.lang.Integer"valueRef="constant"value="0"/>
                <param name="retType"type="java.lang.String"valueRef="constant"value="java.lang.Float"/>
             </params>
        </wrapperMethod>
       //计算百分比
        <wrapperMethod objectRef="util"method="calPercent"returnType="java.lang.Object">
           <params>
               <param name="srcNumber"type="java.lang.Number"valueRef="reference"
value="tempSumValue"/>
               <param name="rettype"type="java.lang.String"valueRef="constant"value="java.lang.Float"/>
               <param name="dicision"type="java.lang.Integer"valueRef="constant"value="100"/>
           </params>
       </wrapperMethod>
     </wrapperMethods>
   </operation>
</operationDescriptors>
</ModelMBeanWrapper>
实施例2
当使用通用监控模型进行Oracle系统监控时,需要确定属性有哪些、通过什么协议连接,如何获取属性等问题。以下举例作详细说明。
1.Oracle系统的属性举例
Oracle系统的监控指标可划分为配置属性、状态属性、性能属性。按照配置属性、状态属性和性能属性的划分原则,各属性举例如下:
●配置属性
用于描述Oracle系统的配置信息,一般不随时间而变化的信息,例如:数据库名称、数据库版本等信息。
●状态属性
指反应系统的状态的指标,具有离散值的特征。如:实例状态、表空间属性等。
●性能属性
反应系统性能变化的指标,随时间连续变化的参数指标。如:内存排序比、硬分析百分比、库缓存命中率等。
2.访问协议
针对Oralce的监控,可通过JDBC协议进行访问,需在Oracle数据库中建立一个具有系统只读权限的DBA用户,该用户能够执行相关SQL命令获取监控指标。
3.属性获取方法
针对每个属性,通过执行相关的SQL命令,即可获得各个监控指标。例如:
●配置属性
■数据库名称
通过执行“select name from v$database”SQL命令,取返回结果即可得到数据库名称信息。
■数据库版本
通过执行“select banner from v$version”SQL系统命令,取返回结果即可得到数据库版本信息。
●状态属性
■实例状态
通过执行“select status from v$instance”SQL系统命令,获取数据库实例的当前状态。
■表空间属性
通过执行“select tablespace_name,max_extents,status fromdba_tablespaces”SQL系统命令,获取表空间的属性,包括表空间名、扩展段、表空间当前状态等。
●性能属性
■内存排序比
通过执行“select mem.value/(mem.value+dk.value)*100 fromv$sysstat mem,v$sysstat dk where mem.name like′sorts(memory)′anddk.name like′sorts(disk)′”SQL系统命令,获取结果。
■库缓存命中率
通过执行“select(1-ph.value/(db.value+con.value))*100fromv$sysstat ph,v$sysstat db,v$sysstat con where ph.name like′physicalreads′and db.name like′db block gets′and con.name like′consistent gets′”SQL系统命令,获取结果。
4.配置文件举例
<ModelMBeanWrapper>
//以下部分用于该通用监控对象的总体描述
<ModelMBeanDescriptor
      name="Oracle_8_9_10"displayName="Oracle Device Management"visibility="1"
   persistPolicy="Never"persistPeriod="0"description="management for the General Oracle
   8,9,10g device"presentationString="notValid"
/>
//以下用于描述该通用监控对象所对应的java类初始化所需要的信息,包括:该通用对象监控时使用的通信
协议、以及监控中所获取结果的解析方法。
<constructor>
   <params>
     <param name="drivername"value="oracle.jdbc.driver.OracleDriver"type="java.lang.String"/>
   </params>
   <objectReferences>
     <objectRefclassname="com.wisentsoft.management.commons.jdbc.JdbcV2Support"name="oracle"
type="object">
        <param name="drivername"type="java.lang.String"/>
     </objectRef>
     <objectRefclassname="cn.com.dhit.management.event.listener.SNMPEventListener"
name="snmpTrapLis"type="object"/>
   </objectReferences>
</constructor>
//以下定义该监控对象所具有的各个属性
<attributeDescriptors>
    <attribute name="DbName"type="java.lang.String"description="数据库名称"
             isReadable="true"isWritable="false"isIs="false"displayName="数据库名称"
             getMethod="getDbName"Flag="0"isMain="true"/>
    <attribute  name="DbVersion"type="java.lang.String"description="数据库版本"
             isReadable="true"isWritable="false"isIs="false"displayName="数据库版本"
             getMethod="getDbVersion"Flag="0"isMain="true"/>
    <attribute  name="InstanceStatus"type="java.lang.String"desc ription="实例状态"
             isReadable="true"isWritable="false"isIs="false"displayName="实例状态"
             getMethod="getInstanceStatus"Flag="1"/>
    <attribute  name="TablespaceAttr"type="javax.management.openmbean.TabularData"
                displayName="表空间的各项属性"description="表空间的各项属性"
                isReadable="true"isWritable="false"isIs="false"
                getMethod="getTablespaceAttr"getterKeys="fetchTablespaceAttr"Flag="0"/>
       <columnAttribute name="tablespace_name"type="java.lang.String"displayName="表空间名称"
Flag="0"isKey="true"isReadable="true"isWritable="false"isIs="false"/>
       <columnAttribute name="max_extents"type="java.lang.Long"displayName="最大扩展数"Flag="0"
isKey="false"getMethod="fetchTBmax_extents"isReadable="true"isWritable="false"isIs="false"unit="个"/>
       <columnAttribute name="status"type="java.lang.String"displayName="状态"Flag="1"isKey="false"
getMethod="fetchTBstatus"isReadable="true"isWritable="false"isIs="false"/>
    </attribute>
    <attribute name="LibraryCacheHit"type="java.lang.Float"description="库缓存命中率"
             isReadable="true"isWritable="false"isIs="false"displayName="库缓存命中率"
             getMethod="getLibraryCacheHit"Flag="2"unit="%"
    />
    <attribute name="SortMemoryRatio"type="java.lang.Float"description="内存排序比"
             isReadable="true"isWritable="false"isIs="false"displayName="内存排序比"
             getMethod="getSortMemoryRatio"Flag="2"unit="%"
    />
</attributeDescriptors>
<operationDescriptors>
   //与监控设备连接参数设置,调用SSH协议类提供的setParams方法
   <operation name="setParams"operResponseType="void">
      <signatures>
        <signature name="NM_IP"displayName="设备地址"type="java.lang.String"/>
        <signature name="sid"displayName="OracleSID"type="java.lang.String"/>
        <signature name="port"displayName="服务端口号"type="java.lang.String"defaultValue="1521"/>
        <signature name="user"displayName="DBA帐号名称"type="java.lang.String"/>
        <signature name="Passwd"displayName="DBA帐号口令"type="java.lang.String"/>
      </signatures>
      <wrapperMethods>
         <wrapperMethod  objectRef="oracle"method="replaceFirst"returnType="java.lang.String"
                        paramName="jdbcUrl0">
            <params>
                <param  name="template"type="java.lang.String"valueRef="constant"
                       value="jdbc:oracle:thin:@?:?:?"/>
                <param  name="hostaddress"type="java.lang.Object"valueRef="reference"
                       value="NM_IP"/>
            </params>
         </wrapperMethod>
         <wrapperMethod  objectRef="oraclc"method="replaceFirst"returnType="java.lang.String"
                       paramName="jdbcUrl1">
              <params>
                 <param name="template"type="java.lang.String"valueRef="reference"
                        value="jdbcUrl0"/>
                 <param name="dbport"type="java.lang.Object"valueRef="reference"value="port"/>
              </params>
         </wrapperMethod>
         <wrapperMethod  objectRef="oracle"method="replaceFirst"returnType="java.lang.String"
                         paramName="jdbcUrl2">
              <params>
                 <param  name="template"type="java.lang.String"valueRef="reference"
                       alue="jdbcUrl1"/>
                 <param name="db_sid"type="java.lang.Object"valueRef="reference"value="sid"/>
              </params>
         </wrapperMethod>
         <wrapperMethod objectRef="oracle"method="setParams"returnType="void">
              <params>
                  <param name="jdbcurl"type="java.lang.String"valueRef="reference"
                          value="jdbcUrl2"/>
                 <param name="user"type="java.lang.String"valueRef="reference"value="user"/>
                 <param name="Passwd"type="java.lang.String"valueRef="reference"value="Passwd"/>
              </params>
        </wrapperMethod>
        <wrapperMethod objectRef="snmpTrapLis"method="setParams"returnType="void">
             <params>
                <param  name="server"type="javax.management.MBeanServer"
                       valueRef="instanceObj"value="MBeanServer"/>
                <param  name="wrapObject"
                       type="javax.management.modelmbean.RequiredModelMBean"
                       valueRef="wrapperObj"value="this"/>
                <param  name="observedObject"type="javax.management.ObjectName"
                       valueRef="instanceObj"value="ObjectName"/>
                <param  name="params"type="java.lang.String"valueRef="reference"
                       value="NM_IP"/>
             </params>
        </wrapperMethod>
        <wrapperMethod  objectRef="snmpTrapLis"method="addKeyParam"returnType="void">
             <params>
                  <param name="key"type="java.lang.String"valueRef="constant"value="sid"/>
                  <param name="value"type="java.lang.String"valueRef="reference"value="sid"/>
             </params>
          </wrapperMethod>
          <wrapperMethod objectRef="snmpTrapLis"method="addKeyParam"returnType="void">
             <params>
                  <param name="key"type="java.lang.String"valueRef="constant"
                        alue="WISENT-SM1:DeviceType"/>
                  <param name="value"type="java.lang.String"valueRef="constant"value="Sql8i"/>
             </params>
        </wrapperMethod>
     </wrapperMethods>
</operation>
//与监控对象连接的方法,调用SSH协议类提供的Connect方法
<operation name="Connect"operResponseType="void">
    <signatures></signatures>
    <wrapperMethods>
        <wrapperMethod objectRef="oracle"method="Connect"returnType="void">
            <params></params>
        </wrapperMethod>
        <wrapperMethod objectRef="snmpTrapLis"method="Connect"returnType="void">
            <params></params>
        </wrapperMethod>
    </wrapperMethods>
</operation>
//与监控对象断开的方法,调用SSH协议类提供的disConnect方法
 <operation name="disConnect"operResponseType="void">
     <signatures></signatures>
     <wrapperMethods>
         <wrapperMethod objectRef="oracle"method="disConnect"returnType="void">
              <params></params>
         </wrapperMethod>
         <wrapperMethod objectRef="snmpTrapLis"method="disConnect"returnType="void">
              <params></params>
          </wrapperMethod>
     </wrapperMethods>
</operation>
//判断与监控对象是否连接,调用SSH协议类所提供的isConnect方法
<operation name="isConnected"operResponseType="java.lang.Boolean">
    <signatures></signatures>
    <wrapperMethods>
       <wrapperMethod objectRef="oracle"method="isConnected"returnType="java.lang.Boolean">
           <params></params>
       </wrapperMethod>
    </wrapperMethods>
</operation>
//获取数据库名称
<operation name="getDbName"operResponseType="java.lang.String">
   <signatures></signatures>
   <wrapperMethods>
       <wrapperMethod objectRef="oracle"method="getSingleValue"returnType="java.lang.Object">
             <params>
                 <param name="sql"type="java.lang.String"valueRef="constant"
                        value="select name from v$database"/>
                 <param name="retType"type="java.lang.String"valueRef="constant"
                        value="java.lang.String"/>
             </params>
       </wrapperMethod>
   </wrapperMethods>
 </operation>
//获取数据库版本
<operation name="getDbVersion"operResponseType="java.lang.String">
     <signatures></signatures>
     <wrapperMethods>
         <wrapperMethod objectRef="oracle"method="getSingleValue"returnType="java.lang.Object">
             <params>
                <param name="sql"type="java.lang.String"valueRef="constant"
                       value="select bannerfrom v&version"/>
                <param name="retType"type="java.lang.String"valueRef="constant"
                       value="java.lang.String"/>
             </params>
         </wrapperMethod>
     </wrapperMethods>
</operation>
//获取数据库实例状态
<operation name="getInstanceStatus"operResponseType="java.lang.String">
     <signatures></signatures>
     <wrapperMethods>
        <wrapperMethod objectRef="oracle"method="getSingleValue"returnType="java.lang.Object">
           <params>
               <param name="sql"type="java.lang.String"valueRef="constant"
                     value="select status from v$instance"/>
               <param name="retType"type="java.lang.String"valueRef="constant"
                    value="java.lang.String"/>
           </params>
        </wrapperMethod>
    </wrapperMethods>
</operation>
//获取表空间各项属性
<operationname="getTablespaceAttr"perResponseType="javax.management.openmbean.TabularData">
     <signatures/>
     <wrapperMethods>
         <wrapperMethod objectRef="oracle"method="getTabularData"
                         returnType="javax.management.openmbean.TabularData">
             <params>
                 <param name="sql"type="java.lang.String"valueRef="constant"
                       value="select tablespace_name,max_extents,status from dba_tablespaces"/>
                 <param name="TablespaceAttr"type="javax.management.openmbean.TabularType"
                       valueRef="attributeObj"value="TabularType"/>
             </params>
         </wrapperMethod>
    </wrapperMethods>
</operation>
//获取内存排序比
<operation name="getSortMemoryRatio"operResponseType="java.lang.Float">
      <signatures></signatures>
      <wrapperMethods>
         <wrapperMethod objectRef="oracle"method="getSingleValue"returnType="java.lang.Object">
            <params>
                  <paramname="sql"type="java.lang.String"valueRef="constant"
                       value="select mem.value/(mem.value+dk.value)*100
                             from v$sysstat mem,v$sysstat dk
                             where mem.name like′sorts(memory)′and dk.name like′sorts(disk)″′/>
                  <param name="retType"type="java.lang.String"valueRef="constant"
                       value="java.lang.Float"/>
            </params>
           </wrapperMethod>
      </wrapperMethods>
 </operation>
//获取库缓存命中率
<operation name="getLibraryCacheHit"operResponseType="java.lang.Float">
    <signatures></signatures>
    <wrapperMethods>
        <wrapperMethod objectRef="oracle"method="getSingleValue"returnType="java.lang.Object">
            <params>
                 <param name="sql"type="java.lang.String"valueRef="constant"
                    value="select(sum(pins)-sum(reloads))/sum(pins)*100fromv$librarycache"/>
                 <param name="retType"type="java.lang.String"valueRef="constant"
                        value="java.lang.Flo at"/>
             </params>
         </wrapperMethod>
    </wrapperMethods>
   </operation>
</operationDescriptors>
</ModelMBeanWrapper>。

Claims (8)

1、一种利用通用监控模型对信息系统监控的方法,其特征在于包括步骤:
(1)将信息系统中的各种监控对象统一设定为通用管理对象进行描述,每个管理对象包括:能够监控到的属性、获取属性的方法;
(2)使用通用访问协议实现获取属性的方法,其中:连接管理对象是通过使用通信协议方式进行的;获取属性则通过设定的动作完成;结果解析包括字符串解析、拼装或对数值结果的运算;
(3)通过配置方式定义管理对象及其访问,按照一定的语法要求,通过编写配置文件的方式对管理对象进行描述,完成配置文件编写后,通过程序生成与该类设备对应的java程序;该java程序每创建一个实例对象,即与现实中该类设备的一个实例设备对应,通过对该java对象的控制,可实现对实际设备的监控。
2、根据权利要求1所述的信息系统监控的方法,其特征在于,步骤3所述的配置文件采用XML文件。
3、根据权利要求2所述的信息系统监控的方法,其特征在于,所述XML文件的总体结构如下:
<ModelMBeanWrapper>
  <ModelMBeanDescriptor>
    该类监控对象总体描述,名称、描述信息;
  </ModelMBeanDescriptor>
  <constructor>
    该类监控对象的java类的初始化参数,包括:可能会使用到的通信协议
    所对应的java类有哪些,监控结果解析规则的java类的声明;
  </constructor>
  <attributeDescriptors>
   该类监控对象的各种属性定义,包括属性名称、属性种类:配置属性/状
   态属性/性能属性,数据类型、属性的显示名称、属性的获取方法名称、
   其它辅助信息;
</attributeDescriptors>
<operationDescriptors>
   由若干Operation组成,每个Operation定义了针对实际监控对象进行监
   控时的相关动作,包括:与设备的连接动作、断开动作、每个属性的获
   取方法;
   在每个Operation内部,由若干WrapperMethod组成,每个WrapperMethod
   是该通用监控对象java类初始化时所声明的java类所提供的方法,包括
   通信协议java类所提供的方法或结果解析java类所提供的方法;
</operationDescriptors>
</ModelMBeanWrapper>。
4、根据权利要求2所述的信息系统监控的方法,其特征在于,在所述XML文件中,根据实际需要对采用何种通信协议连接管理对象、对象有哪些属性、每个属性的获取方法是什么,根据实际需要进行增加、删除、修改,保证了监控模型具有可扩展性。
5、根据权利要求1所述的信息系统监控的方法,其特征在于,在步骤1中所述的属性包括:
配置属性:管理对象的配置信息;
状态属性:表明监控对象的当前状态;
性能属性:展现管理对象性能随时间连续变化的参数。
6、根据权利要求1所述的信息系统监控的方法,其特征在于,在步骤2中。所述的连接管理对象、获取属性和结果解析都有对应的java对象实现,通过对象的组合使用,实现对管理对象属型的访问获取。
7、根据权利要求1所述的信息系统监控的方法,其特征在于,在步骤2中,所使用的通信协议是ssh、telnet、JDBC、JMX、SNMP、Tuxedo ATMI、SQL*Net或特定的私有通信协议。
8、根据权利要求1所述的信息系统监控的方法,其特征在于,在步骤2中,获取属性设定的动作是执行操作系统命令行、访问mib库、执行SQL语句、执行方法调用。
CN2008101670414A 2008-10-09 2008-10-09 用于信息系统监控的通用监控模型技术 Expired - Fee Related CN101478445B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101670414A CN101478445B (zh) 2008-10-09 2008-10-09 用于信息系统监控的通用监控模型技术

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101670414A CN101478445B (zh) 2008-10-09 2008-10-09 用于信息系统监控的通用监控模型技术

Publications (2)

Publication Number Publication Date
CN101478445A true CN101478445A (zh) 2009-07-08
CN101478445B CN101478445B (zh) 2011-05-18

Family

ID=40839080

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101670414A Expired - Fee Related CN101478445B (zh) 2008-10-09 2008-10-09 用于信息系统监控的通用监控模型技术

Country Status (1)

Country Link
CN (1) CN101478445B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101667124A (zh) * 2009-10-15 2010-03-10 上海宝信软件股份有限公司 基于对象模型对监控设备进行配置的系统及其方法
CN102354296A (zh) * 2011-11-10 2012-02-15 摩卡软件(天津)有限公司 一种可扩展监控资源的监控系统和方法
CN103516555A (zh) * 2013-10-23 2014-01-15 中国科学院信息工程研究所 网络设备监控方法及系统
CN103942135A (zh) * 2014-04-10 2014-07-23 国家电网公司 一种基于sap平台的性能监控方法
CN104503880A (zh) * 2014-12-16 2015-04-08 新余兴邦信息产业有限公司 一种MySQL数据库监控选项脚本的实现方法及装置
CN103092736B (zh) * 2011-11-08 2016-05-11 北大方正集团有限公司 服务程序监控的方法及装置
CN107590253A (zh) * 2017-09-19 2018-01-16 郑州云海信息技术有限公司 一种针对MySQL数据库配置安全性的自动化检测方法
CN109347689A (zh) * 2018-12-03 2019-02-15 无锡华云数据技术服务有限公司 一种设备监控方法及系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6466974B1 (en) * 1998-12-04 2002-10-15 Sun Microsystems, Inc. Environment for creating and managing network management software objects
CN100488130C (zh) * 2005-07-11 2009-05-13 华为技术有限公司 一种监控装置、监控系统和监控方法
CN100466664C (zh) * 2005-12-29 2009-03-04 华为技术有限公司 一种实现实时监控告警的通信系统及其方法
CN101170712B (zh) * 2007-11-27 2010-06-02 中兴通讯股份有限公司 一种实现智能网业务监听的方法及系统
CN101227348B (zh) * 2008-02-02 2010-09-01 杭州华三通信技术有限公司 一种对网络设备的性能统计数据进行采集的方法和服务器

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101667124A (zh) * 2009-10-15 2010-03-10 上海宝信软件股份有限公司 基于对象模型对监控设备进行配置的系统及其方法
CN103092736B (zh) * 2011-11-08 2016-05-11 北大方正集团有限公司 服务程序监控的方法及装置
CN102354296A (zh) * 2011-11-10 2012-02-15 摩卡软件(天津)有限公司 一种可扩展监控资源的监控系统和方法
CN102354296B (zh) * 2011-11-10 2016-05-04 摩卡软件(天津)有限公司 一种可扩展监控资源的监控系统和方法
CN103516555A (zh) * 2013-10-23 2014-01-15 中国科学院信息工程研究所 网络设备监控方法及系统
CN103942135A (zh) * 2014-04-10 2014-07-23 国家电网公司 一种基于sap平台的性能监控方法
CN103942135B (zh) * 2014-04-10 2016-06-08 国家电网公司 一种基于sap平台的性能监控方法
CN104503880A (zh) * 2014-12-16 2015-04-08 新余兴邦信息产业有限公司 一种MySQL数据库监控选项脚本的实现方法及装置
WO2016095551A1 (zh) * 2014-12-16 2016-06-23 新余兴邦信息产业有限公司 一种MySQL数据库监控选项脚本的实现方法及装置
CN107590253A (zh) * 2017-09-19 2018-01-16 郑州云海信息技术有限公司 一种针对MySQL数据库配置安全性的自动化检测方法
CN109347689A (zh) * 2018-12-03 2019-02-15 无锡华云数据技术服务有限公司 一种设备监控方法及系统

Also Published As

Publication number Publication date
CN101478445B (zh) 2011-05-18

Similar Documents

Publication Publication Date Title
CN101478445B (zh) 用于信息系统监控的通用监控模型技术
US7769835B2 (en) Method and system for identifying and conducting inventory of computer assets on a network
Fox et al. Cluster-based scalable network services
US7412709B2 (en) Method and apparatus for managing multiple data processing systems using existing heterogeneous systems management software
US7574343B2 (en) System and method for logical modeling of distributed computer systems
US7284054B2 (en) Systems, methods, and articles of manufacture for aligning service containers
CN100530160C (zh) 分布式计算系统的架构和分布式应用程序的自动设计,部署及管理
US7779419B2 (en) Method and apparatus for creating templates
US8015282B2 (en) System and method to synthesize custom metric attributes from a set of metric attributes associated with an application in an application server environment
US8799448B2 (en) Generating rule packs for monitoring computer systems
US20080033972A1 (en) Common Information Model for Web Service for Management with Aspect and Dynamic Patterns for Real-Time System Management
WO2013074249A1 (en) Systems and methods for dynamic service integration
US8458693B2 (en) Transitioning from static to dynamic cluster management
US20140115184A1 (en) Remotely managing enterprise resources
Baker et al. GridRM: an extensible resource monitoring system
US20050027842A1 (en) Information gathering tool for systems administration
US7275250B1 (en) Method and apparatus for correlating events
CN1326035C (zh) 在移动应用程序环境中使用的产品
Deri Surfin'network resources across the Web
US7734640B2 (en) Resource discovery and enumeration in meta-data driven instrumentation
CN107491360B (zh) 对数据表中记录进行分级别冗余存储的方法
US20240036910A1 (en) Meta-level management system that aggregates information and functionalities of computational-resource management systems and that provides new management functionalities
US20240037495A1 (en) Meta-level management system that aggregates information and functionalities of computational-resource management systems and that provides new management functionalities
US20060085542A1 (en) System monitoring in multi-tier application environments
Chao Design and Analysis of Software Application Framework Based on Web and Database Algorithm

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20090708

Assignee: Beijing Lianhua letter Technology Co., Ltd.

Assignor: Bian Xudong

Contract record no.: 2012990000663

Denomination of invention: General monitoring model technique used for information system monitoring

Granted publication date: 20110518

License type: Exclusive License

Record date: 20120912

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model
ASS Succession or assignment of patent right

Owner name: BEIJING WISENTSOFT TECHNOLOGY CO., LTD.

Free format text: FORMER OWNER: BIAN XUDONG

Effective date: 20131017

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100029 CHAOYANG, BEIJING TO: 100083 HAIDIAN, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20131017

Address after: 100083, room 1, building 18, Zhongguancun Road, Haidian District, Beijing,

Patentee after: Beijing Lianhua letter Technology Co., Ltd.

Address before: 100029, Hua Bei building, No. 29, Third Ring Road, Beijing, B-502

Patentee before: Bian Xudong

DD01 Delivery of document by public notice

Addressee: Beijing Lianhua letter Technology Co., Ltd.

Document name: Notification to Pay the Fees

DD01 Delivery of document by public notice
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110518

Termination date: 20171009

CF01 Termination of patent right due to non-payment of annual fee
DD01 Delivery of document by public notice

Addressee: Chen Zhenyu

Document name: Notification of Termination of Patent Right

DD01 Delivery of document by public notice