使用RESTful客户端监控WebLogic 12c

日期:2012-03-28 作者:刘长炯 出处:WebLogic中文博客

前言

众所周知最近几年随着Web 2.0的发展,基于Rest风格的Web服务已经得到了越来越多的支持和认可,例如Amazon AWS也正式提供传统的Web Service之外的Rest服务,Java EE 5也集成进了JSR 311的Rest服务规范。作为云计算时代诞生的WebLogic 12c,也正式在传统的JMX监控方案之外,提供了轻量级的基于Restful传输方案的监控选项,这可以让客户使用脚本语言如JavaScript,Ruby,Perl,PHP,或者使用Flex/Flash等开发监控客户端,或使用移动开发平台搭建12c监控客户端,当然也可以使用Jersey方便的开发相应的客户端。有很多的浏览器插件都支持直接测试Restful Web Service,如Advanced REST client Application,REST Console等。

基础知识

„ 什么是REST?

– Representational State Transfer,表征状态转移

– REST 从资源(由URI确定)的角度来观察整个网络,客户端的应用通过URI来获取资源的表征。用户访问不同的URI时,客户端应用不断地在转变着其状态,即REST。

„ REST的要求

– 客户端和服务器结构

– 连接协议具有无状态性

– 能够利用Cache机制增进性能

– 层次化的系统

– 随需代码 – Javascript (可选)

„ RESTful Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。定义了三种资源:

– URI,比如:http://example.com/resources/。

– Web服务接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等。

– Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

„ 目前Java EE 5中将REST作为规范的一部分实现(JAX-RS),具有官方开源实现Jersey

HTTP 请求方法在RESTful Web 服务中的典型应用:

资源

GET

PUT

POST

DELETE

一组资源的URI,比如http://svc.com/resources/

列出 URI,以及该资源组中每个资源的详细信息(后者可选)。

使用给定的一组资源替换当前整组资源。

在本组资源中创建/追加一个新的资源。 该操作往往返回新资源的URL。

删除 整组资源。

单个资源的URI,比如http://svc.com/resources/142

获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等)

替换/创建 指定的资源。并将其追加到相应的资源组中。

把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。

删除 指定的元素。

下面则列出了一段访问Restful服务的Java客户端代码:

private static WebResource createWebResource(String uriString) {

ClientConfig config = new DefaultClientConfig();

Client client = Client.create(config);

String url = “http://localhost:7001”;

URI uri = UriBuilder.fromUri(url + uriString).build();

WebResource service = client.resource(uri);

out.println(“run once for JaxRSAdvancedTest –> “ + service);

return service;

}

public void readRestService() {

WebResource service = createWebResource(“/management/tenant-monitoring/servers”);

String servers = service.path(“form”).accept(MediaType.TEXT_PLAIN)

.get(String.class, f);

}

可监控的资源类型

WebLogic Server 的下列资源可以使用RESTful 管理服务进行监控:

  • Server – 域中的所有Server实例或者指定的单个Server实例.
  • 集群 –域中的所有集群或者指定的单个集群, 包括集群中的所有Server成员.
  • 应用 –域中的所有应用或者指定的单个应用.
  • 数据源 –域中的所有数据源或者指定的单个数据源.

如何启用Restful监控服务

默认情况下,RESTful 监控服务处于禁用状态。启用步骤如下:

  1. 在Administration Console的 Change Center, 点击 Lock & Edit (相关文档: 使用Change Center).

  2. 在Console的左侧面板中,Domain Structure下方选择域名称.

3. 选择 Configuration > General, 然后在页面底部点击 Advanced.

  1. 选中复选框 Enable RESTful Management Services.

5. 点击 Save.

  1. 在Administration Console 的Change Center 中, 点击 Activate Changes.

然后重启管理服务器生效!

返回的数据展示类型

WebLogic Server RESTful 管理服务支持下面的数据展示类型:

  • JSON
  • XML
  • HTML

客户端可通过指定HTTP头中的Accept信息来获得给定的类型,例如:Accept application/json,Accept application/xml;如果不带任何头信息,则返回HTML。

单个资源的展示格式
JSON 格式

下例为单个服务器实例的JSON输出示意:

{
  "body": {
    "item": {
      // attributes for the item, e.g.
      // "name": "adminserver"
      // "state": "RUNNING",
      // …
    } 
  },
  "messages": [
    // an array of messages
  ]
}

相关的属性值类型有:

· 字符串, 用双引号分隔 “”

· boolean, true 或 false

· 数字

· null

· 数组, 使用 “[” 和 “]”分隔

· 对象, 使用 “{“ 和 “}”分隔

XML 格式

单Server XML格式输出示意:

<?xml version="1.0" encoding="utf-8"?>
<data>
<object>
  <property name="body">
   <object>
    <property name="item">
     <object>
      <!--
      <property name="Name">
       <value type="string">adminserver</value>
      </property>
       // other properties
       -->
     </object> 
    </property>
   </object>
  </property>
  <property name="messages">
   <array>
    <!-- message objects -->
   </array>
   </property>
</object>
</data>
HTML 格式

HTML格式以列表的方式显示属性和取值,建议只用于测试和调试。下图为一个示例输出:

clip_image001

集合资源的展示格式
JSON 格式
{
"body": {
  "items": [
    {
      // attributes for item 1
      // "name": "adminserver"
      // "state": "RUNNING",
      // …
     },
    {
      // attributes for item 2
     },
     …
    {
      // attributes for item n
     }
    ],
   "messages": [
    ]
}
XML 格式
<?xml version="1.0" encoding="utf-8"?>
<data>
  <object>
    <property name="body">
      <object>
        <property name="items">
          <array>
            <!--
            <object>
              <property name="name">
                <value type="string">adminserver</value>
             </property>
              // other properties
            </object>


             // other items
             -->
          </array> 
        </property>
      </object>
    </property>
    <property name="messages">
      <array>
        <!--
        <object>
          <property name="severity">
            <value type="string">WARNING</value>
         </property>
          <property name="message">
            <value type="string">Server ms1 is not running.</value>
         </property>
       </object>


       // other messages
       -->
      </array>
    </property>      
  </object>
</data>
HTML 格式

clip_image002

监控资源列表

域中的所有服务器``

访问地址: http(s)://host:port/management/tenant-monitoring/servers

属性

类型

有效值

name

string

Name of the server.

state

string

Server status. Possible states are:

  • RUNNING
  • STARTING
  • STANDBY
  • ADMIN
  • RESUMING
  • SHUTDOWN

health

string

Server health state. Possible health states are:

  • HEALTH_OK
  • HEALTH_WARN
  • HEALTH_CRITICAL
  • HEALTH_FAILED
  • HEALTH_OVERLOADED
  • UNKNOWN

示例JSON格式输出:

{

“body”: {

“items”: [

{

“name”: “adminserver”,

“state”: “RUNNING”,

“health”: “ HEALTH_OK “

},

{

“name”: “ms1”,

“state”: “SHUTDOWN”,

“health”: “”

}

],

},

“messages”: [

]

}

更多监控点信息请访问官方edoc:

http://docs.oracle.com/cd/E24329_01/web.1211/e26722/toc.htm

转载请注明:WebLogic Android 博客 » 使用RESTful客户端监控WebLogic 12c