

メインフレームTips ~RMFレポートをXML形式でも取ってみた~
こんにちは、システム基盤サービス部の田上です。
メインフレームTips第2弾です。(前回の記事はこちら)
今回はタイトルにある通り、RMFレポート(Postprocessor)についての記事を書こうと思います。過去のCPUやディスクI/Oといった性能情報を見たり集計したりするときに使うものですが、同じ情報を取得するのにも出力の仕方にいくつかの種類があります。
最近ある項目について過去の使用率グラフを作る必要があり、いつものように間隔レポートを取得してそれを加工しようとしたのですが、以下のメッセージが出力されレポートが取得できませんでした。(マニュアルをちゃんと読んでからやりなさいという話はあります)
メッセージを調べてみると「指定したREPORTS制御ステートメントのオプションでは、XML出力フォーマットのみがサポートされます。」とのこと。
PCIEという項目はXML形式でしか取れないんだぁ・・・ということで、とりあえずXML形式で取得してみたわけなのですが、その際に付随していろいろと調べてみたので、z/OSを離れることが多い自分への覚書の意味も込めてRMFレポートの取り方をまとめておこうと思った次第です。
RMFレポート(Postprocessor)の種類
RMFレポートはざっくり分類すると3種類ほどあります。
マニュアルには「例外レポート」というのもありますが、私の使用目的には一致しなかったので今回は除外します。
- 要約レポート
- 間隔レポート(説明は省略しますがマニュアルの記載では「期間レポート」もあります)
- 概要レポート
このうち、間隔レポートと概要レポートはテキスト形式の出力とXML形式の出力があります。
取得する項目によって先述のようにXML形式でしか取れないものや、逆にテキスト形式でしか取れないものもありますが、上記3種類のレポートと、テキスト形式/XML形式それぞれの取り方と実際の出力を紹介していこうと思います。
なお、今回はレポートを取得するのに必要となるデータの取得に関する設定やSMFタイプの説明は割愛させていただきます。
要約レポート
最初は要約レポートです。
JCLはこんな感じです。SYSOUTはなくても大丈夫ですのでお好みで指定しましょう。
//A206005J JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//RMFREP EXEC PGM=ERBRMFPP
//SYSPRINT DD SYSOUT=*
//MFPMSGDS DD SYSOUT=*
//MFPINPUT DD DISP=SHR,DSN=TARKU.SMF.RECORD.G1903V00
//SYSIN DD *
SUMMARY(INT)
SYSOUT(H)
/*
出力はこうなります。
グラフを作りたい項目がここに含まれていればこの出力をWindowsに持ってきてエクセルで区切り位置を決めてあげればほぼできあがりですね。
※この後のレポートも含め出力サンプルは左上の1ページのみとさせていただきます。
********************************* TOP OF DATA **********************************
R M F S U M M A R Y R E P O R
z/OS V2R3 SYSTEM ID xxxx START 06/24/2021
RPT VERSION V2R3 RMF END 06/25/2021
NUMBER OF INTERVALS 32
DATE TIME INT CPU DASD DASD JOB JOB TSO TSO STC STC ASCH
MM/DD HH.MM.SS MM.SS BUSY RESP RATE MAX AVE MAX AVE MAX AVE MAX
06/24 23.30.00 30.00 7.5 0.0 0.0 1 1 0 0 102 101 0
06/25 00.00.00 30.00 7.7 0.0 0.0 1 1 0 0 102 101 0
06/25 00.30.00 29.59 7.3 0.0 0.0 1 1 0 0 101 101 0
06/25 01.00.00 29.59 7.3 0.0 0.0 1 1 0 0 102 101 0
06/25 01.30.00 30.00 7.2 0.0 0.0 1 1 0 0 101 101 0
06/25 02.00.00 30.00 7.2 0.0 0.0 1 1 0 0 101 101 0
06/25 02.30.00 30.00 7.1 0.0 0.0 1 1 0 0 101 101 0
06/25 03.00.00 30.00 7.3 0.0 0.0 1 1 0 0 101 101 0
06/25 03.30.00 29.59 7.1 0.0 0.0 1 1 0 0 101 101 0
06/25 04.00.00 29.59 7.1 0.0 0.0 1 1 0 0 102 101 0
06/25 04.30.00 30.00 7.2 0.0 0.0 1 1 0 0 101 101 0
間隔レポート(テキスト形式)
JCLはこんな感じです。
今回はテキスト形式もXML形式も取れる項目を選んで、REPORTS(CPU)を指定しましたが、取得したい項目に合わせて"CPU"の部分を変更します。
PPRPTS DD は出力を1つのDDにまとめたい場合に指定します。
指定しない場合1レコード毎(時間間隔の情報毎)に1DDで出力されます。
//A206005J JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//RMFREP EXEC PGM=ERBRMFPP
//SYSPRINT DD SYSOUT=*
//MFPMSGDS DD SYSOUT=*
//MFPINPUT DD DISP=SHR,DSN=TARKU.SMF.RECORD.G1903V00
//PPRPTS DD SYSOUT=*
//SYSIN DD *
NOSUMMARY
REPORTS(CPU)
SYSOUT(H)
/*
間隔レポートのテキスト形式での出力はこんな感じです。
私は要約レポートに必要な項目がない場合は、こんな感じのレポートから必要な情報を切り出すプログラムを書いてグラフ化をしていました。
********************************* TOP OF DATA **********************************
C P U A C T I V I T Y
z/OS V2R3 SYSTEM ID xxxx DATE 06/24/2021
RPT VERSION V2R3 RMF TIME 23.30.00
CPU 1090 CPC CAPACITY N/A SEQUENCE CODE 0000000000001229
MODEL 6 CHANGE REASON=N/A HIPERDISPATCH=YES
H/W MODEL L03
---CPU--- ---------------- TIME % ---------------- LOG PROC --I/O IN
NUM TYPE ONLINE LPAR BUSY MVS BUSY PARKED SHARE % RATE
0 CP 100.00 8.77 6.18 0.00 ----- 17.60
1 CP 100.00 7.01 4.65 0.00 ----- 17.31
2 CP 100.00 6.63 4.29 0.00 ----- 19.07
TOTAL/AVERAGE 7.47 5.04 ----- 53.98
SYSTEM ADDRESS SPACE AND WORK UNIT ANALYSIS
---------NUMBER OF ADDRESS SPACES--------- -----------------------DISTRIBU
QUEUE TYPES MIN MAX AVG NUMBER OF 0 10
WORK UNITS (%) |....|.
IN 76 81 77.8
間隔レポート(XML形式)
記事執筆時点で、XML形式でしか取得できない項目(REPORTS(xxx)に指定する項目)、逆にXML形式では取得できない項目は以下です。
XML形式のみ | テキスト形式のみ |
PCIE | DOMINO |
SCM | HTTP |
SDELAY | TRACE |
JCLはこうなります。
XPRPTS DDを指定することで出力がXML形式(のみ)になります。
//A206005J JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//RMFREP EXEC PGM=ERBRMFPP
//SYSPRINT DD SYSOUT=*
//MFPMSGDS DD SYSOUT=*
//MFPINPUT DD DISP=SHR,DSN=TARKU.SMF.RECORD.G1903V00
//XPRPTS DD SYSOUT=*
//SYSIN DD *
NOSUMMARY
REPORTS(CPU)
SYSOUT(H)
/*
出力はこうなります。
この出力を得て、さてどうしたものかと悩みましたが、マニュアルによるとWindows上のツールとして「RMF Postprocessor XML Toolkit」なるものがあるそうなので、とりあえずこの出力をcpurep.xmlという名前でWindows上に持ってきておいてツールを試してみました。
※SPOOLから書き出す場合、1桁目に入るページ区切りは削除してください。
********************************* TOP OF DATA **********************************
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="include/ddsml-pp.xsl"?>
<!-- z/OS RMF Postprocessor -->
<ddsml>
<postprocessor><metric id="CPU"><description>CPU Activity Report</description><t
</resource><time-data><display-start locale="en-us">06/24/2021-23.30.00</display
</time-data>
<segment id="1"><name>CPU Activity</name>
<part id="2">
<var-list id="3"><var><name>CPU</name><value>1090</value></var><var><name>Model<
<var><name>HiperDispatch</name><value>YES</value></var><var><name>CPC Capacity</
</var-list>
<table id="4">
<column-headers><col type="T">CPU Number</col><col type="T">CPU Type</col><col t
<col type="T">HiperDispatch Priority</col><col type="N">I/O Interrupts Rate</col
<row refno="1"><col>0</col><col>CP</col><col>100.00</col><col>8.77</col><col>6.1
<row refno="2"><col>1</col><col>CP</col><col>100.00</col><col>7.01</col><col>4.6
<row refno="3"><col>2</col><col>CP</col><col>100.00</col><col>6.63</col><col>4.2
<row refno="4" type="SUM"><col>TOTAL/AVERAGE</col><col>CP</col><col/><col>7.47</
RMF Postprocessor XML Toolkit
IBMが提供しているツールです。
z/OS上の「SYS1.SERBPWSV(ERBXMLTK)」がインストーラーになっているので、これを「erbxmltk.msi」という名前でWindows上に持ってきてインストールします。
インストール中にインストール先の指定箇所があるので、インストール先フォルダを覚えておきます。
インストールが終わったらインストール先のフォルダに先ほど取得したXML形式のレポートを配置して、XMLファイルを開きます。
私の環境の場合Internet Explorerで開くことができましたが、警告メッセージが表示されるため「ブロックされているコンテンツを許可」する必要がありました。
これで以下のように取得した情報を表示することができました。
さて、ようやく取得した情報が見やすい形(?)になったのですが、これでは特定の項目のグラフを作成するという私の目的には使えませんでした。
XML形式でしか出力されない項目のグラフ化
上記で紹介した項目(CPU)はテキスト形式もXML形式も取れるので、いつも通りテキスト形式で出力して情報を抽出すればよいのですが、先述の通り私が取りたかった項目(PCIE)はXML形式でしか出力できない項目でした。
次項で紹介しますが、場合によっては「概要レポート」を使えば問題は解決します。
ただ、この時のお客様の環境は概要レポートを使えないという事情があり、それ以外の手法を考えなくてはいけませんでした。私はたまたまXMLを扱ったことがあったので、VBAでDOMを使いXMLを読むプログラムを書くことで対応しました。
それはそれでいいとして、ふと最近アセンブラを勉強したという5年目の後輩に話をしたら「勉強のためにアセンブラでやってみます!」とのことで、アセンブラのマッピングマクロを使って、必要な情報を奇麗に抜いてくれました!
IBMの意図としては私のやり方がある意味正しい気がしますが、ホスト技術者としては後輩がやった手法のほうがカッコイイですよね・・・。こういった若手が育っているのはうれしいなぁと感じる一幕でした。後輩がアセンブラを忘れないようにどんどんアセンブラのプログラムを書かせようと思います。
概要レポート(テキスト形式&XML形式)
最後に概要レポートです。
存在は知っていたのですが、使い方を調べなくても事足りていたので今までは使っていませんでした。今回は諸事情で別の手段を取りましたが、これは便利だなぁと思ったので紹介します。
ただ取得できる項目はある程度限定されます。
概要レポートで取得できる項目
大枠だけ紹介しますので、細かい項目はマニュアルを参照してみてください。
マニュアルの記載箇所は以下です。
外部リンクを以下に貼りますが、マニュアルやIBMサイトの編成が変わるかもしれないことはご承知おきください。
z/OS RMF ユーザーズ・ガイド -> レポート作成の参照事項 -> 後処理プログラムによる長期的レポートの作成 ->概要条件と例外条件
大項目 | SMFレコード・タイプ |
CPU 活動 | 70-1 |
暗号ハードウェア活動 | 70-2 |
ページング活動 | 71 |
ワークロード活動 | 72-3 |
チャネル・パス活動 | 73 |
装置活動 | 74-1 |
カップリング・ファシリティー活動 | 74-4 |
キャッシュ活動 | 74-5 |
Ficon ディレクター活動 | 74-7 |
エンタープライズ・ディスク・システム統計 | 74-8 |
PCIE 機能活動 | 74-9 |
ページ・データ・セット活動 | 75 |
エンキュー活動 | 77 |
仮想記憶域活動 | 78-2 |
入出力キューイング活動 | 78-3 |
マニュアルのリンクをたどると、ほしい値をJCLで指定する場合に何と書けばいいかが書いてあります。一部だけ転載するとこんな感じの記載です。
条件 | 条件名 | 修飾子 |
汎用プロセッサー使用中率 | CPUBSY | coreid |
区画の汎用プロセッサーに対する 論理プロセッサー使用中パーセント | LBUSYL | lpar |
上記の条件で概要レポートを作成するJCLはこうなります。
OVWのカッコの直後にきている"CPU0″などはレポート中のヘッダーになります。
個別にJCLは記載しませんが、XPOVWRPT DDを追加すればテキスト形式が出力されなくなり、XML形式の概要レポートを取得できます。
//A206005J JOB CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//RMFREP EXEC PGM=ERBRMFPP
//SYSPRINT DD SYSOUT=*
//MFPMSGDS DD SYSOUT=*
//MFPINPUT DD DISP=SHR,DSN=TARKU.SMF.RECORD.G1903V00
//*XPOVWRPT DD SYSOUT=*
//SYSIN DD *
NOSUMMARY
OVW(CPU0(CPUBSY(0)))
OVW(CPU1(CPUBSY(1)))
OVW(CPU2(CPUBSY(2)))
OVW(AVE(LBUSYL(RDTUSER)))
SYSOUT(H)
/*
テキスト形式の出力はこうなります。
********************************* TOP OF DATA **********************************
R M F O V E R V I E W R E P O
z/OS V2R3 SYSTEM ID S0W1 START 06/24/2021
RPT VERSION V2R3 RMF END 06/25/2021
NUMBER OF INTERVALS 48 TOTAL LENGTH OF INTERVALS 24.00.00
DATE TIME INT CPU0 CPU1 CPU2 AVE
MM/DD HH.MM.SS HH.MM.SS
06/24 23.30.00 00.30.00 8.8 7.0 6.6 7.5
06/25 00.00.00 00.30.00 9.1 7.1 6.7 7.7
06/25 00.30.00 00.29.59 8.7 6.9 6.4 7.3
06/25 01.00.00 00.29.59 8.7 6.9 6.5 7.3
06/25 01.30.00 00.30.00 8.6 6.8 6.3 7.2
06/25 02.00.00 00.30.00 8.5 6.7 6.3 7.2
06/25 02.30.00 00.30.00 8.5 6.7 6.3 7.1
06/25 03.00.00 00.30.00 8.7 6.8 6.4 7.3
06/25 03.30.00 00.29.59 8.5 6.6 6.2 7.1
06/25 04.00.00 00.29.59 8.4 6.7 6.2 7.1
06/25 04.30.00 00.30.00 8.6 6.8 6.4 7.3
XML形式で取得した場合の出力はこんな感じです。
********************************* TOP OF DATA **********************************
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="include/ddsml-pp.xsl"?>
<!-- z/OS RMF Postprocessor -->
<ddsml>
<postprocessor><metric id="OVW"><description>RMF Overview Report</description><t
</resource><time-data><display-start locale="en-us">06/24/2021-23.30.00</display
</time-data>
<segment id="1"><name>Overview Report</name>
<part id="2">
<var-list id="3"><var><name>Number of Intervals</name><value>48</value></var><va
</var-list>
<table id="4">
<column-headers><col type="T">Date (mm/dd)</col><col type="T">Time (hh.mm.ss)</c
<col condition="CPUBSY" qualifier="02" type="N">CPU2</col><col condition="LBUSYL
<row refno="1"><col>06/24</col><col>23.30.00</col><col>00.30.00</col><col>8.8</c
<row refno="2"><col>06/25</col><col>00.00.00</col><col>00.30.00</col><col>9.1</c
<row refno="3"><col>06/25</col><col>00.30.00</col><col>00.29.59</col><col>8.7</c
<row refno="4"><col>06/25</col><col>01.00.00</col><col>00.29.59</col><col>8.7</c
<row refno="5"><col>06/25</col><col>01.30.00</col><col>00.30.00</col><col>8.6</c
概要レポートのXML形式ファイルも間隔レポート同様に「RMF Postprocessor XML Toolkit」で開くことができます。一応載せておくとこんな感じに表示されました。
これはこれでいいですね。そのままExcelに貼り付けて使えそうです。
あと関連して RMF Spreadsheet Reporter なるものがあるのですが、今回の私の用途では微妙に使えなかったので、割愛させていただきます。
まとめ
というわけで、特定の性能情報のグラフを作らなきゃとなったらこんな選択肢があるのかなと思います。
優先順位(私なり) | 種別 | 情報取得難易度 | 加工難易度 | 備考 |
1 | 要約レポート | 小 | 小 | ほしい項目が含まれる場合のみ |
2 | 概要レポート | 中 | 小 | ほしい項目が取れる場合のみ |
3 | 間隔レポート | 小 | 中 | 取れない項目はない(はず) |
4 | アセンブラでマッピングマクロ | 大 | 小 | どやぁ!って言える |
概要レポートは自分が欲しい項目を指定する方法を特定するのにちょっと調査が必要なので取得難易度を中としてみました。参考にしてみていただければと思います。
最近思うこと
今回はメインフレーム技術者としてXML形式のレポートに悩まされましたが、オープン系の技術者にとってはきっと扱いやすい形式ですし、オープン系と合わせて統合的に監視するようなことを想定して作られていると感じました。
XML形式のレポート取得についても、取得する側が意識してJCLを書かなくてもよい仕組みも用意されているみたいで、オープン系技術の取り込みや「メインフレームの使い方がわからない」というイメージの払拭が活発なように思います。
RMFに限らず、WebやWindowsアプリと連携してメインフレームを扱えるようにする仕組みがどんどん追加されてきています。
メインフレームを使っている人たちは「変えなくていい」というかむしろ「変えたくない」が基本だと思っていたのですが、実際にWindows上のアプリケーションからJOBを実行するような仕組みを作ったというプロジェクトもあるようで、時代は動いてきているのだなぁと感じました。
近年追加されていく機能を活用することで、メインフレーム特有の知識がなくても扱いやすいようになっていくことは良い動きなのではないかと思います。
ただその機能を使えるようにしたり、裏で何か問題が起きた時の対応をしたりするには従来のメインフレーム技術が必要ですよね。
われわれメインフレーム技術者に今後求められるのはこういった仕組みの作りこみであると考えた場合、昔ながらのメインフレーム技術とメインフレームが実装していくオープン系よりな技術両方の習得が必要なのかなと思ったり思わなかったりする今日この頃でした。