监控WebSphere解决方案

监控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 文件,第一行是这样的格式:

      < PerformanceMonitor responseStatus =" success " version =" 7.0.0 .5 "> ,这说明 perfServletApp 安装成功了。

 

配置 perfServletApp

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

     < PerformanceMonitor responseStatus =" 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代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE PerformanceMonitor (View Source for full doctype...)>  
  3. <PerformanceMonitor responseStatus="success" version="7.0.0.5">  
  4. <Node name="IE361-PCNode01">  
  5. <Server name="server1">  
  6. <Stat name="JVM 运行时">  
  7. <BoundedRangeStatisticIDBoundedRangeStatisticID="1" highWaterMark="91147" integral="0.0" lastSampleTime="1294795486836" lowWaterMark="51200" lowerBound="51200" mean="0.0" name="HeapSize" startTime="1294794248020" unit="千字节" upperBound="262144" value="91147" />  
  8. <CountStatisticIDCountStatisticID="3" count="57698" lastSampleTime="1294795830112" name="UsedMemory" startTime="1294794248020" unit="千字节" />  
  9. <CountStatisticIDCountStatisticID="4" count="1582" lastSampleTime="1294795830112" name="UpTime" startTime="1294794248020" unit="SECOND" />  
  10. <CountStatisticIDCountStatisticID="5" count="0" lastSampleTime="1294795830112" name="ProcessCpuUsage" startTime="1294794248020" unit="不适用" />  
  11. </Stat>  
  12. </Server>  
  13. </Node>  
  14. </PerformanceMonitor>  

 

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

 

在Java程序中访问perfServletApp

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

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

 

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

Java代码   收藏代码
  1. URL url = new URL(  
  2.         "http://localhost:8080/manager/jmxproxy?qry=*%3Atype%3DManager%2C*");  
  3. URLConnection conn = (URLConnection) url.openConnection();  
  4.   
  5. // URL授权访问 -- Begin  
  6. String password = "admin:chenfeng"// manager角色的用户  
  7. String encodedPassword = new BASE64Encoder()  
  8.         .encode(password.getBytes());  
  9. conn.setRequestProperty("Authorization""Basic " + encodedPassword);  
  10. // URL授权访问 -- End  
  11.   
  12. InputStream is = conn.getInputStream();  
  13. BufferedReader bufreader = new BufferedReader(new InputStreamReader(is));  
  14. String line = null;  
  15. while ((line = bufreader.readLine()) != null) {  
  16.     System.out.println(line);  
  17. }  

 

 

二、使用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,看下面的代码:

Java代码   收藏代码
  1. Properties adminProps = new Properties();  
  2. adminProps.setProperty("type""soap");  
  3. adminProps.setProperty("host""127.0.0.1");  
  4. adminProps.setProperty("port""8880");  
  5. AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);  
  6. 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的示例代码 

Java代码   收藏代码
  1. Properties adminProps = new Properties();  
  2. adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);  
  3. adminProps.setProperty(AdminClient.CONNECTOR_HOST, "localhost");  
  4. adminProps.setProperty(AdminClient.CONNECTOR_PORT, "8880");  
  5. adminProps.setProperty(AdminClient.USERNAME, "chenfeng");  
  6. adminProps.setProperty(AdminClient.PASSWORD, "chenfeng");  
  7. adminProps.setProperty(AdminClient.CACHE_DISABLED, "false");  
  8.   
  9. // WebSphere服务器是否已启用管理安全性  
  10. adminProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");  
  11.   
  12. adminProps.setProperty(AdminClient.CONNECTOR_AUTO_ACCEPT_SIGNER, "true");  
  13. adminProps.setProperty("javax.net.ssl.trustStore","D:/JavaTools/IBM/MyKey/trust.jks");  
  14. adminProps.setProperty("javax.net.ssl.keyStore","D:/JavaTools/IBM/MyKey/store.jks");  
  15. adminProps.setProperty("javax.net.ssl.trustStorePassword","chenfeng222");  
  16. adminProps.setProperty("javax.net.ssl.keyStorePassword""chenfeng111");  
  17.   
  18. AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);  
  19.   
  20. String domainName = adminClient.getDomainName();  
  21. System.out.println("domainName" + domainName );  
  22.   
  23. 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");   
  24. Object freeMemory= adminClient.getAttribute(objName, "freeMemory");  
  25. 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

 

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

 

源地址:http://yunzhu.iteye.com/blog/971254

猜你喜欢

转载自jeyke.iteye.com/blog/1843080