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

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

 

对监控WebSphere的前期方案调研,共有两种方案:

 

方案一、通过perfServletApp进行监控

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

 

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

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

 

两种方案比较如下

通过perfServletApp进行监控

  ◆ 可以使用现有的成熟代码,减少工作量

  ◆ 支持各不同版本时无差别,不需要更多代码

  ◆ 可能存在特殊需求而perfServlet不能满足的情况

 

使用JMX接口开发监控程序

  ◆ 全部代码需要从零开始

  ◆ 支持各不同版本比较麻烦,每个版本用的JAR包不一样,实现机制也不一样

  ◆ 可支配性强,可以访问到WAS提供的所有MBean

 

方案一、通过perfServletApp进行监控

 

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

 

安装perfServletApp

安装 perfServletApp.ear

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

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

在浏览器中查看

打开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进行监控

查看帮助文档:

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为:

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>

 

 

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

 

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

 

所需要的JAR包:

  • com.ibm.ws.admin.client_7.0.0.jar
  • ibmjgssprovider.jar
  • ibmkeycert.jar

 

1WebSphere不启用管理安全性

 最简单的示例代码:

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

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

 

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

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

但是一般实际环境当中的WAS是不可能关闭管理安全性的,所以一般只会采取下面的情况。

 

2WebSphere启用管理安全性

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

 

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

注明: 此部分转载自网上,步骤很复杂,不过以图片为主,所以只要严格按照图示步骤来,就可以配置成功。

如果启用了安全(WAS6.1默认的), 会出现下面的错误:

2009-6-4 10:25:49 com.ibm.websphere.management.AdminClientFactory
警告: ADMC0046W2009-6-4 10:25:50 com.ibm.ws.management.connector.interop.JMXClassLoader
警告: Could not find tmx4jTransform.jar in null/etc/tmx4jTransform.jar - Interoperability to older versions of WebSphere is disabled2009-6-4 10:25:50 com.ibm.ws.ssl.config.SSLConfigManager
信息: ssl.disable.url.hostname.verification.CWPKI0027Icom.ibm.websphere.management.exception.ConnectorException: ADMC0016E: 系统无法创建 SOAP 连接器以连接到端口 8880 上的主机 192.168.1.100。

如何判断安全已经启用了比较简单 如果WAS6.1 要求输入用户名和密码同时浏览器中查看控制台的协议是HTTPS, 那么就说明安全启用了 (默认的应该是启用的)

 

下面的步骤比较麻烦WAS6.1特殊的因为需要WAS6.1的证书WAS6.0里面这个步骤很简单默认的证书能直接用但是WAS6.1就不行默认的证书不能用必须生成自己的证书并配置到WAS6.1里面.

 

首先进入 <WAS_HOME>AppServer/bin, 运行ikeyman.bat文件进入证书配置工具:

 

 

点击添加:

 

 

选择类型JKS, 首先生成KeyStore. 目录设定为c:\test , 名称是store.jks

 

点击 OK , 之后会询问密码这里要输入KeyStre的密码: (密码要记住后面会用到)

 

点击OK, 返回主界面下面列表中很多默认的证书没有用Ctrl-A 全选然后点击右侧的DELETE, 都删掉:

 

删掉后创建自签署证书:

 

在弹出的界面中输入必填的信息基本上都是证书的标识可以填入自己的一些信息:

 

点击OK. 这时KeyStore就创建完毕了这里需要把它导出稍后创建TrustStore:

 

点击右下角的Extract Certificate... , 导出证书这里命名为cert.arm, 放到c:\test下面:

 

OK, 此时KeyStore就生成完毕了下面生成TrustStore. 再次点击New: (这次用的文件名是trust.jks , 同样放到了c:\test下面同样要记住TrustStore的密码)

 

同样把下面没有用的证书删掉然后点击 Add:

原创:本人实践过程中这一步有点问题,需要 先在下拉列表中选择“签署者证书”

 

在弹出的界面中选择刚刚导出的cert.arm文件:

 

这时会询问Label. 随便填点文本:

 

点击OK, TrustStore生成完毕了.

 

这时 查看c:\test 文件夹里面应该有三个文件 : store.jks (KeyStore), cert.arm (导出文件), trust.jks (TrustStore文件)

 

下面的工作就是让WAS6.1应用这些KeyStoreTrustStore。

登录WAS6.1控制台点击 Security - SSL certificate and key management - Key stores and certificates 选项:

 

点击 new :

 

在界面中输入KeyStore的名称(这里用testKeyStore), Path(刚刚创建的, c:\test\store.jks), 密码 (创建的时候使用的密码这里用到了!!) 类型选择JKS:

 

一样的步骤加入TrustStore.jks:

 

这样自己生成的证书就导入到WAS中了下面要让WAS使用它点击证书配置项:

 

点击当前节点:

 

然后选择刚刚创建好的KeyStoreTrustStore, 然后点击"Get Certificate Alias", 获得别名.

 

之后点击OK 保存更改这时, WAS6.1的配置就完毕了重启WAS , 再重新登录控制台就可以在浏览器的证书信息中查看到刚才使用ikeyman生成证书时输入的一些信息了如果使用Firefox等浏览器可能还需要加入一个Exception, 因为这个证书是我们自己生成的不是Firefox认为"安全的"机构生成的所以会报告安全警告Firefox询问的时候加入Exception, 忽略它就行了.

 

下面就是Java程序了test文件夹拷贝到Java程序运行的机器上这里有两种方法.

 

第一种修改程序:

在创建adminClient前面加入下面的代码定义Keystore 和 TrustStore. 注意程序里面用到了上面生成KeyStore/TrustStore的口令!

adminProps.setProperty(AdminClient.USERNAME, "websphere");
adminProps.setProperty(AdminClient.PASSWORD, "websphere");
adminProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
adminProps.setProperty("javax.net.ssl.trustStore", "c:/test/trust.jks");
adminProps.setProperty("javax.net.ssl.keyStore", "c:/test/store.jks");
adminProps.setProperty("javax.net.ssl.trustStorePassword", "password for keystore");
adminProps.setProperty("javax.net.ssl.keyStorePassword", "password for truststore");    


然后在文档(1) 中的程序就能正常运行了.

第二种导入生成的KeyStore.jks 到 Java程序运行的JRE中 就不用运行的时候指定了目标密匙口令JDK/JRE中默认的如果没改过就是changeit; 源密匙口令即上面生成KeyStore的口令 (又一次用到了)


之后上面代码里面的青色的部分就可以忽略了注意运行Java程序的JRE/JDK, 应该指定为上面命令行导入目标的JDK/JRE, 即 -destkeystore 中的参数.

 

 

 

使用证书监控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);
// 这里只是最简单了获取了domainName String domainName
= adminClient.getDomainName();

 

说明: 本文为原创,原发表在ITEye,详见本人专栏: 监控应用服务器

posted @ 2012-07-25 15:22  清晨之风  阅读(2798)  评论(0编辑  收藏  举报