JMX学习-设备层

 1.JMX:网络管理规范

JMX(Java Management Extension Instrumentation and Agent Specification) 是业界广泛合作创建一套规范的成果,它描述可扩展的体系结构、API 和一组使用 Java 编程语言用于网络管理的分布式服务,它利用了 Java 平台的网络管理能力。最新的规范是 1.4。

2.JMX 的体系结构和操作模型

JMX 的体系结构和操作模型旨在满足下列目标:

•可伸缩性:适应从管理少数设备或服务到管理因特网时代的企业可能拥有的数万个可管理端点的能力 

•旧系统集成和兼容性:与现有 NMS 或 EMS 解决方案以及与可能不支持 JMX 的旧的可管理端点协作的能力 

•低成本实现:无需大量设计和编码工作,即可轻松地将 JMX 兼容性设计到现有软件产品和设备中   

在 JMX 体系结构中,采用三级分而治之的体系结构化方法来降低可伸缩网络管理的复杂性。 

图1说明了这三个松散耦合的层。它们是:

•设备层(Instrumentation Level)  设备层的主要任务就是对资源进行封装,使之成为可管理资源。所谓封装,就是通过将资源用类似Java Bean的方式描述出来。当资源以这种方式被封装成为可管理资源后,就被称作MBean(Management Bean)。

•代理层(Agent Level)  代理层位于装配层和分布式服务层之间,包含 MBean服务器,代理服务,连接器和协议适配器。代理层的作用体现在内外两方面:对内它通过MBean服务器(Managed Bean Server)维护着MBean的生命周期(包括注册和注销MBean),同时为所注册的MBean提供各类服务;对外通过连接器和协议适配器将已注册的MBean的管理接口暴露给外面的管理应用使用。

•分布式服务层(Distributed Service Level)  分布式服务层驻留着管理应用。管理应用通过连接器(Connector)与MBean服务器建立连接,并通过管理接口(Management Interface)去访问各个Mbean所包装的可管理资源。JMX Remote API Specification(JSR-166)对分布式服务层的应用给出了具体的规范。

图 1. JMX 体系结构的三层

3.设备层

该层定义了如何实现JMX管理资源的规范。一个JMX管理资源可以是一个Java应用、一个服务或一个设备,它们可以用Java开发,或者至少能用Java进行包装,并且能被置入JMX框架中,从而成为JMX的一个管理构件(Managed Bean),简称MBean。

管理构件可以是标准的,也可以是动态的,标准的管理构件遵从JavaBeans构件的设计模式;动态的管理构件遵从特定的接口,提供了更大的灵活性。 

该层还定义了通知机制以及实现管理构件的辅助元数据类。

4.MBean组件 

MBean是Management Bean的缩写,负责将可管理资源和服务封装成类似Java Bean的形式。通过MBean的特性可以访问可管理资源的各类信息。MBean对资源的封装体现在以下几个方面:

• 能被接触的属性值
• 能够执行的操作
• 能发出的通知事件
• 管理构件的构建器 

说明:JVM已经默认被封装成可管理对象。可通过它去访问内置的JVM,从而远程监控并管理JVM。

MBean在JMX的3层架构中位于设备层和代理层,这两层中的MBean有着不同的作用:位于设备层的MBean被用来封装可管理资源,而位于代理层的MBean被用来封装MBean服务器提供的代理服务(比如定时器服务和监视器服务)。

从MBean的实现上来看,MBean分为两种类型:标准(Standard)MBean和动态(Dynamic) MBean。其中动态MBean又进一步分为Open MBean和Model MBean,如图2所示。 

 

图2. MBean的分类 

a)标准(Standard)MBean 

标准MBean适用于描述那些数据稳定且可被事先准确定义的资源。标准MBean就是一个普通Java Bean,MBean服务器通过Java的内省(Introspection)机制来获知标准MBean的属性、事件和方法,只是这里内省所遵循的命名规定是JMX特有的命名约定。

这种类型的MBean最简单,它能管理的资源(包括属性,方法,时间)必须定义在接口中,然后MBean必须实现这个接口。而且这个MBean实现类中,必须至少有一个public的构造函数。 类中的getter和setter函数必须遵守命名标准。 类的命名也必须遵循一定的规范,例如我们的MBean为Hello,则接口必须为HelloMBean,而且是大小写敏感的。如果不这么做,可能会有javax.management.NotCompliantMBeanException抛出。

b)动态(Dynamic)MBean

动态MBean适用于描述那些要在运行时才可确切知道的数据结构的资源。与标准 MBean不同的是,动态MBean所暴露的管理接口不必事先确定,而是可根据运行时的情况,判断生成最终的管理接口。比如用以描述配置的MBean,可能需要通过对配置文件的分析来最终获得属性的名称和类型。

动态MBean的标志是实现了javax.manangement.DynamicBean接口。接口中的方法getMBeanInfo()所返回的就是要对外发布的管理接口。与标准MBean不一样的是,MBean服务器不是通过内省,而是通过getMBeanInfo()方法的返回值来获取动态Bean的管理接口。

  当在JMX agent里注册时候, dynamic MBean和standard MBean是同样被对待的。管理程序首先通过getMBeanInfo函数获得管理接口,得到属性和方法的名称.然后程序可以调用getters,setters和invoke方法.

    c)开放(Open)MBean

Open MBean是一类特殊的动态Mbean,它的特征是只针对特定对象,比如原始的数据类型(如int和float)和复合的数据类型。

  开发standard,dynamic和model MBean可以使用复杂类型。然而,为了让管理程序能够正确得到这些类型的状态,这些类的字节码必须让这些管理程序访问到。结果就是导致管理程序和被管理资源的耦合度很高。折衷的做法,就是要降低被管理的资源的可维护性。Open MBean的产生就是为了去掉这个需求。采用的方法是,Open MBean使用通用的数据类型。
管理程序和Open MBeans就可以共享和使用数据和方法,而不需要重新编译,重新组配或者动态链接。所以说,Open MBeans提高了管理系统的灵活性和可扩展性。

当管理程序无法访问agent的java classes的时候,就特别有用。即使管理程序和agent之间的连接不支持java序列化的时候,也是可以访问Open MBeans的。比如说,管理程序不是java开发的。 

d)模型(Model)MBean

  与标准和动态 MBean 相比,你可以不用写 MBean 类,只需使用 javax.management.modelmbean.RequiredModelMBean 即可。

RequiredModelMBean实现了ModelMBean接口,而ModelMBean扩展了DynamicMBean接口,因此与DynamicMBean相似,Model MBean的管理资源也是在运行时定义的。与DynamicMBean不同的是,DynamicMBean管理的资源一般定义在DynamicMBean中(运行时才决定管理那些资源),而model MBean管理的资源并不在MBean中,而是在外部(通常是一个类),只有在运行时,才通过set方法将其加入到model MBean中。Model MBean可以在MBean server中进行实例化,而且用户可以配置它来管理任何资源。

Model MBean可以被任何JMX兼容的agent来创建, 这是个很大的优势. 有很多特性:

  • 持久化
通过使用它的持久化机制, Model MBean可以在它所在的JMX agent的生命周期中得到存活. 每当一个Model MBean被创建的时候,它会检查判断是否从指定的位置加载了状态. 当配置一个Model MBean,你可以设置保存自身状态的间隔时间.
这个持久化机制实现是在sun的参考实现中提供的, 通过java的对象序列化功能来把当前ModelMBeanInfo对象的状态写到一个文件中的. 当然其他比如jdbc的持久化机制也是可以实现的.
  • 通知记录 Notification logging
这个特性允许Model MBean有能力对自己每个发出的通知进行记录. 当你需要对管理信息进行审计跟踪的时候,这个记录就很用.
  • 属性值缓存
Model MBean拥有的ModelMBeanInfo对象规定了属性缓存的策略.
  比如说,策略可以这样规定,当一个属性第一次被获取的时候,可以保存在本地,下一次的访问需求可以用本地的缓存来满足. 本地的缓存值多长时间被重新更新,这个间隔时间是缓存策略规定, 用户可以来设置。
  这个能力极大提高了程序的性能. 例如,Model MBean如果管理的是一个远程资源,它就可以把属性值保存在本地,这样就避免了重复地进行远程调用来获取属性的值.
  • 操作代理
Model MBean可以调用一个对象的接口方法,而不是直接调用被管理资源的接口.这个能力就可以让你提供方法来管理多个资源, 比如EJB, java远程对象, 或者其他对象的引用.
  • 一般通知

Model MBean提供方法来发出一般的纯信息的通知.    

5.JMX消息模型 

Notification(消息)被用来特指JMX 应用中的事件。JMX消息模型所描述的是MBean之间交换信息的机制。JMX消息模型包括消息播发器、JMX消息、侦听器(Listener)和过滤器等对象。JMX消息经过过滤器的筛选,由消息播发器发送给消息侦听器。JMX消息模型如图3所示。

  消息播发器和侦听器可以是任意对象,只要它们实现了相应的接口,MBean和MBean服务器都可以充当消息播发器或侦听器的角色。侦听器需支持NotificationListener接口,这个接口定义了事件被触发时侦听器所要完成的操作。消息播发器则要求维护一个所要通知的消息侦听器的列表,它通常实现了接口 NotificationBroadcaster或NotificationEmitter。过滤器须实现NotificationFilter 接口,并通过实现接口中的方法isNotificationEnabled(Notification notification)来决定过滤哪些消息。

 

图3 JMX消息模型 

  JMX消息是Notification类或其子类的实例,它封装了播发器所要通知侦听器的内容和相关信息,参见表1。

定义了五种类型的通知对象,对象中包含了与特定通知类型相关的信息:

MBeanServerNotification:MBeanServer用于通知MBean的监听程序进行注册或取消注册。

AttributeChangeNotification:当一个属性值改变时,MBeans用于通知监听程序。
MonitorNotification:当满足一组特定条件时,由监视服务发出。
RelationNotification:当一个关系被增加、修改或删除时,由关系服务发出。
TimerNotification:当定时程序计时时间到时,由定时程序服务发出。 

属  性

说  明

Source

消息播发器的实例引用

message

对Notification的说明

SequenceNumber

Notification实例的唯一标识

TimeStamp

时间戳。Notification何时生成

Type

用点标注法表示的JMX消息类型。比如JMX.MBean.registered

UserData

具体的要传达的信息

转载于:https://www.cnblogs.com/sundaweixy/archive/2012/02/22/2363927.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值