はじめに
z/OSの特異極まりない環境とオープンな環境を、もう少しうまく融合させてあげることで色々と幸せな事が起こるのではないかと思う今日この頃...
CICSのパフォーマンス情報をできるだけリアルタイムに、かつ、なるべく標準的な方法で取得する方法についての検討メモです。
前提知識
CMCIについて
CICSでは、CMCI(CICS Management Client Interface)というインターフェースが提供されています。これは、CICSの管理をREST APIで行うためのインターフェースです。例えば、資源定義の追加やステータスの確認等をREST API経由で行えます。(RESTと言ってもデータフォーマットはJSONではなくXMLという所がちょっと扱いにくいのですが...)
参考: CICS management client interface
ヒストリカルデータ
CICSでは、CPSM(CICSPlex System Manager)というSysplex環境で複数CICSリージョンを効率的に管理するための仕組みが提供されています。CPSMの機能の一つにCPSMモニター機能というものがあります(CMF; CICS Monitoring Facility機能とはまた別物です)。これにより、指定した定義に従いCPSMリソースのパフォーマンス情報をリアルタイムに確認できます。例えば、CICSplexに含まれるリージョンでのトランザクション実行状況を一定間隔で監視し、どのトランザクションがどのくらいのレスポンスタイムで実行されたか、といった直近の統計情報を取得することができます。
このモニター機能の一部で、ヒストリカルデータを取得する、という機能も提供されています。
パフォーマンスモニター情報については、CMF(CICS Monitoring Facility)機能によりSMFデータとして情報を書き出す機能も提供されています。ただ、これだとSMFに書き出された情報をオフライン・ユーティリティ(DFHMOLSやCICS PAといったツール製品)でフォーマットして確認する必要が出てきます。(つまりリアルタイム性が損なわれる。)
ヒストリカルデータの取得を行うと、指定したリソース(トランザクションなど)の直近のパフォーマンス情報をVSAM(KSDS)に書き出しておくことができ、それをCMCIインターフェースや、後述のCICS Explorer(内部的にCMCIを使用して情報を取得している)で直接確認できるようになります。
つまり、ヒストリカルデータを使うと、CMFにより書き出されたSMFデータを後からフォーマットして見るのではなく、直近の生のパフォーマンス情報(トランザクション毎のレスポンスタイムやCPUタイムなど)をすぐに確認できる、ということになります。
参考: Histrical data
CICS Explorer
EclipseベースのCICS管理用のユーザー・インターフェースです。CPSMについてはWUIというWebベースのユーザーインターフェースがありますが、CICS Explorerで出来ることがどんどん増えており、操作性もよいのでこちらの利用が進んでいくものと思われます。
参考: CICS Explorer
WUI
CPSM管理用のWebユーザーインターフェースです。CICS Explorerに置き換わりつつありますが、一部の操作はまだWUIで行う必要があります。
CPSMモニター辺りの定義は残念ながらまだCICS Explorerでは行えないのでWUIで実施する必要があります。ヒストリカルデータの参照はCICS Explorerで可能です。
参考: The CICSPlex SM Web User Interface
CMCIによるCICSヒストリカルデータの取得を試す
さて、ここから本題です。CMCIを使って、RESTでCICSヒストリカルデータを取得する、ということを実機でやってみます。具体的にはトランザクション毎のパフォーマンス情報(レスポンスタイムやCPUタイムなど)をヒストリカルデータとして取得し、その情報をCMCI(REST)で取得する所までを試します。
環境
以下の環境で試しています。
z/OS V2.1
CICS TS V5.4
また、ヒストリカルデータはCPSM機能なので、CICSplex構成が行われていることを前提とします。
ネーミングとしてはこんな感じ。
CMAS: CT54D0CM
CICSplex名: CT71PLX
LMAS: CT54D4A1, CT54D4A2, ...
ヒストリカルデータ取得用のCPSM上の定義
ヒストリカルデータはCPSMのリソースモニターの一部の機能なので、リソースモニターを取得するための定義がそのまま利用されます。具体的には、以下のような定義を作成していきます。
- Monitor Definition : どのようなリソースをモニター対象とするか(例えばCで始まるトランザクションを取得する、など)
- Monitor Group : 複数のMonitor Definitionをグループ化するための定義
- Monitor Spec : Monitor Groupに関連付けて、有効化/無効化やCICSシステムとの関連付けを管理するための定義
これらの定義はCICS Explorerでは行えないのでここではWUIを使用して定義していきます。
Monitor Definition
WUIのメニューから Administration - Monitor adminisration - Definition - Createボタン
ここでは、MONDEF01という名前のMonitor Definitionを作成し、Cで始まるトランザクション定義をモニターするよう定義しています。(Cで始まるトランザクションはCICS提供のものなので、普通はむしろこれらのものは省いて監視したいユーザー定義のものだけを指定することになると思います。)
Monitor Group
Monitor Definitionは1つしか作っていませんが、これをグループに関連付ける必要があるのでMonitor Groupを作成します。
WUIのメニューから Administration - Monitor adminisration - Groups - Createボタン
ここではMNGRP01というモニターグループを作成しています。
グループが作成できたら、Monitor definitionのviewに戻って、先に作成したMonitor Definitionにチェックを入れて、Add to Monitor groupボタンを押します。
Monitor Spec作成
WUIのメニューから Administration - Monitor administration - Specification - Createボタン
ここではMONSPEC01というMonitor Specを作成しています。
Monitor Specが作成できたら、Monitor GroupのViewに戻って、先に作成したMonitor Groupにチェックを入れて、Add to Monitor specificationボタンを押します。
再度Monitor Specificationのviewに戻って、これをCICSシステムに関連付けします。
Monitor Specにチェックを付けて、Associate CICS systemボタンを押す。
###まとめ
ちょっと分かりにくいですが、
Monitor Definition => Monitor Group => Monitor Specification => CICS System という流れで関連付けを行っています。これにより、Cで始まるトランザクションをモニターするという定義と、それを適用するCICSシステムの関連付けが行われました。
ヒストリカルデータ出力先VSAM準備
参考: Preparing the MAS for history recording
ヒストリカルデータを取得するリージョン毎に、出力先のVSAMを準備する必要があります。
ヒストリカルデータ保持用のVSAM(KSDS)は、起動プロシージャーのDDにてEYUHISTxという名前で指定します。"x"部分はA~Zのアルファベットで、最低2つで最大26個指定できます。全部一杯になると最初のデータセットがクリアされて循環して使われます。
このVSAMを作成するためのサンプルJCLがxxx.SDFHINST(EYUJHIST)に提供されているので、これをカスタマイズして作成します。
//EYUJHIST JOB MSGLEVEL=(1,1),MSGCLASS=X,NOTIFY=&SYSUID,REGION=0M
//*********************************************************************
//*--------------------------------------------------------------------
//* Delete Existing LMAS History Data sets
//* NOTE: This should only be used for the deletion of existing data
//* sets that are not being upgraded. For upgrading of old data sets
//* to the current CPSM release, delete this DELHIST job step.
//*--------------------------------------------------------------------
//DELHIST EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE CICSTS54.CT54D4A1.EYUHISTA
DELETE CICSTS54.CT54D4A1.EYUHISTB
SET MAXCC=0
/*
//*--------------------------------------------------------------------
//* Define New LMAS History Data sets
//* NOTE: This should only be used for the creation of new data sets.
//* The new data sets may be used when upgrading old data sets to the
//* current CPSM release, or they may be initialized to provide a
//* clean set of history data sets.
//*--------------------------------------------------------------------
//DEFHIST EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER ( -
NAME( CICSTS54.CT54D4A1.EYUHISTA ) -
VOLUME(CTS54A) -
RECORDS( 2000 ) -
REUSE -
SPEED -
INDEXED -
) -
DATA ( -
NAME( CICSTS54.CT54D4A1.EYUHISTA.DATA ) -
KEYS( 9 0 ) -
RECORDSIZE( 3536 3540 ) -
CONTROLINTERVALSIZE( 32768 ) -
) -
INDEX ( -
NAME( CICSTS54.CT54D4A1.EYUHISTA.INDEX ) -
)
DEFINE CLUSTER ( -
NAME( CICSTS54.CT54D4A1.EYUHISTB ) -
VOLUME(CTS54A) -
RECORDS( 2000 ) -
REUSE -
SPEED -
INDEXED -
) -
DATA ( -
NAME( CICSTS54.CT54D4A1.EYUHISTB.DATA ) -
KEYS( 9 0 ) -
RECORDSIZE( 3536 3540 ) -
CONTROLINTERVALSIZE( 32768 ) -
) -
INDEX ( -
NAME( CICSTS54.CT54D4A1.EYUHISTB.INDEX ) -
)
/*
/*
//*--------------------------------------------------------------------
//* Initialize LMAS History Data sets
//* NOTE: This should only be used for the creation of new datasets.
//* For upgrading of old datasets to the current CPSM release, delete
//* this HISTINIT job step.
//*--------------------------------------------------------------------
//HISTINIT EXEC PGM=EYU9XHID
//STEPLIB DD DISP=SHR,DSN=CICSTS54.CPSM.SEYULOAD
//*
//EYUHISTA DD DISP=SHR,DSN=CICSTS54.CT54D4A1.EYUHISTA
//EYUHISTB DD DISP=SHR,DSN=CICSTS54.CT54D4A1.EYUHISTB
//*
ここでは、EYUHISTA, EYUHISTBという2つのVSAM(KSDS)を作成しています。
ここで作成したVSAMを、リージョンの起動プロシージャーで指定します。
...
//EYUHISTA DD DISP=OLD,DSN=CICSTS54.CT54D4A1.EYUHISTA
//EYUHISTB DD DISP=OLD,DSN=CICSTS54.CT54D4A1.EYUHISTB
...
追加したらリージョンを起動し直します。
ヒストリカルデータ取得の有効化
ヒストリカルデータ取得対象リージョンで、モニターを有効化、および、パフォーマンス・モニタークラスを有効化することで、先に定義したCPSMリソースモニターの定義に従って、VSAMにヒストリカルデータが取得されます。
動的にモニターONにする場合:
対象のCICSリージョンにCICS端末を接続して、CEMT SET MONI ON PER
実行
CICSリージョン起動時に自動的にONにする場合:
SITパラメータで以下を指定
...
MN=ON
MNPER=ON
...
補足
※ヒストリカルデータは、指定した間隔でのリソース使用状況(統計的な情報)を取得する際に補足的に取得されるもので、それをVSAM(KSDS)に保持しておくことが出来るようにしたものです。統計的な情報は不要で、ヒストリカルデータのみ取得すればよい場合は、EYUPARMのHISTORYONLY(YES)を指定することでヒストリカルデータのみ取得することができるようになります(余分な情報取得の抑止)。
CICS Explorerによるヒストリカルデータの確認
CICS Explorerにて、「完了したタスク」ビューを開くと、取得された生のパフォーマンスデータが確認できます。
上のスクリーンショットで表示されている列はデフォルトで表示されるものです。列のカスタマイズでフィールド追加すれば、各種待ち時間やストレージの利用状況など詳細情報が確認できます。
CMCIによるヒストリカルデータの確認
CICS Explorerは内部的にCMCIが使われています。これを明示的に発行することで、必要な情報をアプリで簡単に取得することができます。JSONではなくXMLなのがちと残念なのですが...
CMCIで情報取得する場合のリクエストのSyntaxはこの辺を参照。
CICS management client interface GET request URI
CRITERIAの指定方法: filter expression
PARAMETERで指定できる項目: Historical data
GET /CICSSystemManagement/CICSTaskHistory/C71PLX/CT54D4A1?CRITERIA=tranid%3DCE*&PARAMETER=STARTDATE(06/11/2018) STARTTIME(08:00:00) HTTP/1.1
Host: eplexA:54002
HTTP/1.1 200 OK
Cache-Control: no-store
Date: Mon, 11 Jun 2018 08:05:26 GMT
Server: IBM_CICS_Transaction_Server/5.4.0(zOS)
Content-Type: application/xml; charset=UTF-8
Transfer-Encoding: chunked
Connection: Keep-Alive
<?xml version="1.0"?>
<response xmlns="http://www.ibm.com/xmlns/prod/CICS/smw2int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com/xmlns/prod/CICS/smw2int http://eplexA:54002/CICSSystemManagement/schema/CICSSystemManagement.xsd" version="3.0" connect_version="0540">
<resultsummary api_response1="1024" api_response2="0" api_response1_alt="OK" api_response2_alt="" recordcount="3" displayed_recordcount="3" />
<records>
<cicstaskhistory _keydata="D47697A4C01A0B22" abcodec="" abcodeo="" acapplname="" acmajorver="0" acmicrover="0" acminorver="0" acopername="" acplatname="" actvtyid="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" actvtynm="" allocates="0" applnameprog="" applnametran="" asfreect="0" asftchct="0" asftchwt="0000:00:00.000000" asrnatwt="0000:00:00.000000" asrunct="0" astotct="0" baacdcct="0" baacqpct="0" badactct="0" badcpact="0" badfiect="0" badproct="0" balkpact="0" baprdcct="0" barasyct="0" baratect="0" barmpact="0" barspact="0" barsynct="0" basupact="0" batiaect="0" batotcct="0" batotect="0" batotpct="0" bmscount="0" bmsincnt="0" bmsmapcnt="0" bmsoutcnt="0" brdgtran="NO" bridge="" btecomp="YES" cdsagetm="0" cdsapshwm="0" cdsashwm="0" cdsasocc="0" cecmchtp="2964" cecmdlid="740" cfdtwait="0000:00:00.000000" charin="11" charinsec="0" charout="467" charoutsec="0" cicswait="0000:00:00.000000" clipaddr="9.68.254.23" controlwait="0000:00:00.000000" correuow="D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F47697A4C0228A" cputime="0000:00:00.002523" cputoncp="0000:00:00.002523" curtasks="1" db2conwt="0000:00:00.000000" db2rdyqw="0000:00:00.000000" db2reqct="0" dettrantype="NONE" dhcrect="0" dhinsct="0" dhretct="0" dhsetct="0" dhtotct="0" dhtotdcl="0" disptime="0000:00:00.011598" dsapthwt="0000:00:00.000000" dspdelay="0000:00:00.000009" ecdsagetm="9" ecdsapshwm="0" ecdsashwm="36496" ecdsasocc="32072662" enqdelay="0000:00:00.000000" execomp="NO" externwait="0000:00:00.000000" exwait="0000:00:00.000000" eyu_cicsname="CT54D4A1" eyu_cicsrel="E710" eyu_reserved="0" facility="0034" facilitytype="TERMINAL" fcaddcnt="0" fcamcnt="0" fcbrwcnt="0" fccount="0" fcdelcnt="0" fcgetcnt="0" fciotime="0000:00:00.000000" fcputcnt="0" fcvswtt="0000:00:00.000000" fcxcwtt="0000:00:00.000000" firstprgm="DFHEMTP" gcdsagetm="0" gcdsashwm="0" gnqdelay="0000:00:00.000000" gudsagetm="0" gudsashwm="0" iccount="0" imsreqct="0" imswait="0000:00:00.000000" indoubt="BACKWARD" indoubtfail="NO" indoubtwait="YES" intvlc="0" intvlwait="0000:00:00.000000" iriotime="0000:00:00.000000" isalwtt="0000:00:00.000000" isolatest="YES" jciotime="0000:00:00.000000" jcusrwcnt="0" jrnlwritreq="0" jvmsusp="0000:00:00.000000" jvmtime="0000:00:00.000000" lockmgrwait="0000:00:00.000000" loggrwritreq="0" lparname="CEC1LP5" luname="TCP00034" lu61wtt="0000:00:00.000000" lu62wtt="0000:00:00.000000" l8cput="0000:00:00.000000" maxtasks="50" mpprtxcd="0" mpsract="0" mpsrect="0" mscput="0000:00:00.002109" msdispt="0000:00:00.010916" msgin="2" msginsec="0" msgout="2" msgoutsec="0" mxtdelay="0000:00:00.000000" mxtotdly="0000:00:00.000000" ncgetcnt="0" netname="JPIBMQHE.TCP00034" netuowid="1A11D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F47697A4C0228A0001" oadata1="" oadata2="" oadata3="" oadid="" oapplid="CT54D4A1" oclipadr="9.68.254.23" ocliport="54850" ofctynme="0034" offlcput="0000:00:00.000000" onetwkid="JPIBMQHE" oportnum="0" origintype="TERMINAL" ostart="2018-06-11T08:04:06.178208+00:00" otcpsvce="" otran="CEMT" otranflg="4000804002800000" otrannum="0000068" ousercor="" ouserid="CICSUSER" pcdplct="0" pclinkcnt="2" pcloadcnt="1" pcloadtm="0000:00:00.006573" pclurmct="0" pcxctlcnt="0" pc24rhwm="0" pc24shwm="0" pc31shwm="0" perfreccnt="1" pgcsthwm="0" phapplid="" phcount="0" phntwkid="" phstart="0000-00-00T00:00:00.000000+00:00" phtran="" phtranno="0000000" prcsid="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" prcsname="" prcstype="" priority="255" pstghwm="271880" pstg24hwm="0" pstg31hwm="271880" ptcount="0" ptstart="0000-00-00T00:00:00.000000+00:00" pttran="" pttranno="0000000" qrcput="0000:00:00.000414" qrdispt="0000:00:00.000682" qrmoddly="0000:00:00.000009" rectype=" T" resolveact="NO" resptime="0000:00:00.902905" rlscput="0000:00:00.000000" rlswaittime="0000:00:00.000000" rmicpsmtime="0000:00:00.000002" rmidbctltime="0000:00:00.000000" rmidb2time="0000:00:00.000000" rmiexecdlitm="0000:00:00.000000" rmimqseriest="0000:00:00.000000" rmiothertime="0000:00:00.000000" rmisusp="0000:00:00.000000" rmitcpiptime="0000:00:00.000000" rmitime="0000:00:00.000002" rmitotaltime="0000:00:00.000002" rofail="NO" romoddly="0000:00:00.000006" rops31hwm="271880" rrmsurid="00000000000000000000000000000000" rrmswait="0000:00:00.000000" rsysid="" runtrwtt="0000:00:00.000000" sharedtswait="0000:00:00.000000" shstgbytefma="0" shstgbytefmb="0" shstgbytefmg="0" shstgbytegma="0" shstgbytegmb="0" shstgbytegmg="0" shstggmcabv="0" shstggmcbar="0" shstggmcbel="0" shunted="NO" sobydect="0" sobyenct="0" socipher="00000000" soiowtt="0000:00:00.000000" somoddly="0000:00:00.000000" srvsywtt="0000:00:00.000000" start="2018-06-11T08:04:06.178208+00:00" stop="2018-06-11T08:04:07.081113+00:00" subexecomp="NO" subtype="T" susptime="0000:00:00.891306" synccount="1" syncdly="0000:00:00.000000" syncptwaittm="0000:00:00.000102" szallcto="0" szalloct="0" szchrin="0" szchrout="0" szrcvct="0" szrcvto="0" szsendct="0" szstrtct="0" sztotct="0" szwait="0000:00:00.000000" s8cput="0000:00:00.000000" task="0000068" taskdatakey="CICS" taskdataloc="ANY" taskflag="0" tcalwtt="0000:00:00.000000" tcbattct="0" tcc62in2="0" tcc62ou2="0" tciotime="0000:00:00.891284" tcldelay="0000:00:00.000000" tcm62in2="0" tcm62ou2="0" tdcount="0" tdelwtt="0000:00:00.000000" tdgetcnt="0" tdilwtt="0000:00:00.000000" tdiotime="0000:00:00.000000" tdpurcnt="0" tdputcnt="0" termconname="" termid="0034" termnalinfo="01000191" time="D47697A4C01A0B22" tmratmsn="" tmrbfdgc="0" tmrbftc="0" tmrcfact="0" tmrcipor="54850" tmrcmdly="0000:00:00.000012" tmrdhdlc="0" tmrdscwt="0000:00:00.000000" tmrdsmwt="0000:00:00.000000" tmrdsthw="0" tmrecevc="0" tmrecfoc="0" tmrecsec="0" tmrecsge="0" tmreictc="16" tmricscc="0" tmricscd="0" tmricsrc="0" tmricsrd="0" tmrisact="0" tmriscnm="" tmriswt="0000:00:00.000000" tmrjstwt="0000:00:00.000000" tmrjvmit="0000:00:00.000000" tmrjvmrt="0000:00:00.000000" tmrky8cp="0000:00:00.000000" tmrky8ds="0000:00:00.000000" tmrky9cp="0000:00:00.000000" tmrky9ds="0000:00:00.000000" tmrl9cpu="0000:00:00.000000" tmrmlctm="0000:00:00.000000" tmrmltdl="0" tmrmlxtc="0" tmrmqast="0000:00:00.000000" tmrmqgwt="0000:00:00.000000" tmrnetid="JPIBMQHE" tmrnetsx="7697A4C0228A0001" tmroidwt="0000:00:00.000000" tmrotsid="" tmrpcdcc="0" tmrpcdll="0" tmrpcdrl="0" tmrpclcc="0" tmrpcrcc="0" tmrpcrcl="0" tmrpcxcc="0" tmrpgbcc="0" tmrpgccc="0" tmrpgctc="0" tmrpggcc="0" tmrpggcl="0" tmrpgmcc="0" tmrpgpcc="0" tmrpgpcl="0" tmrpipln="" tmrportn="0" tmrptpwt="0000:00:00.000000" tmrrlunm="TCP00034" tmrrocpu="0000:00:00.002109" tmrrodsp="0000:00:00.010916" tmrrqpwt="0000:00:00.000000" tmrrqrwt="0000:00:00.000000" tmrsocin="0" tmrsocns="0" tmrsocot="0" tmrsocps="0" tmrsoerc="0" tmrsoimc="0" tmrsoi1c="0" tmrsonhw="0" tmrsoomc="0" tmrsoowt="0000:00:00.000000" tmrsoo1c="0" tmrsophw="0" tmrsorct="0" tmrsosct="0" tmrsotc="0" tmrstdly="0000:00:00.000000" tmrtcpsv="" tmrtgpid="1A11D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F4D47697A4C022BB7000" tmrtiatc="1" tmrtitc="2" tmrttdly="0000:00:00.000000" tmrt8cpu="0000:00:00.000000" tmrurimn="" tmrwbboc="0" tmrwbbrc="0" tmrwberc="0" tmrwbirc="0" tmrwbiwc="0" tmrwbi1c="0" tmrwbosc="0" tmrwbo1c="0" tmrwbprc="0" tmrwbrdl="0" tmrwbroc="0" tmrwbrpr="0" tmrwbrrc="0" tmrwbwdl="0" tmrwbwoc="0" tmrwbwrc="0" tmrwmqrc="0" tmrwpbmn="" tmrwsatc="0" tmrwscbc="0" tmrwscgc="0" tmrwsepc="0" tmrwsopn="" tmrwsvcn="" tmrxtdly="0000:00:00.000000" tmrx8cpu="0000:00:00.000000" tmrx9cpu="0000:00:00.000000" tranclass="" tranflags="4000804002800000" tranid="CEMT" trantype="TO" tscount="0" tsgetcnt="0" tsgetscnt="0" tsiotime="0000:00:00.000000" tsputacnt="0" tsputmcnt="0" tsputscnt="0" unshunted="NO" uowid="D47697A4C0228A78" uowinstseq="7697A4C0228A0001" userid="CICSUSER" usrps24hwm="0" usrps31hwm="271880" ustg24cnt="0" ustg24hwm="0" ustg24occ="0" ustg31cnt="0" ustg31hwm="0" ustg31occ="0" waittime="0000:00:00.000016" wbchrin="0" wbchrout="0" wbissfct="0" wbjsnrpl="0" wbjsnrql="0" wbrcvct="0" wbrepwct="0" wbsendct="0" wbsfcrct="0" wbsftoct="0" wbsreqbl="0" wbsrspbl="0" wbtotct="0" wlmrptrcname="RPCICS2" wlmsrvcname="SVCCICS1" />
<cicstaskhistory _keydata="D47697E8FB237312" abcodec="" abcodeo="" acapplname="" acmajorver="0" acmicrover="0" acminorver="0" acopername="" acplatname="" actvtyid="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" actvtynm="" allocates="0" applnameprog="" applnametran="" asfreect="0" asftchct="0" asftchwt="0000:00:00.000000" asrnatwt="0000:00:00.000000" asrunct="0" astotct="0" baacdcct="0" baacqpct="0" badactct="0" badcpact="0" badfiect="0" badproct="0" balkpact="0" baprdcct="0" barasyct="0" baratect="0" barmpact="0" barspact="0" barsynct="0" basupact="0" batiaect="0" batotcct="0" batotect="0" batotpct="0" bmscount="0" bmsincnt="0" bmsmapcnt="0" bmsoutcnt="0" brdgtran="NO" bridge="" btecomp="YES" cdsagetm="0" cdsapshwm="0" cdsashwm="0" cdsasocc="0" cecmchtp="2964" cecmdlid="740" cfdtwait="0000:00:00.000000" charin="4" charinsec="0" charout="2112" charoutsec="0" cicswait="0000:00:00.000000" clipaddr="9.68.254.23" controlwait="0000:00:00.000000" correuow="D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F47697E8FB2890" cputime="0000:00:00.002759" cputoncp="0000:00:00.002759" curtasks="1" db2conwt="0000:00:00.000000" db2rdyqw="0000:00:00.000000" db2reqct="0" dettrantype="NONE" dhcrect="0" dhinsct="0" dhretct="0" dhsetct="0" dhtotct="0" dhtotdcl="0" disptime="0000:00:00.010850" dsapthwt="0000:00:00.000000" dspdelay="0000:00:00.000010" ecdsagetm="0" ecdsapshwm="0" ecdsashwm="0" ecdsasocc="0" enqdelay="0000:00:00.000000" execomp="NO" externwait="0000:00:00.000000" exwait="0000:00:00.000000" eyu_cicsname="CT54D4A1" eyu_cicsrel="E710" eyu_reserved="0" facility="0034" facilitytype="TERMINAL" fcaddcnt="0" fcamcnt="0" fcbrwcnt="0" fccount="0" fcdelcnt="0" fcgetcnt="0" fciotime="0000:00:00.000000" fcputcnt="0" fcvswtt="0000:00:00.000000" fcxcwtt="0000:00:00.000000" firstprgm="DFHECIP" gcdsagetm="0" gcdsashwm="0" gnqdelay="0000:00:00.000000" gudsagetm="0" gudsashwm="0" iccount="0" imsreqct="0" imswait="0000:00:00.000000" indoubt="BACKWARD" indoubtfail="NO" indoubtwait="YES" intvlc="0" intvlwait="0000:00:00.000000" iriotime="0000:00:00.000000" isalwtt="0000:00:00.000000" isolatest="YES" jciotime="0000:00:00.000000" jcusrwcnt="0" jrnlwritreq="0" jvmsusp="0000:00:00.000000" jvmtime="0000:00:00.000000" lockmgrwait="0000:00:00.000000" loggrwritreq="0" lparname="CEC1LP5" luname="TCP00034" lu61wtt="0000:00:00.000000" lu62wtt="0000:00:00.000000" l8cput="0000:00:00.000000" maxtasks="50" mpprtxcd="0" mpsract="0" mpsrect="0" mscput="0000:00:00.002098" msdispt="0000:00:00.009910" msgin="2" msginsec="0" msgout="2" msgoutsec="0" mxtdelay="0000:00:00.000000" mxtotdly="0000:00:00.000000" ncgetcnt="0" netname="JPIBMQHE.TCP00034" netuowid="1A11D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F47697E8FB28900001" oadata1="" oadata2="" oadata3="" oadid="" oapplid="CT54D4A1" oclipadr="9.68.254.23" ocliport="54850" ofctynme="0034" offlcput="0000:00:00.000000" onetwkid="JPIBMQHE" oportnum="0" origintype="TERMINAL" ostart="2018-06-11T08:05:17.723191+00:00" otcpsvce="" otran="CECI" otranflg="4000808002800000" otrannum="0000071" ousercor="" ouserid="CICSUSER" pcdplct="0" pclinkcnt="2" pcloadcnt="1" pcloadtm="0000:00:00.005393" pclurmct="0" pcxctlcnt="0" pc24rhwm="0" pc24shwm="0" pc31shwm="0" perfreccnt="1" pgcsthwm="0" phapplid="" phcount="0" phntwkid="" phstart="0000-00-00T00:00:00.000000+00:00" phtran="" phtranno="0000000" prcsid="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" prcsname="" prcstype="" priority="1" pstghwm="217088" pstg24hwm="0" pstg31hwm="217088" ptcount="0" ptstart="0000-00-00T00:00:00.000000+00:00" pttran="" pttranno="0000000" qrcput="0000:00:00.000660" qrdispt="0000:00:00.000940" qrmoddly="0000:00:00.000009" rectype=" T" resolveact="NO" resptime="0000:00:00.875480" rlscput="0000:00:00.000000" rlswaittime="0000:00:00.000000" rmicpsmtime="0000:00:00.000006" rmidbctltime="0000:00:00.000000" rmidb2time="0000:00:00.000000" rmiexecdlitm="0000:00:00.000000" rmimqseriest="0000:00:00.000000" rmiothertime="0000:00:00.000000" rmisusp="0000:00:00.000000" rmitcpiptime="0000:00:00.000000" rmitime="0000:00:00.000006" rmitotaltime="0000:00:00.000006" rofail="NO" romoddly="0000:00:00.000009" rops31hwm="217088" rrmsurid="00000000000000000000000000000000" rrmswait="0000:00:00.000000" rsysid="" runtrwtt="0000:00:00.000000" sharedtswait="0000:00:00.000000" shstgbytefma="0" shstgbytefmb="0" shstgbytefmg="0" shstgbytegma="0" shstgbytegmb="0" shstgbytegmg="0" shstggmcabv="0" shstggmcbar="0" shstggmcbel="0" shunted="NO" sobydect="0" sobyenct="0" socipher="00000000" soiowtt="0000:00:00.000000" somoddly="0000:00:00.000000" srvsywtt="0000:00:00.000000" start="2018-06-11T08:05:17.723191+00:00" stop="2018-06-11T08:05:18.598671+00:00" subexecomp="NO" subtype="T" susptime="0000:00:00.864629" synccount="1" syncdly="0000:00:00.000000" syncptwaittm="0000:00:00.000133" szallcto="0" szalloct="0" szchrin="0" szchrout="0" szrcvct="0" szrcvto="0" szsendct="0" szstrtct="0" sztotct="0" szwait="0000:00:00.000000" s8cput="0000:00:00.000000" task="0000071" taskdatakey="USER" taskdataloc="BELOW" taskflag="0" tcalwtt="0000:00:00.000000" tcbattct="0" tcc62in2="0" tcc62ou2="0" tciotime="0000:00:00.864602" tcldelay="0000:00:00.000000" tcm62in2="0" tcm62ou2="0" tdcount="0" tdelwtt="0000:00:00.000000" tdgetcnt="0" tdilwtt="0000:00:00.000000" tdiotime="0000:00:00.000000" tdpurcnt="0" tdputcnt="0" termconname="" termid="0034" termnalinfo="01000191" time="D47697E8FB237312" tmratmsn="" tmrbfdgc="0" tmrbftc="0" tmrcfact="0" tmrcipor="54850" tmrcmdly="0000:00:00.000015" tmrdhdlc="0" tmrdscwt="0000:00:00.000000" tmrdsmwt="0000:00:00.000000" tmrdsthw="0" tmrecevc="0" tmrecfoc="0" tmrecsec="0" tmrecsge="0" tmreictc="11" tmricscc="0" tmricscd="0" tmricsrc="0" tmricsrd="0" tmrisact="0" tmriscnm="" tmriswt="0000:00:00.000000" tmrjstwt="0000:00:00.000000" tmrjvmit="0000:00:00.000000" tmrjvmrt="0000:00:00.000000" tmrky8cp="0000:00:00.000000" tmrky8ds="0000:00:00.000000" tmrky9cp="0000:00:00.000000" tmrky9ds="0000:00:00.000000" tmrl9cpu="0000:00:00.000000" tmrmlctm="0000:00:00.000000" tmrmltdl="0" tmrmlxtc="0" tmrmqast="0000:00:00.000000" tmrmqgwt="0000:00:00.000000" tmrnetid="JPIBMQHE" tmrnetsx="7697E8FB28900001" tmroidwt="0000:00:00.000000" tmrotsid="" tmrpcdcc="0" tmrpcdll="0" tmrpcdrl="0" tmrpclcc="0" tmrpcrcc="0" tmrpcrcl="0" tmrpcxcc="0" tmrpgbcc="0" tmrpgccc="0" tmrpgctc="0" tmrpggcc="0" tmrpggcl="0" tmrpgmcc="0" tmrpgpcc="0" tmrpgpcl="0" tmrpipln="" tmrportn="0" tmrptpwt="0000:00:00.000000" tmrrlunm="TCP00034" tmrrocpu="0000:00:00.002098" tmrrodsp="0000:00:00.009910" tmrrqpwt="0000:00:00.000000" tmrrqrwt="0000:00:00.000000" tmrsocin="0" tmrsocns="0" tmrsocot="0" tmrsocps="0" tmrsoerc="0" tmrsoimc="0" tmrsoi1c="0" tmrsonhw="0" tmrsoomc="0" tmrsoowt="0000:00:00.000000" tmrsoo1c="0" tmrsophw="0" tmrsorct="0" tmrsosct="0" tmrsotc="0" tmrstdly="0000:00:00.000000" tmrtcpsv="" tmrtgpid="1A11D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F4D47697E8FB28DB0200" tmrtiatc="0" tmrtitc="0" tmrttdly="0000:00:00.000000" tmrt8cpu="0000:00:00.000000" tmrurimn="" tmrwbboc="0" tmrwbbrc="0" tmrwberc="0" tmrwbirc="0" tmrwbiwc="0" tmrwbi1c="0" tmrwbosc="0" tmrwbo1c="0" tmrwbprc="0" tmrwbrdl="0" tmrwbroc="0" tmrwbrpr="0" tmrwbrrc="0" tmrwbwdl="0" tmrwbwoc="0" tmrwbwrc="0" tmrwmqrc="0" tmrwpbmn="" tmrwsatc="0" tmrwscbc="0" tmrwscgc="0" tmrwsepc="0" tmrwsopn="" tmrwsvcn="" tmrxtdly="0000:00:00.000000" tmrx8cpu="0000:00:00.000000" tmrx9cpu="0000:00:00.000000" tranclass="" tranflags="4000808002800000" tranid="CECI" trantype="TO" tscount="0" tsgetcnt="0" tsgetscnt="0" tsiotime="0000:00:00.000000" tsputacnt="0" tsputmcnt="0" tsputscnt="0" unshunted="NO" uowid="D47697E8FB28906A" uowinstseq="7697E8FB28900001" userid="CICSUSER" usrps24hwm="0" usrps31hwm="217088" ustg24cnt="2" ustg24hwm="2256" ustg24occ="1846530" ustg31cnt="5" ustg31hwm="33760" ustg31occ="28738000" waittime="0000:00:00.000018" wbchrin="0" wbchrout="0" wbissfct="0" wbjsnrpl="0" wbjsnrql="0" wbrcvct="0" wbrepwct="0" wbsendct="0" wbsfcrct="0" wbsftoct="0" wbsreqbl="0" wbsrspbl="0" wbtotct="0" wlmrptrcname="RPCICS2" wlmsrvcname="SVCCICS1" />
<cicstaskhistory _keydata="D47697ECBD6AC1B0" abcodec="" abcodeo="" acapplname="" acmajorver="0" acmicrover="0" acminorver="0" acopername="" acplatname="" actvtyid="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" actvtynm="" allocates="0" applnameprog="" applnametran="" asfreect="0" asftchct="0" asftchwt="0000:00:00.000000" asrnatwt="0000:00:00.000000" asrunct="0" astotct="0" baacdcct="0" baacqpct="0" badactct="0" badcpact="0" badfiect="0" badproct="0" balkpact="0" baprdcct="0" barasyct="0" baratect="0" barmpact="0" barspact="0" barsynct="0" basupact="0" batiaect="0" batotcct="0" batotect="0" batotpct="0" bmscount="0" bmsincnt="0" bmsmapcnt="0" bmsoutcnt="0" brdgtran="NO" bridge="" btecomp="YES" cdsagetm="0" cdsapshwm="0" cdsashwm="0" cdsasocc="0" cecmchtp="2964" cecmdlid="740" cfdtwait="0000:00:00.000000" charin="4" charinsec="0" charout="83" charoutsec="0" cicswait="0000:00:00.000000" clipaddr="9.68.254.23" controlwait="0000:00:00.000000" correuow="D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F47697ECBD6E4F" cputime="0000:00:00.001150" cputoncp="0000:00:00.001150" curtasks="1" db2conwt="0000:00:00.000000" db2rdyqw="0000:00:00.000000" db2reqct="0" dettrantype="NONE" dhcrect="0" dhinsct="0" dhretct="0" dhsetct="0" dhtotct="0" dhtotdcl="0" disptime="0000:00:00.002623" dsapthwt="0000:00:00.000000" dspdelay="0000:00:00.000010" ecdsagetm="3" ecdsapshwm="0" ecdsashwm="5312" ecdsasocc="5524" enqdelay="0000:00:00.000000" execomp="NO" externwait="0000:00:00.000000" exwait="0000:00:00.000000" eyu_cicsname="CT54D4A1" eyu_cicsrel="E710" eyu_reserved="0" facility="0034" facilitytype="TERMINAL" fcaddcnt="0" fcamcnt="0" fcbrwcnt="0" fccount="0" fcdelcnt="0" fcgetcnt="0" fciotime="0000:00:00.000000" fcputcnt="0" fcvswtt="0000:00:00.000000" fcxcwtt="0000:00:00.000000" firstprgm="DFHSNP" gcdsagetm="0" gcdsashwm="0" gnqdelay="0000:00:00.000000" gudsagetm="0" gudsashwm="0" iccount="0" imsreqct="0" imswait="0000:00:00.000000" indoubt="BACKWARD" indoubtfail="NO" indoubtwait="YES" intvlc="0" intvlwait="0000:00:00.000000" iriotime="0000:00:00.000000" isalwtt="0000:00:00.000000" isolatest="YES" jciotime="0000:00:00.000000" jcusrwcnt="0" jrnlwritreq="0" jvmsusp="0000:00:00.000000" jvmtime="0000:00:00.000000" lockmgrwait="0000:00:00.000000" loggrwritreq="0" lparname="CEC1LP5" luname="TCP00034" lu61wtt="0000:00:00.000000" lu62wtt="0000:00:00.000000" l8cput="0000:00:00.000000" maxtasks="50" mpprtxcd="0" mpsract="0" mpsrect="0" mscput="0000:00:00.000912" msdispt="0000:00:00.002157" msgin="1" msginsec="0" msgout="1" msgoutsec="0" mxtdelay="0000:00:00.000000" mxtotdly="0000:00:00.000000" ncgetcnt="0" netname="JPIBMQHE.TCP00034" netuowid="1A11D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F47697ECBD6E4F0001" oadata1="" oadata2="" oadata3="" oadid="" oapplid="CT54D4A1" oclipadr="9.68.254.23" ocliport="54850" ofctynme="0034" offlcput="0000:00:00.000000" onetwkid="JPIBMQHE" oportnum="0" origintype="TERMINAL" ostart="2018-06-11T08:05:21.664684+00:00" otcpsvce="" otran="CESN" otranflg="4000804002800000" otrannum="0000072" ousercor="" ouserid="CICSUSER" pcdplct="0" pclinkcnt="1" pcloadcnt="0" pcloadtm="0000:00:00.001156" pclurmct="0" pcxctlcnt="0" pc24rhwm="0" pc24shwm="0" pc31shwm="0" perfreccnt="1" pgcsthwm="0" phapplid="" phcount="0" phntwkid="" phstart="0000-00-00T00:00:00.000000+00:00" phtran="" phtranno="0000000" prcsid="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" prcsname="" prcstype="" priority="1" pstghwm="29488" pstg24hwm="0" pstg31hwm="29488" ptcount="0" ptstart="0000-00-00T00:00:00.000000+00:00" pttran="" pttranno="0000000" qrcput="0000:00:00.000237" qrdispt="0000:00:00.000466" qrmoddly="0000:00:00.000002" rectype=" T" resolveact="NO" resptime="0000:00:00.002639" rlscput="0000:00:00.000000" rlswaittime="0000:00:00.000000" rmicpsmtime="0000:00:00.000001" rmidbctltime="0000:00:00.000000" rmidb2time="0000:00:00.000000" rmiexecdlitm="0000:00:00.000000" rmimqseriest="0000:00:00.000000" rmiothertime="0000:00:00.000000" rmisusp="0000:00:00.000000" rmitcpiptime="0000:00:00.000000" rmitime="0000:00:00.000001" rmitotaltime="0000:00:00.000001" rofail="NO" romoddly="0000:00:00.000003" rops31hwm="29488" rrmsurid="00000000000000000000000000000000" rrmswait="0000:00:00.000000" rsysid="" runtrwtt="0000:00:00.000000" sharedtswait="0000:00:00.000000" shstgbytefma="0" shstgbytefmb="0" shstgbytefmg="0" shstgbytegma="0" shstgbytegmb="0" shstgbytegmg="0" shstggmcabv="0" shstggmcbar="0" shstggmcbel="0" shunted="NO" sobydect="0" sobyenct="0" socipher="00000000" soiowtt="0000:00:00.000000" somoddly="0000:00:00.000000" srvsywtt="0000:00:00.000000" start="2018-06-11T08:05:21.664684+00:00" stop="2018-06-11T08:05:21.667324+00:00" subexecomp="NO" subtype="T" susptime="0000:00:00.000016" synccount="1" syncdly="0000:00:00.000000" syncptwaittm="0000:00:00.000172" szallcto="0" szalloct="0" szchrin="0" szchrout="0" szrcvct="0" szrcvto="0" szsendct="0" szstrtct="0" sztotct="0" szwait="0000:00:00.000000" s8cput="0000:00:00.000000" task="0000072" taskdatakey="CICS" taskdataloc="ANY" taskflag="0" tcalwtt="0000:00:00.000000" tcbattct="0" tcc62in2="0" tcc62ou2="0" tciotime="0000:00:00.000000" tcldelay="0000:00:00.000000" tcm62in2="0" tcm62ou2="0" tdcount="0" tdelwtt="0000:00:00.000000" tdgetcnt="0" tdilwtt="0000:00:00.000000" tdiotime="0000:00:00.000000" tdpurcnt="0" tdputcnt="0" termconname="" termid="0034" termnalinfo="01000191" time="D47697ECBD6AC1B0" tmratmsn="" tmrbfdgc="0" tmrbftc="0" tmrcfact="0" tmrcipor="54850" tmrcmdly="0000:00:00.000006" tmrdhdlc="0" tmrdscwt="0000:00:00.000000" tmrdsmwt="0000:00:00.000000" tmrdsthw="0" tmrecevc="0" tmrecfoc="0" tmrecsec="0" tmrecsge="0" tmreictc="7" tmricscc="0" tmricscd="0" tmricsrc="0" tmricsrd="0" tmrisact="0" tmriscnm="" tmriswt="0000:00:00.000000" tmrjstwt="0000:00:00.000000" tmrjvmit="0000:00:00.000000" tmrjvmrt="0000:00:00.000000" tmrky8cp="0000:00:00.000000" tmrky8ds="0000:00:00.000000" tmrky9cp="0000:00:00.000000" tmrky9ds="0000:00:00.000000" tmrl9cpu="0000:00:00.000000" tmrmlctm="0000:00:00.000000" tmrmltdl="0" tmrmlxtc="0" tmrmqast="0000:00:00.000000" tmrmqgwt="0000:00:00.000000" tmrnetid="JPIBMQHE" tmrnetsx="7697ECBD6E4F0001" tmroidwt="0000:00:00.000000" tmrotsid="" tmrpcdcc="0" tmrpcdll="0" tmrpcdrl="0" tmrpclcc="0" tmrpcrcc="0" tmrpcrcl="0" tmrpcxcc="0" tmrpgbcc="0" tmrpgccc="0" tmrpgctc="0" tmrpggcc="0" tmrpggcl="0" tmrpgmcc="0" tmrpgpcc="0" tmrpgpcl="0" tmrpipln="" tmrportn="0" tmrptpwt="0000:00:00.000000" tmrrlunm="TCP00034" tmrrocpu="0000:00:00.000912" tmrrodsp="0000:00:00.002157" tmrrqpwt="0000:00:00.000000" tmrrqrwt="0000:00:00.000000" tmrsocin="0" tmrsocns="0" tmrsocot="0" tmrsocps="0" tmrsoerc="0" tmrsoimc="0" tmrsoi1c="0" tmrsonhw="0" tmrsoomc="0" tmrsoowt="0000:00:00.000000" tmrsoo1c="0" tmrsophw="0" tmrsorct="0" tmrsosct="0" tmrsotc="0" tmrstdly="0000:00:00.000000" tmrtcpsv="" tmrtgpid="1A11D1D7C9C2D4D8C8C54BE3C3D7F0F0F0F3F4D47697ECBD6E895C00" tmrtiatc="0" tmrtitc="0" tmrttdly="0000:00:00.000000" tmrt8cpu="0000:00:00.000000" tmrurimn="" tmrwbboc="0" tmrwbbrc="0" tmrwberc="0" tmrwbirc="0" tmrwbiwc="0" tmrwbi1c="0" tmrwbosc="0" tmrwbo1c="0" tmrwbprc="0" tmrwbrdl="0" tmrwbroc="0" tmrwbrpr="0" tmrwbrrc="0" tmrwbwdl="0" tmrwbwoc="0" tmrwbwrc="0" tmrwmqrc="0" tmrwpbmn="" tmrwsatc="0" tmrwscbc="0" tmrwscgc="0" tmrwsepc="0" tmrwsopn="" tmrwsvcn="" tmrxtdly="0000:00:00.000000" tmrx8cpu="0000:00:00.000000" tmrx9cpu="0000:00:00.000000" tranclass="" tranflags="4000804002800000" tranid="CESN" trantype="TO" tscount="0" tsgetcnt="0" tsgetscnt="0" tsiotime="0000:00:00.000000" tsputacnt="0" tsputmcnt="0" tsputscnt="0" unshunted="NO" uowid="D47697ECBD6E4F8A" uowinstseq="7697ECBD6E4F0001" userid="CICSUSER" usrps24hwm="0" usrps31hwm="29488" ustg24cnt="0" ustg24hwm="0" ustg24occ="0" ustg31cnt="0" ustg31hwm="0" ustg31occ="0" waittime="0000:00:00.000006" wbchrin="0" wbchrout="0" wbissfct="0" wbjsnrpl="0" wbjsnrql="0" wbrcvct="0" wbrepwct="0" wbsendct="0" wbsfcrct="0" wbsftoct="0" wbsreqbl="0" wbsrspbl="0" wbtotct="0" wlmrptrcname="RPCICS1" wlmsrvcname="PRDONL_M" />
</records>
</response>
URLエスケープされているので分かりにくいですが、HTTP GETリクエストのqueryStringで以下のパラメータを指定して、取得する情報のフィルタリングをしています。
CRITERIA=tranid=CE*
という指定で、tranidがCEで始まるものを抽出しています。
PARAMETER=STARTDATE(06/11/2018) STARTTIME(08:00:00)
という指定で、2018年6月11日08時00分00秒以降に開始されたトランザクションのみを抽出しています。
結果は上のようにXML形式で取得されます。
#おわりに
REST APIを使って、できるだけリアルタイムにCICSパフォーマンス情報を取得する方法を試してみました。例えばこれをelasticsearchにぶち込んでkibanaで可視化する、みたいな事ができそうですね。ただ、今回取得されるデータはJSONではなくXMLなのでちょっとハンドリングには一工夫必要になってしまいそうです。
が、ここで1つ朗報です! 次期CICSリリース(CICS TS V5.5)では、GraphQLがサポートされるようなので、恐らくJSON形式でこれらの情報を取得できるようになると思われます!
参考: CICS TS V5.5 Open Betaより
The GraphQL API in CICS