监控WebSphere解决方案(监控应用服务器系列文章)

前言:做了一个监控应用服务器的项目(支持Tocmat、WebSphere、WebLogic各版本),过程也算是磕磕绊绊,由于网上缺少相关资料,或者深陷于知识的海洋难以寻觅到有效的资料,因而走过不少弯路,遇过不少困难。为了留下点印记,给后来人留下点经验之谈,助之少走弯路,故将这些经验整理出来,与大家分享。水平有限,难免疏漏,还望指正。如有疑问,欢迎留言,或者加入Q群参与讨论:35526521。


监控WebSphere常见的两种方案比较:

方案一、通过perfServletApp进行监控

      perfServletApp项目是由WebSphere提供的(在安装目录下可以找到PerfServletApp.ear ,默认没有部署),用于简单的端对端检索性能数据, IBM或第三方供应商提供的任何工具都可以处理此性能数据。通过servlet访问,返回XML 格式的信息,然后解析XML即可获得相应的监控数据。

方案二、使用JMX 接口开发监控程序 
      通过使用PerfMBean或个别MBean,您可使用AdminClient API获取性能监控基础结构( PMI )数据。

两种方案优劣比较

通过perfServletApp进行监控
使用JMX接口开发监控程序
可以使用现有的成熟代码,减少工作量
全部代码需要从零开始
支持各不同版本时无差别
支持各不同版本比较麻烦,每个版本用的JAR包不一样,实现机制也不一样
可能存在特殊需求而perfServlet不能满足的情况
可支配性强,可以访问到WAS提供的所有MBean
 

一、通过perfServletApp进行监控

perfServletApp项目是由WebSphere提供的(在安装目录下可以找到PerfServletApp.ear,默认没有部署),用于简单的端对端检索性能数据,IBM或第三方供应商提供的任何工具都可以处理此性能数据。通过servlet访问,返回XML格式的信息。

 

安装 perfServletApp

1. 安装perfServletApp.ear

在管理控制台,点击左侧树中的应用程序 节点。点击企业应用程序 。

右侧的表中将列出已安装的所有应用程序。检查perfServletApp是否存在。如果不存在,则点击安装 以安装perfServletApp.ear文件(默认情况下该文件位于<WebSphere Installed Location>/WebSphere/AppServer/installableApps目录下,例如:D:/Program Files/WebSphere/AppServer/installableApps/perfServletApp.ear)。然后启动这个应用程序。

2.  在浏览器中打开http://127.0.0.1:9080/wasPerfTool/servlet/perfservlet链接,可以看到返回的XML文件,第一行是这样的格式:

      <PerformanceMonitorresponseStatus=" success"version="7.0.0.5">,这说明perfServletApp安装成功了。

 

配置 perfServletApp

如果是WAS6.1,打开http://127.0.0.1:9080/wasPerfTool/servlet/perfservlet会返回XML格式的错误信息,第一行是这样的格式:

    <PerformanceMonitorresponseStatus="failed"version=" 6.1.0.0 ">,

并且后面会带有“由于凭证不足或凭证为空”之类的错误提示。

 

这时需要进行一些配置:

 

1 ■ 启用应用程序安全性

 

 

 

2■ 在perfServletApp下进行安全用户的配置

 

3■ 保存修改后重启WAS即可

 

通过perfServletApp获取监控数据

启动WAS后打开下面的链接可以查看帮助文档:

http://127.0.0.1:9080/wasPerfTool/servlet/

 

获取监控数据的URL格式为:

http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet[?node=<node>&server=<server>&module=<module>&version=5]

 

在浏览器地址栏中输入此URL,转向此地址后提示输入用户名密码,然后就可以看到返回了XML格式的信息。

 

注意:加上&version=5 则返回的格式是5.x,如果不加,则返回的格式是6.0

 

 

例子:获取JVM运行时性能数据

 

URL为,可以通过浏览器打开,项目中则通过Java代码访问URL:

http://127.0.0.1:9080/wasPerfTool/servlet/perfservlet?node=IE361-PCNode01&server=server1&module=jvmRuntimeModule

 

返回XML格式的JVM运行时性能数据:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PerformanceMonitor (View Source for full doctype...)>
<PerformanceMonitor responseStatus="success" version="7.0.0.5">
<Node name="IE361-PCNode01">
<Server name="server1">
<Stat name="JVM 运行时">
<BoundedRangeStatisticID="1" highWaterMark="91147" integral="0.0" lastSampleTime="1294795486836" lowWaterMark="51200" lowerBound="51200" mean="0.0" name="HeapSize" startTime="1294794248020" unit="千字节" upperBound="262144" value="91147" />
<CountStatisticID="3" count="57698" lastSampleTime="1294795830112" name="UsedMemory" startTime="1294794248020" unit="千字节" />
<CountStatisticID="4" count="1582" lastSampleTime="1294795830112" name="UpTime" startTime="1294794248020" unit="SECOND" />
<CountStatisticID="5" count="0" lastSampleTime="1294795830112" name="ProcessCpuUsage" startTime="1294794248020" unit="不适用" />
</Stat>
</Server>
</Node>
</PerformanceMonitor>
 

在Java程序中对获得XML进行解析,即可获得相关的监控数据。

 

在Java程序中访问perfServletApp

通过浏览器访问perfServletApp时会提示输入用户名密码,那么在Java程序中又如何访问呢?

如果像访问一般的URL一样,直接访问,会提示鉴权错误,因为perfServletApp的URL是被保护的。

 

以下代码演示如何访问受保护的URL:

URL url = new URL(
        "http://localhost:8080/manager/jmxproxy?qry=*%3Atype%3DManager%2C*");
URLConnection conn = (URLConnection) url.openConnection();
 
// URL授权访问 -- Begin
String password = "admin:chenfeng"; // manager角色的用户
String encodedPassword = new BASE64Encoder()
        .encode(password.getBytes());
conn.setRequestProperty("Authorization", "Basic " + encodedPassword);
// URL授权访问 -- End
 
InputStream is = conn.getInputStream();
BufferedReader bufreader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = bufreader.readLine()) != null) {
    System.out.println(line);
}
 

 

二、使用JMX接口开发监控程序

通过使用 PerfMBean 或个别 MBean,您可使用AdminClient API获取性能监控基础结构(PMI)数据。

 

所需要的JAR包:

    ◆ com.ibm.ws.admin.client_7.0.0.jar

    ◆ ibmjgssprovider.jar

    ◆ ibmkeycert.jar

1 . WebSphere不启用管理安全性

如果WebSphere不启用管理安全性的话很简单,直接就能访问AdminClient API,看下面的代码:

Properties adminProps = new Properties();
adminProps.setProperty("type", "soap");
adminProps.setProperty("host", "127.0.0.1");
adminProps.setProperty("port", "8880");
AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);
String domainName = adminClient.getDomainName();
 

注意:要使上面的代码运行正确,必须关闭WAS6.1的管理安全性。

 

关闭WAS6.1的管理安全性的方法

登录 WebSphere 的集成解决方案控制台,进入安全性  --> 全局安全性  --> 去除“启用管理安全性”的勾选  --> 点击“应用”  --> 保存到主配置  --> 重启 WAS

 

不过出于安全性考虑,一般实际环境下的WebSphere是不可能关闭管理安全性的。

2 . WebSphere启用管理安全性

如果WebSphere已启用管理安全性,则需要先配置证书才能访问AdminClient API。在WAS6.0里面,这个步骤很简单,默认的证书能直接用,但是WAS6.1就不行,默认的证书不能用,必须生成自己的证书并配置到WAS6.1里面。

 

WAS6.1生成和配置证书的方法

该部分本来是直接加入到本文中的,但是导致文章太长,可读性差,所以单独分了出去,地址如下,请移驾:

http://yunzhu.iteye.com/blog/1825874

 

 

使用证书监控WebSphere的示例代码 

Properties adminProps = new Properties();
adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");
adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880");
adminProps.setProperty(AdminClient.USERNAME, "chenfeng");
adminProps.setProperty(AdminClient.PASSWORD, "chenfeng");
adminProps.setProperty(AdminClient.CACHE_DISABLED, "false");
 
// WebSphere服务器是否已启用管理安全性
adminProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
 
adminProps.setProperty(AdminClient.CONNECTOR_AUTO_ACCEPT_SIGNER, "true");
adminProps.setProperty("javax.net.ssl.trustStore","D:/JavaTools/IBM/MyKey/trust.jks");
adminProps.setProperty("javax.net.ssl.keyStore","D:/JavaTools/IBM/MyKey/store.jks");
adminProps.setProperty("javax.net.ssl.trustStorePassword","chenfeng222");
adminProps.setProperty("javax.net.ssl.keyStorePassword", "chenfeng111");
 
AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);
 
String domainName = adminClient.getDomainName();
System.out.println("domainName" + domainName );
 
ObjectName objName = new ObjectName("WebSphere:name=JVM,process=server1,platform=proxy,node=YNF-PCNode01,j2eeType=JVM,J2EEServer=server1,version=6.1.0.0,type=JVM,mbeanIdentifier=JVM,cell=YNF-PCNode01Cell,spec=1.0"); 
Object freeMemory= adminClient.getAttribute(objName, "freeMemory");
System.out.println("freeMemory" + freeMemory);
 

上面的例子只是简单地获取DomainName和空闲内存,实际开发中采集具体的数据,则需要查询API,以获得详细的ObjectName。 

 

几个重要的官方文档地址

(注:如果网址变更了导致无法访问,请自行根据标题搜索)

 

一、官方教程:开发管理客户机程序
http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.nd.doc%2Finfo%2Fae%2Fae%2Ftjmx_develop.html

 

二、官方教程:使用JMX接口开发自己的监视应用程序
http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Ftprf_pmijmx.html

 

三、官方AdminClient接口文档
http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.javadoc.doc%2Fpublic_html%2Fapi%2Fcom%2Fibm%2Fwebsphere%2Fmanagement%2FAdminClient.html

 

四、官方Mbean接口API
http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.javadoc.doc/public_html/mbeandocs/index.html

 

相信有了以上的入门教程,加上这几个有用的官方文档地址,剩下的就没有什么大的技术问题了,剩下的就是程序的架构和编码的实现了。希望对你有所帮助。 

 


大小: 78.2 KB

大小: 61.4 KB

大小: 11.6 KB

大小: 71.1 KB

大小: 60.9 KB
查看图片附件
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值