自动化监控白皮书——WAS监控
WebSphere(WAS)是一些大型企业常用的中间件,由于was自身提供的工具有时不能满足多样化的监控需求,而我们又会经常遇到对was进行监控的应用场景,所以我们有必要自己动手做一些was的监控脚本,尤其是自动化监控脚本。
目前针对WAS主要有以下这几种监控方式:
一、heapdump解析。很多人都会使用命令行生成heapdump,然后用工具对heapdump进行分析,从而得到自己想要的结果。
步骤如下:
#cd /opt/IBM/WebSphere/AppServer/bin
#./wsadmin.sh -username <was的用户名> -password <was的密码>
wasadmin>set objectName [$AdminControl queryNames WebSphere:type=JVM,process=服务名称,node=节点名称,*]
wasadmin >$AdminControl invoke $objectName generateHeapDump
这种方法需要借助第三方工具,而且这些工具大多是图形界面,所以不利于自动化监控。
二、利用PerfServlet监控
perfServletApp项目是由WebSphere官方提供的用于简单的端对端检索性能数据的应用。通过servlet访问,返回XML 格式的信息,然后解析XML即可获得相应的监控数据。
这个方法的优点是可以使用现有代码,减少工作量,由于是官方内置应用包,可以支持不同的版本,但缺点也有很多。首先,它能监控到的数据比较有限,不能满足各种多样化需求,其次,如果was设置了访问权限,无论通过java程序访问还是页面访问,都需要先进行鉴权,鉴权的过程很复杂。
这个包内置在安装包里,所以不需要从其他渠道找这个应用包(默认情况下位于<WebSphere Installed Location>/WebSphere/AppServer/installableApps)。安装PerfServlet的过程和安装其他was应用的步骤一样,安装完毕后启动即可。
安装后,在浏览器中打开http:// <ip>:<port>/wasPerfTool/servlet/perfservlet链接,可以看到返回的XML文件第一行内容如下:<PerformanceMonitorresponseStatus=" success"version="7.0.0.5">,这说明perfServletApp安装成功了。
如果是WAS6.1或以上版本,打开http://<ip>:<port>/wasPerfTool/servlet/perfservlet
返回XML格式的错误信息:<PerformanceMonitorresponseStatus="failed"version=" 6.1.0.0 ">,并且后面带有“由于凭证不足或凭证为空”之类的错误提示,说明我们需要进行权限设置。
- 在安全性->安全管理、应用程序和基础结构->配置里勾选启用应用程序安全性
- 在应用程序->企业应用程序里找到perfservlet, 在安全信息属性里找到安全角色到用户/组映射,进入该功能的连接页面以后查找到监控用户并勾选该用户,在用户设置页面设置用户组认证,最后勾选所有已认证的用户并保存
- 重启was
tips:已经安装PerfServlet插件的,可以直接访问内置页面来获取帮助。
未进行权限配置的访问页面:http:// <ip>:<port>/wasPerfTool/servlet/
已进行权限配置的访问页面:https://<ip>:<port>/wasPerfTool/servlet?&username=<username>&password=<password>
查看具体监控信息时构造URL:http:// <ip>:<port>/wasPerfTool/servlet[?node=<node>&server=<server>&module=<module>&version=5]
注意:加上&version=5 则返回的格式是5.x,如果不加,则返回的格式是6.0.
module的值可以从官网获取,比如获取jvm数据时,module参数值就是jvmRuntimeModule
用java代码进行鉴权的代码参考样例如下:
URL url = new URL("http://localhost:<port>/manager/jmxproxy?qry=*%3Atype%3DManager%2C*");
URLConnection conn = (URLConnection) url.openConnection();
// URL授权访问 -- Begin
String password = "<user>:<password>"; // 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 接口开发监控程序
JMX接口监控的方法核心是通过引入PerfMBean等MBean元素,调用AdminClient API获取性能监控基础结构(PMI)数据。
该方法的优点是可以获取到所有数据,缺点是需要编写大量java代码,而且编写代码时需要依赖官方提供的jar包,不同WAS版本的jar包有差异,可调用方法也不同,这些问题会导致代码的兼容性不佳。
例如以下JAR包:
com.ibm.ws.admin.client_7.0.0.jar
ibmjgssprovider.jar
ibmkeycert.jar
感兴趣的朋友可以在不同版本的was环境里找到这些jar包比较一下差异。
和perfServlet监控类似,启用管理安全性以后,was的鉴权验证机制会使监控难度上升好几个等级。
1 .不启用管理安全性时的MBean连接代码
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();
2.启用管理安全性以后
连接MBean之前,我们需要先配置证书。在WAS6.0里面,官方提供的默认证书能直接用,但是WAS6.1以上不行,必须生成自己的证书并配置到环境里面。
证书生成方法:
1、生成服务器端证书: keytool -genkey -alias s1as -keyalg RSA -keystore tomcat-server.jks -storepass changeit -keypass changeit -dname "CN=<要导入证书的机器名>, OU=Research Department, O=Shanghai Ideal Ltd., L=xuhui, S=Shanghai, C=CN" -storepass changeit -keystore keystore.jks
2、服务器端证书导出(给客户端使用)
keytool -export -alias s1as -storepass changeit -file server.cer -keystore keystore.jks
3、服务器端证书导入cacerts
keytool -import -v -trustcacerts -alias s1as -file server.cer -keystore cacerts.jks -keypass changeit
4、服务器端证书导入客户端JDK
keytool -import -file server.cer -keystore was_home$/java/jre/lib/security/cacerts -file server.cer -alias s1as
导入信任文件的路径必须在webshpere自带的jdk的jre目录下,如websphere6.1的安装路径的IBM\WebSphere\AppServer\java\jre\lib\security目录下。生产证书和密钥的过程可以在其它的jdk下。
5、复制证书到was服务器目录
cacerts.jks、keystore.jks 拷贝到下列路径:IBM\WebSphere\AppServer\profiles\AppSrv01\config\cells\<cellname>\nodes\<nodename>
keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。
truststore可以理解为放信任的证书的一个store.比如cacerts.jks文件,就可以理解为存放的store
truststore里存放的是只包含公钥的数字证书,代表了可以信任的证书,而keystore是包含私钥的
监控参考代码如下:
Properties adminProps = new Properties();
adminProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
adminProps.setProperty(AdminClient.CONNECTOR_HOST, "<hostname>");
adminProps.setProperty(AdminClient.CONNECTOR_PORT, "<port>");
adminProps.setProperty(AdminClient.USERNAME, "<username>");
adminProps.setProperty(AdminClient.PASSWORD, "<password>");
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","<cacerts.jks的绝对路径>");
adminProps.setProperty("javax.net.ssl.keyStore","<keystore.jks的绝对路径>");
adminProps.setProperty("javax.net.ssl.trustStorePassword","<cacerts.jks 生成时输入的密码>");
adminProps.setProperty("javax.net.ssl.keyStorePassword", "<keystore.jks 生成时输入的密码>");
AdminClient adminClient = AdminClientFactory.createAdminClient(adminProps);
// 这里只是最简单了获取了domainName
String domainName = adminClient.getDomainName();
附上一些参考资料:
1、目前最新版本的adminclient接口参考地址(也可以搜索关键词APIs - Application Programming Interfaces):https://www.ibm.com/support/knowledgecenter/SS7K4U_9.0.0/com.ibm.websphere.javadoc.doc/web/apidocs/overview-summary.html
2、很有用的jython脚本参考资料(也可以搜索Jython script library: Application administration scripts)https://www.ibm.com/support/knowledgecenter/SS7K4U_9.0.0/com.ibm.websphere.zseries.doc/ae/rxml_7libutility.html?pos=3
顺便吐槽下IBM的文档检索系统,哪怕是文档里出现的字词,你检索时也未必搜得到,能搜到啥全看运气了
四、使用TPV命令行监控
IBM 的 WebSphere Application Server(WAS)在v5之后自带有资源分析器TPV(Tivoli Performance Viewer)资源分析器可以用来监控WAS的运行状况。
它是集成到 WebSphere Application Server 管理控制台中的瘦客户机,我们可以在性能监控-当前活动页面看到tpv的监视数据。这些性能数据由性能监控基础结构 (PMI) 提供,简单的查看页面则是tpv提供,它允许用户查看和处理计数器的数据。
tpv的核心是jconsole模块,位于/opt/IBM/WebSphere/AppServer/8.5.5/java/bin目录下,可以通过命令行去调用,但客户端必须支持xmanager才可以显示图形页面,否则会报错,它并不支持纯文本界面。
TPV的显示数据会保存在log里,log目录位于/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/logs/tpv目录下,隔一段时间生成一份分析数据的zip包,每个zip包只包含某段检测时间间隔内检测到的数据,如果要用来做性能分析,需要读取多个zip文件,所以很不方便。
未全部进行完毕的检测数据会直接保存在xml文件里。
tpv最大的缺点就是不支持定制,它只负责数据的显示与收集,实际上真正的数据收集来源是PMI。
五、使用PMI命令行监控
性能监控基础结构 (PMI) 提供服务器端监视和客户机端 API 以便检索性能数据。监控的内容和颗粒度取决于设定的PMI监控级别。
PMI 规范级别包括:none、basic、extended、all 或 custom。如果选择 none,那么将禁用所有 PMI 模块。选择 basic 将提供 J2EE 和必要的统计信息集合。选择 extended 将提供基本监视级别以及 Work Load Monitor、Performance Advisor 和 Tivoli 资源模型。选择所有将启用所有统计信息。选择定制将提供细颗粒度控制以个别启用或禁用统计信息。
PMI数据可以通过命令行或jmx接口进行非实时非交互式的获取。
PerfMBean 中的 getStatsObject 和 getStatsArray 方法可以直接访问 PMI 数据。使用方法前需要将 MBean ObjectName 传递到 PerfMBean。
- DynaCache:动态高速缓存 PMI 数据
- EJBModule*:Enterprise JavaBeans (EJB) 模块 PMI 数据 (BeanModule)
- EntityBean*:特定 EJB PMI 数据 (BeanModule)
- JDBCProvider*:JDBC 连接池 PMI 数据
- J2CResourceAdapter*:Java 2 连接器 (J2C) 连接池 PMI 数据
- JVM:Java 虚拟机 PMI 数据
- MessageDrivenBean*:特定 EJB PMI 数据 (BeanModule)
- ORB:对象请求代理 PMI 数据
- Server:在整个服务器中的 PMI 数据,您必须将 recursive=true 传递到 PerfMBean
- SessionManager*:HTTP 会话 PMI 数据
- StatefulSessionBean*:特定 EJB PMI 数据 (BeanModule)
- StatelessSessionBean*:特定 EJB PMI 数据 (BeanModule)
- SystemMetrics:系统级别 PMI 数据
- ThreadPool*:线程池 PMI 数据
- TransactionService:JTA 事务 PMI 数据
- WebModule*:Web 应用程序 PMI 数据
- Servlet*:servlet PMI 数据
WLMAppServer:工作负载管理 PMI 数据
- WebServicesService:Web Service PMI 数据
- WSGW*:Web Service 网关 PMI 数据
每个PMI数据都有一个对应的数据生成对象,它是一个单元,节点或服务器,获取数据前,我们需要指定对象,否则会获取所有对象的性能数据。
查询对象的字符串:String query = "WebSphere:type=mytype,node=mynode,server=myserver,*";具体jython的写法可以参见jython教程。
自动化监控白皮书——WAS监控的更多相关文章
- SQL Server自动化运维系列——监控性能指标脚本(Power Shell)
需求描述 一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控 监控值范围 根据经验,作为DBA一般需 ...
- SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...
- SQL Server自动化运维系列——监控跑批Job运行状态(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在上一篇文章中已经分析了SQL SERVER中关于邮 ...
- SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...
- SQL Server 自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)
需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...
- inux监控平台搭建-监控项
linux监控平台搭建-监控项 本人运维某生态互联网监控平台服务.过程中遇见了很多问题.目前互联网有很多的开源监控工具:nagios.zabbix.falcon.cacti...各有优点.这里不讲解监 ...
- 【干货】解密监控宝Docker监控实现原理
分享人高驰涛(Neeke),云智慧高级架构师,PHP 开发组成员,同时也是 PECL/SeasLog 的作者.8 年研发管理经验,早期从事大规模企业信息化研发架构,09 年涉足互联网数字营销领域并深入 ...
- nagios监控linux主机监控内存脚本
说明 工作包括两部分监控端(一二三)和被监控端(四) 一.nrpe.cfg中添加脚本 nrpe.cfg中添加命令索引 command[check_used_mem]=/usr/local/nagios ...
- 探索Windows Azure 监控和自动伸缩系列2 - 获取虚拟机的监控定义和监控数据
上一篇博文介绍了如何连接Windows Azure: http://www.cnblogs.com/teld/p/5113063.html 本篇我们继续上次的示例代码,获取虚拟机的监控定义和监控数据. ...
随机推荐
- Raid卷详解
#RAID卷 独立磁盘冗余阵列RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术.组成磁盘阵列的不同方式成为R ...
- C++中的STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...
- 去除外显子低质量reads时弹出错误“Invalid quality score value (char '#' ord 35 quality value -29) on line 4”和“Invalid quality score value (char '.' ord 46 quality value -18) on line 12”的解决方法
楼主跑以下程序时分别弹出了“fastq_quality_filter: Invalid quality score value (char '.' ord 46 quality value -18) ...
- linux driver ------ platform模型,通过杂项设备(主设备号是10)注册设备节点
注册完设备和驱动之后,就需要注册设备节点 Linux杂项设备出现的意义在于:有很多简单的外围字符设备,它们功能相对简单,一个设备占用一个主设备号对于内核资源来说太浪费.所以对于这些简单的字符设备它们共 ...
- 部署python django程序
在一台新的服务器上x需要先安装python3 ,git , 等 安装python3 安装python3 之前博客写过 创建虚拟环境,我用的是venv https://docs.python.org/ ...
- Struts2中遇到的问题
问题1: 最近在学习的时候用到了Struts2.5,在一系列操作之后Tomcat部署成功了,然而之后在测试的时候却出现了问题,网页无法正常响应,并且报出了Wrong method was define ...
- JavaSE考试前练习
汽车租赁管理系统(CarRents) 120分钟 要求:请使用JavaEE实现一个汽车租赁管理系统,汽车租赁的属性主要包含:车牌(License).公里数(kilo).品牌(brand),租金(mo ...
- windows Zookeeper本地服务化
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...
- css颜色模式hsla和rgba
在CSS3中可以使用RGBA和HSLA两种色彩模式,这两个都可以用来设置颜色以及指定透明度. rgba指的是:红色.绿色.蓝色.Alpha透明度(Red-Green-Blue-Alpha)前三个值取值 ...
- Python基础(函数部分)-day04
写在前面 上课第四天,打卡: 加勒比海盗今天上映:端午节公司发的粽子很有范! 一.函数的基本概念 - 函数是什么? 函数,就是一个'锤子',一个具有特定功能的'锤子',使用者可以在适当的时候使用这个 ...