使用Jyhon脚本和PMI模块监控WAS性能数据

使用Jyhon脚本和PMI模块监控WAS性能数据的优点有:

1、可以使用非交互的方式远程获取数据

2、不需要图形化模块支持

3、对各种was版本的兼容性较高

4、使用方便,官方自带

缺点也有很多:

1、官方文档不全,需要自己摸索

2、不同版本和设置环境不同时,可能会引起抛错

3、代码纠错功能很低,调试代码费时

每个jython脚本执行前最好都设置一下辅助参数,比如换行参数

lineSeparator = java.lang.System.getProperty('line.separator')

  一、获取性能前,需要明确监控对象。这里的示例方法会在部分环境中取不到数据,最好还是用遍历node或sever的方法获取到perfOName 这个监控对象。

perfName = AdminControl.completeObjectName ('type=Perf,process={server},node={node},cell={cell},*')
perfOName = AdminControl.makeObjectName (perfName)
print perfOName
print "Invoke getStatisticSet operation "

 二、明确监控对象以后,需要设定PMI监控范围和颗粒度。

staticSetType=AdminControl.invoke(perfName, 'getStatisticSet')#获取监控对象当前的性能监控范围
if staticSetType not in ('all','custom'):
    pmi_server = AdminConfig.getid('/Cell:{cell}/Node:{node}/Server:{server}/')
    print pmi_server
    pmi = AdminConfig.list('PMIService', pmi_server)
    print pmi
    AdminConfig.modify(pmi, '[[synchronizedUpdate false] [enable true] [statisticSet custom]]')#修改监控范围并保存
    AdminConfig.save()
    #AdminNodeManagement.syncNode(node)#同步到所有节点,不建议使用,很可能引起系统报错
    staticSetType='custom'

if staticSetType=='custom':#设定指定的自定义监控对象
    params = ['extended']
    sigs  = ['java.lang.String']
    AdminControl.invoke_jmx (perfOName, 'setStatisticSet', params, sigs)

  三、获取监控数据

jvmName = AdminControl.completeObjectName ('type=JVM,process={server},node={node},cell={cell},*')#设定一个jvm监控对象
params = [AdminControl.makeObjectName(jvmName)]
sigs = ['javax.management.ObjectName']
configs= AdminControl.invoke_jmx(perfOName, 'getConfig', params, sigs)
print "Invoke getCustomSetString operation"
types=['UsedMemory','ProcessCpuUsage','HeapSize','GCTime','GCIntervalTime'] #选择jvm监控对象的监控指标 type_datas=[] for type in types: type_datas.append(configs.getDataId(type))#在日志文件里,监控指标只有一个数字代表,所以需要先用这个步骤把指标的文字名称转换为数字标号 print "Invoke setCustomSetString operation" params = ['jvmRuntimeModule='+','.join(str(type_datas)), java.lang.Boolean ('false')] sigs = ['java.lang.String', 'java.lang.Boolean'] AdminControl.invoke_jmx(perfOName, 'setCustomSetString', params, sigs)#给最初选定的监控对象设置选定的监控指标 print "Invoke getStatsObject operation" jvmName = AdminControl.completeObjectName ('type=JVM,process={server},node={node},cell={cell},*') params = [AdminControl.makeObjectName (jvmName), java.lang.Boolean ('false')] sigs = ['javax.management.ObjectName', 'java.lang.Boolean'] datas=AdminControl.invoke_jmx(perfOName, 'getStatsObject', params, sigs)#对已设定监控指标的监控对象开启监控操作,这步执行后就会开始生成新的监控日志

  

脚本调错和使用的一些小Tips:

was5.1不具备admintask命令

 查看指定节点的一些JVM参数:AdminTask.showJVMProperties('[-nodeName myNode12 -serverName server1]')

列出服务器端口:AdminTask.listServerPorts('server1', '[-nodeName myNode01 -portName WC_adminhost]')

获取指定对象的id:server1 = AdminConfig.getid('/Cluster:Cluster_1/Member:myserver1/')

查看某对象类型的属性:AdminConfig.attributes('Server')  或AdminConfig.show('Server')#was5.1版本比较特殊

查看某对象类型的关联对象表:AdminConfig.defaults('Server')

列出某对象的下级属性关联对象,比如cell下面的各对象:AdminConfig.list("Cell"),上级对象是AdminConfig.parents('Node')

查看某对象的属性方法:print dir(AdminConfig)

获取对象完整名称(获取路径):print AdminConfig.getObjectName(server1)

获取帮助文档:AdminConfig.help()

获取某属性内容:memberList = AdminConfig.showAttribute(cluster, "name")

AdminServerManagement的特有方法:AdminServerManagement.showServerInfo("myNode01", "myServer1")  以及  AdminServerManagement.queryMBeans("myNode01", "myserver1", "SessionStats")

补充对象名称:server = AdminControl.completeObjectName('type=Server,*')

获取对象实例:serverOI = AdminControl.getObjectInstance(server)

官方文档参考地址:https://www.ibm.com/support/knowledgecenter/zh/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/tprf_command.html

参考地址2:https://www.ibm.com/support/knowledgecenter/zh/SSEQTP_8.5.5/com.ibm.websphere.base.iseries.doc/ae/rxml_7libserver2.html?pos=2

原文地址:https://www.cnblogs.com/slqt/p/9132269.html