SMF Explorerによるパフォーマンス情報可視化 - (1) 概要

# はじめに
IBMメインフレーム(z/OS)では、パフォーマンス等の情報を収集するためのSMFという仕組みが提供されています。そのSMF情報をPythonスクリプトから容易にアクセスするためのSMF ExplorerというPythonフレームワーク(Pythonパッケージ)がz/OS V2.5以降で提供されています。これを利用すると、PC上のPythonスクリプトからz/OSMF経由でz/OS上のSMFダンプ・データセットを容易に分析できるようになります。
当シリーズ記事では、Python/SMF Explorerを使用してSMFパフォーマンス情報を可視化する流れを試してみます。

## 関連記事

[SMF Explorerによるパフォーマンス情報可視化 - (1) 概要](https://qiita.com/tomotagwork/private/3104615be1e0fca0f5bd)
[SMF Explorerによるパフォーマンス情報可視化 - (2) 環境セットアップ](https://qiita.com/tomotagwork/private/5760b218e29aeb7c1a3b)
[SMF Explorerによるパフォーマンス情報可視化 - (3) SMF Explorer使用方法](https://qiita.com/tomotagwork/private/313a1755cb91be5cb57c)
[SMF Explorerによるパフォーマンス情報可視化 - (4) Tipsなど](https://qiita.com/tomotagwork/private/205234eab8e5b9bf74e4)

# 前提知識
本題に入る前に、まず前提となる技術についておさらいしておきます。

## SMF
z/OSでは、システムの稼働状況に関する情報(パフォーマンスに関連する情報など)を収集するためのSMF(System Management Facility)という機能が提供されています。
z/OS提供のコンポーネントや、z/OS上で稼働する各種ミドルウェアについてもこのSMFの仕組みを利用して各種情報が収集されます。

これらの情報は、データセット、もしくはログ・ストリームに取得されます。いずれも特定のサイズのストレージを循環して利用することになりますので、後から確認できるようにするために必要に応じて定期的にSMF情報をダンプして保管しておく運用が行われたりします。

収集される情報の種類は、SMF Typeと呼ばれる番号で分類され、それぞれレコードのフォーマットが決まっています([SMF Records](https://www.ibm.com/docs/en/zos/3.1.0?topic=smf-records))。例えば、Type30はジョブ/ジョブステップごとの詳細情報、Type70～79はRMFにより取得される情報、Type88はロガーに関する情報が取得されます。ミドルウェア関連で言えば、Type100～102はDb2関連、Type110はCICS関連、Type115～116はMQ関連、Type120はWAS関連、Type123はz/OS Connect関連、など...。さらに各TypeはSubtypeに分かれて管理されることがあります。

これらSMFレコードのフォーマットはTypeごとに異なり、いずれも複雑な構造をしていることが多いです。例えば、1レコードの中には複数の異なるフォーマットの"セクション"が含まれていることがあります。その場合セクションごとにLengthや数が可変なので、各セクションのオフセット、Length、セクション数を表すフィールドのセット(triplets)が用意されており、その値を元にデータを分割してハンドリングする必要があります。このように求めるフィールドをきれいな形で取得するためにはそれなりに複雑な操作が必要となります。そのため、各種レポートツールなどが別途提供されており、比較的機能が充実しているものは有償の場合が多いです。

参考: 
[Introduction to SMF](https://www.ibm.com/docs/en/zos/3.1.0?topic=smf-introduction)
[SMF Records](https://www.ibm.com/docs/en/zos/3.1.0?topic=smf-records)
[Using SMFPRMxx parameters](https://www.ibm.com/docs/en/zos/3.1.0?topic=smf-using-smfprmxx-parameters)
[Syntax format of SMFPRMxx](https://www.ibm.com/docs/en/zos/3.1.0?topic=ssmfsp-syntax-format-smfprmxx)
[Using the SMF dump programs](https://www.ibm.com/docs/en/zos/3.1.0?topic=smf-using-dump-programs)


## z/OS Data Gatherer
z/OSに関する活動情報を収集/レポーティングするRMF(Resource Measurement Facility)というフィーチャーが提供されています。z/OS V2.5からはRMFのデータ収集部分の機能がz/OS Data Gathererという独立したコンポーネントとして分離されて提供されるようになりました。

Data GathererはSMFデータの収集やモニターに関する各種支援機能が提供されていますが、そのうちの1機能としてSMFデータにREST API経由でアクセスするための機能([SMF REST Service](https://www.ibm.com/docs/en/zos/3.1.0?topic=zos-accessing-data-using-rest-services))が提供されています。ただし、このSMF REST Service経由で取得できるSMFレコードのTypeは一部のものに限られます。
- [z/OS V2.5で取得可能なSMF Type](https://www.ibm.com/docs/en/zos/2.5.0?topic=services-smf-rest)
    - SMF Type 70-79
    - SMF Type 99 Subtype 1, 2, 6, 12, 14
    - SMF Type 113
- [z/OS V3.1で取得可能なSMF Type](https://www.ibm.com/docs/en/zos/3.1.0?topic=services-smf-rest)
    - SMF Type 30
    - SMF Type 70-79
    - SMF Type 99 Subtype 1, 2, 6, 12, 14
    - SMF Type 113


参考:
[【z/OS V2R5変更点】 「z/OS Data Gatherer」の新登場（「RMF」から独立した「z/OSベース・エレメント」） ](https://community.ibm.com/community/user/ibmz-and-linuxone/blogs/shigeki-kimura1/2022/03/27/sharing-zos-upgrade-info-by-professor-kimura-064j?communityKey=90109de1-fe63-40e9-b4dd-6d05d62c35f2)
[z/OS V2.5 - Resource Measurement Facility (RMF) new functions to consider](https://www.ibm.com/docs/en/zos/2.5.0?topic=v2r5-resource-measurement-facility-rmf-new-functions-consider)
[Abstract for z/OS Data Gatherer User's Guide](https://www.ibm.com/docs/en/zos/3.1.0?topic=guide-abstract-zos-data-gatherer-users)
[Accessing data using REST services](https://www.ibm.com/docs/en/zos/3.1.0?topic=zos-accessing-data-using-rest-services)
[Setting up z/OS Data Gatherer REST services](https://www.ibm.com/docs/en/zos/3.1.0?topic=gatherer-setting-up-zos-data-rest-services)


## z/OSMF

z/OSMF(z/OS Management Facility)は、ブラウザベースのUIや、REST APIなど、システム管理に関する新しいインターフェースを提供するコンポーネントです。実体としてはWebSphere Liberty profile(JavaベースのWebアプリケーション・サーバー)で実装されており、LibertyのWebアプリが追加される形で様々な機能拡張が行われてきています。
上で挙げたData Gatherr提供の[SMF REST Service](https://www.ibm.com/docs/en/zos/3.1.0?topic=zos-accessing-data-using-rest-services)もz/OSMF上で実装されることになります。

参考:
[Overview of z/OSMF](https://www.ibm.com/docs/en/zos/3.1.0?topic=zosmf-overview)
[Configure z/OS Data Gatherer: SMF REST Services](https://www.ibm.com/docs/en/zos/3.1.0?topic=services-configure-zos-data-gatherer-smf-rest)

# SMF Explorer概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/8e2c6036-59e9-47ca-b19e-e7b5071df518.png)

SMF ExplorerはPythonスクリプトからSMFデータを容易にアクセスするためのフレームワークであり、Pythonのパッケージとして提供されます(Data Gathererの一部として提供される)。
このフレームワークを使用することで、z/OSMF上のSMF REST Service経由でSMFダンプ・データセットにアクセスし、SMFデータを容易にPandasデータフレームのオブジェクトとして取得できます。
データフレームはPython上でデータ分析や可視化を行う際に一般的に広く使われるオブジェクトですので、データフレーム化してしまえば、あとは標準的なPythonパッケージ(NumPy, Plotly等)を使って各種分析/可視化が行える、すなわち汎用的なPythonスキルでデータを扱えるということになります。ただし、SMF REST Service経由でSMFデータを取得することになりますので、SMF REST ServiceがサポートするSMF Typeしか取得できません。
SMF Explorerはz/OSMF、Data Gatherr機能を利用するだけなので、それ以外に追加のS/Wライセンスは必要ありません。
z/OSMF上にSMF REST Serviceを構成する必要がありますが、このサービスを有効化するとz/OSMF上の他のサービスが使えなくなるので注意が必要です。他のz/OSMFサービスを使用している場合、SMF REST Service用に別途独立したz/OSMFインスタンスを作成する必要があります。


参考:
[IBM SMF Explorer](https://ibm.github.io/IBM-SMF-Explorer/)
[Github - SMF Explorer](https://github.com/IBM/IBM-SMF-Explorer)
[z/OSMF - z/OS Data Gatherer: SMF REST Services](https://www.ibm.com/docs/en/zos/3.1.0?topic=services-configure-zos-data-gatherer-smf-rest)
[Configure a separate z/OSMF server instance](https://www.ibm.com/docs/en/zos/3.1.0?topic=configurations-configure-separate-zosmf-server-instance)
[IBM Z Trial for IBM z/OS Data Gatherer and IBM SMF Explorer](https://community.ibm.com/community/user/ibmz-and-linuxone/blogs/marija-perkovic/2023/12/02/ibm-z-trial-for-zos-data-gatherer-and-smf-explorer?communityKey=e7b7d299-8509-4572-8cf1-c1112684644f)


# SMF Explorerの位置づけ

SMFデータを分析/可視化するための支援ツールというのはこれまでもいくつか提供されています。各ツールにおけるSMFデータ抽出から分析/可視化までの構成パターンとしては、大まかには以下のように整理できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/76ec0632-14a8-4411-93c5-4a5962d98f3a.png)

SMF Explorerと位置づけが類似すると思われる他コンポーネントをいくつかピックアップし特徴の違いを整理してみます。

## 類似製品/コンポーネント

**IBM Z IntelliMagic Vision**
SMFデータを抽出して蓄積し、z/OSやミドルウェア関連の情報をブラウザ・ベースのUIで可視化するための一連の機能を提供しています。元々この製品はIntelliMagic社が提供していたものですが、2024年にIBMがIntelliMagic社を買収し、IBM製品として提供されているものです。
幅広いSMFデータをサポートし、各種情報を可視化するダッシュボードなどが提供されています。SaaSとしてのサービスも提供されているためSMFデータをクラウド上に逐次転送することで、分析/可視化の基盤を即利用できます。

参考:
[IBM Z IntelliMagic Vision for z/OS](https://www.ibm.com/jp-ja/products/z-intellimagic-vision-for-zos)
[z/OS systems performance with IBM Z IntelliMagic Vision for z/OSを管理する](https://www.ibm.com/jp-ja/products/z-intellimagic-vision-for-zos/systems)
[AI Ops & Security最新動向 ](https://community.ibm.com/community/user/ibmz-and-linuxone/blogs/takako-kugai1/2024/08/27/ai-opps-security?communityKey=90109de1-fe63-40e9-b4dd-6d05d62c35f2)

**IZLDA(IBM Z Operational Log Data Analytics)**
IZLDAではz/OS上のログやSMFデータを可視化し分析支援するための機能が提供されています。IZLDAに含まれるCDPz(Common Data Provider for Z)というコンポーネントを使用すると、SMFデータをリアルタイムにオープン系のデータ分析基盤(ELKスタック等)に転送することができます。
※以前はCDPz単体での提供がありましたが、2025年5月現在ではCDPz単体では提供されていません。

参考: 
[IBM Z Operational Log and Data Analytics](https://www.ibm.com/jp-ja/products/z-log-and-data-analytics)
[CDPzを利用したz/OS-ELK連携](https://qiita.com/tomotagwork/items/f4fbb6d3e8b6ad084b34)
[IBM Z Common Data Provider_2.1.x - Withdrawal notification](https://www.ibm.com/support/pages/node/1219024)

**DVM(Data Virtualization Manager for z/OS)**
DVMは、z/OS上の各種データストアに対して仮想表を提供することによって、外部からSz/OS上のデータにSQLアクセスできるようにする機能を提供するものです。
対象のデータストアとしては、シーケンシャル・ファイル、VSAM、IMS DBなどがありますが、その中にSMFも含まれます。すなわち、DVMを介することでSMFデータをSQLで取得することができるようになります。

参考: 
[IBM Data Virtualization Manager for z/OS](https://www.ibm.com/jp-ja/products/data-virtualization-manager-for-zos)
[Configuring access to data for IT Operational Analytics](https://www.ibm.com/docs/en/dvm/1.2.0?topic=sources-configuring-access-data-it-operational-analytics)

**RMF(Resource Management Facility)**
RMFはz/OSの1コンポーネントとして提供され、z/OS関連のパフォーマンス情報収集/レポーティング機能を有しています。基本的にはz/OS上でのレポート機能(JCLや3270のUIベース)を提供していますが、リッチなUIやアプリケーションから操作しやすい形でデータを取り出しPC側で分析/可視化する機能も拡張されています。

※z/OS V2.5から、データ収集のコンポーネントが"Data Gatherer"、レポート生成用のコンポーネントが"RMF"という役割分担に変わっています。

参考:
[Abstract for Resource Measurement Facility Report Analysis](https://www.ibm.com/docs/en/zos/3.1.0?topic=rmf-zos-resource-measurement-facility-report-analysis)
[Analysis on the workstation](https://www.ibm.com/docs/en/zos/3.1.0?topic=guide-analysis-workstation)
[z/OSの新しい管理方法を探る - (4) RMF MonitorIIIレポートのElasticsearchへの取り込み](https://qiita.com/tomotagwork/items/7e7e9b8b6432739b3e3a)
[【z/OS V2R5変更点】 「z/OS Data Gatherer」の新登場（「RMF」から独立した「z/OSベース・エレメント」） ](https://community.ibm.com/community/user/ibmz-and-linuxone/blogs/shigeki-kimura1/2022/03/27/sharing-zos-upgrade-info-by-professor-kimura-064j?communityKey=90109de1-fe63-40e9-b4dd-6d05d62c35f2)

## 特徴比較

SMF Explorerと上のコンポーネントをざっくりとまとめると以下のようになります。
(あくまで大まかな特徴分けです。利用する機能や構成によっては異なる場合がありますのでご了承ください)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/00afc4f3-27c7-4594-b692-f8f77a70452a.png)

特徴比較の観点を補足しておきます。

### 分析タイミング
z/OS上でリアルタイムに取得されているSMFデータを直接参照/分析できるかという観点です。直接アクセスする使い方ができるものはリアルタイム、ダンプされたSMFデータセットをオフラインでハンドリングする形式のものはバッチとしています。
IntelliMagicやIZLDAのアーキテクチャーは、一旦個別の外部データストアに蓄え、それを元に分析/可視化を行う流れとなります。元のSMFデータから直接抽出できたとしても一旦データストアに蓄積されるタイムラグが発生するため"ニア・リアルタイム"としています。

SMF Explorerはダンプ・データセットを扱うことになるので、完全にバッチ的な使い方を想定した機能と言えます。

### 追加のデータ・ストア
Elasticスタックや専用のデータ蓄積/分析基盤を利用する形態と、SMFデータを直接扱う形態に分かれます。前者は抽出したSMFデータを一旦別のデータ・ストアに蓄える必要があるため、そのデータストアを用意する必要があります。

SMF Explorerはz/OSMF経由でSMFダンプ・データセットに直接アクセスすることになるので、中間のデータ・ストアは不要です。

### UI
リッチな機能を有する有償製品では、分析/可視化機能も出来合いのものが提供されていて、ブラウザ・ベースのUIが提供されているものもあります。特にIntelliMagicやIZLDA等は、z/OSだけでなく主要なミドルウェアについてのパフォーマンス情報分析、可視化のためのダッシュボードが提供されており、特にコーディングなどをしなくても状況分析や把握に必要な情報が整理されています。しかもブラウザベースのUIなので、インタラクティブに操作可能なグラフなどが提供され、問題個所をドリルダウンして追っていったり関連情報にリンクで飛んだりすることも可能です。

SMF ExplorerはあくまでSMFデータをPythonスクリプトで扱いやすくするためのフレームワークを提供しているので、分析/可視化のためのリッチなUI自体を提供するものではありません。可視化やレポーティング部分は自由にカスタマイズして必要なものを適宜作れますよ、という位置づけのものです。

### コーディング
各コンポーネントには、SMFデータを分析/可視化する部分を、製品が提供するか、ユーザーが作成する前提のものか、という根本的なコンセプトの違いがあります。IntelliMagicやIZLDAは前者です。DVMはSMFデータを仮想化してSQLでアクセスできるようにするものなので、後者の位置づけです。RMFは基本的にはレポートツールが提供されているので前者に相当しますが、アプリケーションから利用しやすいようにXMLで情報を取得できるようなインターフェースも提供されています。

SMF ExplorerはSMFデータをPythonスクリプトで扱うためのフレームワークを提供しているので、完全に後者のコンセプトのコンポーネントです。データ・サイエンティストと呼ばれるようなエンジニアの間ではPythonは主流と言ってもよい言語ということもあり、データ分析の世界で広く利用されている技術でSMFデータを扱えるというのがSMF Explorerの主要な特徴と言えます。

### サポートされるSMF Type
扱うことのできるSMF Typeの範囲というのが使用する製品/コンポーネントによって異なります。有償製品の方がz/OS関連のデータだけでなくミドルウェアの情報も含めて広範囲にサポートしている傾向にあります。

SMF ExplorerがサポートするSMF Typeは基本的には上に示したようにz/OS関連の一部のTypeに限られており、カバーされている範囲は多いとは言えません。ミドルウェア関連のSMF Typeは軒並みサポートされていません。比較的新しい機能なので、今後の拡張に期待したいところです。

### 追加S/Wライセンス
z/OSとは別に有償のライセンスが必要になるかどうかの観点です。有償のツールは有償なだけあってそれなりにリッチな機能が提供される傾向にあります(当たり前といえば当たり前ですが...)。

SMF Explorerは概要でも触れた通り、z/OSの一部のコンポーネントであるData Gatherer、および、z/OSMFの機能を利用するものなので、それ以外の追加のライセンスコストは不要です。PCやオープン系サーバーでPythonを動かすことになりますので、そのための環境は必要になります。ただ、Pythonや関連ライブラリ、開発環境等はOSSとして提供されているものがありますのでそれらを活用することができます。

### 構成負荷
リッチな機能を有するコンポーネントについては、それなりに構成負荷がかかります。特に、別途データ蓄積/分析基盤を必要とするコンポーネントについては、それらの構成が複雑になりがちです。
ただ、IntelliMagic VisionについてはSaaSとしてのサービスも提供されています。SaaSを利用すればその辺りの負荷は軽減されるものと思われます(セキュリティー・ポリシー上、クラウドににパフォーマンス情報を保持すること支障が無ければ)。

SMF Explorerはz/OSMFを利用した比較的シンプルな構成で扱えますので構成のハードルは低いといえます。

### まとめ

上のような特徴を踏まえると、SMF Explorerの位置づけとしては、「これさえあればパフォーマンス分析/可視化がなんでもできますよ」というものではなく、「簡易的な構成でお手軽に汎用的な技術を使って分析/可視化のスクリプトが作れますよ」というものであると言えます。
扱えるSMF Typeも限られていますので、まずは単発で負荷テスト実施したときのパフォーマンス情報を可視化してみるとか、何かパフォーマンス上の問題が生じた時にピンポイントでサクッとSMF情報分析してみたいと、そういうい用途で使うことを想定するのがよいと思います。
定常的、広範囲、大規模にパフォーマンス・データを分析、可視化したいということになれば、有償の製品を含め、よりリッチな機能を提供するコンポーネントの利用を検討するのがよいと思います。

また、SMF Explroerは"Python"という広くデータ分析の分野で活用されている言語でSMFデータを扱うことができます。すなわち、z/OS固有のツールではなく汎用的に提供されているデータ加工用のライブラリを利用して柔軟に情報分析やレポーティングを行えるということが主要な特徴の1つと言えます。一般に提供される機械学習や可視化関連のライブラリを活用することで、より深い傾向分析や将来予測につなげるといった拡張も考えられます。


## 番外編
「パフォーマンス分析/可視化」に関する支援機能を提供するツールとして他にもいろいろあります。上の例ではSMFデータを扱うという文脈で類似のコンポーネントを挙げましたが、他にも例えば以下のようなツールもあります。

- Instana Observability for z/OS: プラットフォーム、ミドルウェアをまたがるリクエスト単位のパフォーマンス情報をリアルタイムに監視可能
    - https://www.ibm.com/jp-ja/products/instana/mainframe-monitoring
    - https://www.ibm.com/docs/en/iofz/1.2.x?topic=overview-supported-transaction-tracking-flows
- OMEGAMONシリーズ: z/OSやミドルウェアに特化したパフォーマンス情報の監視機能を提供。SMFだけでなくリアルタイムの情報の取り扱いが可能。
    - https://www.ibm.com/jp-ja/products/omegamon
- ミドルウェア固有のツール: CICS Performance Analizerなど

運用にAIを活用するということでAIOpsという考え方のもと機能拡張も進んでいます。
[サステナブルなITによるDX推進(第4回) AIOpsを利用したIBM zSystemsの運用改善(vol98-0012-mainframe)](https://community.ibm.com/community/user/japan/blogs/provision-ibm1/2022/12/19/vol98-0012-mainframe#ref4)


# おわりに

以降の記事では、SMF Explorerを利用する際に必要な、具体的な環境構築、可視化の例を見ていきたいと思います。