适宜读者:(三年以上z/OS 用户)
背景知识:(z/OS基础知识)
原文:http://www.ibmsystemsmag.com/mainframe/administrator/systemsmanagement/health_check_rexx/
作者:Prashant Muragod
编写你自己的状态检测工具来检测Z/OS系统中的异常并防止其出现问题,这是一件很有价值的事情。本文将描述如何利用系统REXX代码并结合IBM状态检测工具来为Z/OS扩展状态检测工具。用REXX的代码作为框架,可以让你在短时间内编写大量不同类型的状态检测程序。这些状态检测程序能够被当做是IBM提供的检查程序从而可以动态的启用或者禁用。文章中还将提到一些用于定制和测试那些尚未结合IBM状态检测工具的REXX代码的技巧以及一些常用的状态检测指令。总体来看,编写一个状态检测程序的步骤包括:
- 为需要进行状态检测的函数编写REXX代码
- 创建/更新状态检测程序的parmlib 成员:parmlib member-HZSPRMXX.
- 创建并且收集定制信息,这个信息表用于显示检查成功或失败时需要显示的定制的错误信息
- 使用命令行指令来动态使能状态检测工具
REXX的代码
接下来展示的REXX代码包含以下功能:连接到适用于Z/OS的IBM状态检测工具;对函数进行测试;从信息表里检索获取信息;最后,断开和状态检测工具的连接。将下面的代码放进系统的REXX数据集(SYS.SAXREXEC)或者放到由AXRnn parmlib 成员中的REXXLIB串联所指定的任何一个库中。
To create/update the Health Checker parmlib member—HZSPRMXX:
ADDREP CHECK(USERCHK,USR_ASM_LOCAL_PAGE)
EXEC(USERCHEK)
REXXHLQ(UUUUUUU)
REXXTSO(YES)
REXXIN(NO)
REXXTIMELIMIT(60)
MSGTBL(HZSMSGXX)
VERBOSE(YES)
INACTIVE
PARM('MINLOCALS(3)')
SEVERITY(LOW)
INTERVAL(ONETIME)
DATE(20130710)
REASON('TEST-CHECK')
如果启用了调试模式, “UUUUUUU.USERCHEK.REXXOUT” 数据集将会包含REXX的输出。不活跃的属性表明在一开始检查将是不活跃的。
设置信息表
要创建、收集和连接编辑信息表,首先要把SYS1.SAMPLIB(HZSSMSGT)复制到你本地的数据集并对它进行编辑。这张表包含了REXX检查中所需的所有要求用户定制的信息。
在之前的例子中,我们有两个场景。对于这两个检测不成功的场景,我们可以如下来编写代码:
<msg class=exception>
<msgnum xreftext=001>HZUSR001E</msgnum>
对于那些成功的场景,可以按照下面进行编写:
<msg class=Information>
<msgnum xreftext=002>HZUSR021I</msgnum>
其他所有的变量都可以定制以满足你的每一项需求。想了解更多关于如何定制信息表,请参考IBM红皮书“Exploiting the IBM Health Checker for z/OS Infrastructure.”
使用示例代码JCL-SYS1.SAMPLIB(HZSMSGNJ)来编译信息表成员。这些作业控制语言(JCL)中唯一需要修改的部分就是HZSMDSN,它需要指向定制的信息表。使用JCL来链接编辑目标成员的代码如下所示:
//ASSEMBLJ JOB 0,'USER',
// CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
// SET MSGTLOAD=UUUUUUU.SAMPLE.LOAD(HZSMSGXX)
//ASSEMBLE EXEC ASMACL,PARM.L='RENT'
//C.SYSIN DD DISP=OLD,DSN=UUUUUUU.TEMP.ASM
//C.SYSPRINT DD DUMMY
//L.SYSPRINT DD DUMMY
//L.SYSLMOD DD DISP=SHR,DSN=&MSGTLOAD
//*
增添/结合IBM状态检测工具
下一步,确保授权程序工具(APF)批准认证了汇编后的装载模块。操作过程如下所示:
SETPROG APF,ADD,DSN=UUUUUUU.SAMPLE.LOAD,VOLUME=XXXXXX
最后,更新HZSPROC启动任务来包含含有了信息表的数据集,并重启已经启动的任务。输入命令行指令F HZSPROC,ADD,PARMLIB=XX来添加新的状态检测。最后一步的命令如下:
//HZSPROC PROC HZSPRM='00'
//HZSSTEP EXEC PGM=HZSINIT,REGION=0K,TIME=NOLIMIT,
// PARM='SET PARMLIB=&HZSPRM'
//STEPLIB DD DSN=UUUUUUU.SAMPLE.LOAD,DISP=SHR
//HZSPDATA DD DSN=SYS1.&SYSNAME..HZSPDATA,DISP=SHR
// PEND
// EXEC HZSPROC
在状态检测程序之后输入“A”(由SDSF->CK界面进入)。该检查的通过或者失败,由HZSPRMXX中的PARM 值来确定。
提示与常用命令
此外,你可以通过移除任何对HZSLSTRT、HZSLSTOP、HZSLFMSG的函数引用并用命令行CPF USERCHEK来测试REXX代码。其中CPF是一个系统综合体宽度的指令前缀,可以在parmlib的AXRnn成员中找到它。
如果要使用除了系统REXX数据集以外的其他数据集或是创建新数据集、复制REXX状态检测的代码并把它添加到parmlib的AXRnn成员中(例如该命令,REXXLIB ADD DSN(SYS1.USER01.SAXREXEC))。请确保重启AXR的地址空间来获得新的REXXLIB的数据集。
下面是一些常用的状态检测命令行指令:
- 调试一段REXX检查代码:
F HZSPROC,UPDATE,CHECK=(USERCHK,USR_ASM_LOCAL_PAGE),DEBUG=ON
- 当调试模式被打开时,显示REXX的输出写入了哪个数据集:
F HZSPROC,DISPLAY,CHECK(USERCHK,USR_ASM_LOCAL_PAGE),DETAIL
- SDSF的CK界面下可以使用的几个命令的含义:
A-ACTIVATE
H-DEACTIVATE
E-REFRESH
D-DISPLAY
P-DELETE
U-UPDATE
R-RUN
总的来说,由于REXX编程接口的易用性,使用系统REXX具有很高的灵活性,这使你能够发布系统指令并读取它们的输出,并将其用于编写你的状态检测工具。除此以外,由于这些函数是由IBM状态检测工具所提供的,也能让它们更快捷方便的被调用。
何川是IBM CSTL的一名软件工程师,他是z/OS XML团队的成员,从事主机XML的开发工作。
邮箱:hchuanbj#cn.ibm.com(替换#为@)
内容声明:文中专业名词因翻译原因,表述中难免存在差异。如有疑惑,请以英文为准。如果您对我们的话题感兴趣或者有疑问或批评指正之处,请通过电子邮箱联系我们。