前言:最近在做一个监控应用服务器(Tocmat、WebSphere、WebLogic)的项目,目前已小有规模,回头看看,一路走来,也算是磕磕绊绊,遇到过种种问题,走过不少弯路,不过程序员最不怕的就是遇到问题——有什么问题就解决什么问题。为了留下点印记,为后来人留下点经验之谈,助之少走弯路,特意把这些经验整理出来,与大家分享。水平有限,如有疏漏,还望指正

有两种方案:

方案一、通过perfServletApp进行监控

perfServletApp项目是由WebSphere提供的(在安装目录下可以找到PerfServletApp.ear,默认没有部署),用于简单的端对端检索性能数据,IBM

或第三方供应商提供的任何工具都可以处理此性能数据。通过servlet访问,返回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文件(默认情况下该文件位于

Location>/WebSphere/AppServer/installableApps目录下,例如:D:/Program

Files/WebSphere/AppServer/installableApps/perfServletApp.ear)。然后启动这个应用程序。

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

responseStatus="success"

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

配置perfServletApp

如果是WAS6.1,打开会返回XML格式的错误信息,第一行是这样的格式:

responseStatus="failed"

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

这时需要进行一些配置:

1。启用应用程序安全性

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

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

通过perfServletApp进行监控

查看帮助文档:

URL格式:

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

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

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

URL为:

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

Xml代码

PerformanceMonitor (View Source for full doctype...)>


View Source for full doctype...)>


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

通过使用 PerfMBean

或个别MBean,您可使用AdminClient

API 获取性能监控基础结构(PMI)数据

所需要的JAR包:

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

ibmjgssprovider.jar

ibmkeycert.jar

1。WebSphere不启用管理安全性

最简单的示例代码:

Java代码

Properties adminProps =newProperties();
adminProps.setProperty("type","soap");
adminProps.setProperty("host","127.0.0.1");
adminProps.setProperty("port","8880");
AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);
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

2。WebSphere启用管理安全性

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

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

不过其中有一个步骤有点遗漏:在这步“同样,

把下面没有用的证书删掉. 然后点击

Add:”,要先在下拉列表中选择“签署者证书”

使用证书监控WebSphere示例代码

Java代码

Properties adminProps =newProperties();
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();
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();