はじめに
SMF Explorerを利用するために必要な環境のセットアップ手順例を示します。
ここでは、VS Code上のJupyter Notebookからz/OSMF(SMF REST Service)経由でSMFデータにアクセスするための環境構築を目指します。
関連記事
SMF Explorerによるパフォーマンス情報可視化 - (1) 概要
SMF Explorerによるパフォーマンス情報可視化 - (2) 環境セットアップ
SMF Explorerによるパフォーマンス情報可視化 - (3) SMF Explorer使用方法
SMF Explorerによるパフォーマンス情報可視化 - (4) Tipsなど
全体像
z/OS側セットアップ例
z/OS側では、SMF REST Serviceを有効化したz/OSMFを構成する必要があります。SMF REST Serviceを有効化すると、他のz/OSMFサービスが利用できなくなりますので、z/OSMFサーバーをSMF REST Service以外で使用している場合は、別途SMF REST Service専用のz/OSMFを構築する必要があります。
また、z/OSはV2.5以降 + PTF:UJ95534 が必要です。
参考: Prerequisites
ここでは、z/OS 3.1上にz/OSMFの構成がすでに存在する前提で、SMF REST Service専用のz/OSMFインスタンスを追加構成する例を示します。
(参考)既存のz/OS環境
以下のような構成がされているものとします。
Angel Process
起動プロシージャー
//IZUANG1 PROC P='',C=N,OUTCLS='*',
// IZUTIME=NOLIMIT,
// NAME=IZUANG1,
// WLPDIR='/usr/lpp/zosmf/liberty'
//*--------------------------------------------------------------*/
//* Startup procedure for the z/OSMF Websphere Liberty Profile */
//* Angel process. */
//*--------------------------------------------------------------*/
//*
//STEP1 EXEC PGM=BPXBATA2,REGION=0M,
// TIME=&IZUTIME.,
// PARM='PGM &WLPDIR./lib/native/zos/s390x/bbgzangl COLD=&C NAME=&NAME
// &P'
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
RACF STARTEDクラス: IZUANG1.*
RLIST STARTED IZUANG1.* STDATA
CLASS NAME
----- ----
STARTED IZUANG1.* (G)
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE NONE NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
STDATA INFORMATION
------------------
USER= IZUSVR
GROUP= IZUADMIN
TRUSTED= NO
PRIVILEGED= NO
TRACE= YES
z/OSMFサーバー
起動プロシージャー
//IZUSVR1 PROC PARMS='zosmfServer', /* Server parms */
// ROOT='/usr/lpp/zosmf', /* z/OSMF installation root */
// WLPDIR='/usr/lpp/zosmf/liberty', /* Liberty directory */
// OUTCLS='*', /* SYSOUT class */
// USERDIR='/global/zosmf', /* Configuration directory */
// TRACE='N', /* Trace option */
// KCINDEX='Y', /* KC index rebuild flag */
// IZUPRM='00', /* Parmlib suffixes or PREV */
// SERVER='AUTOSTART', /* AUTOSTART server */
// Z='0', /* Reserved for IBM */
// IZUMEM=4G /* Server memlimit */
//*
//*--------------------------------------------------------------*/
//* z/OSMF AUTOSTART Websphere Liberty Profile server startup */
//* procedure */
//*--------------------------------------------------------------*/
//*------------------------------------------------------------------
//* Parse z/OSMF PARMLIB member
//*------------------------------------------------------------------
//ZPARM EXEC PGM=IZUPARMS,REGION=0M,
// PARM='/IZUPRM=&IZUPRM,TRACE=&TRACE,USERDIR=&USERDIR,SERVER=&SERVER,Z
// =&Z'
//*
//DFLTCFG DD PATH='&ROOT./defaults/configuration.defaults'
//*
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//CEEDUMP DD SYSOUT=&OUTCLS
//*
//*------------------------------------------------------------------
//* Configure z/OSMF server
//*------------------------------------------------------------------
//CONFZMF EXEC PGM=BPXBATCH,REGION=0M,COND=(0,LT),
// PARM='SH &ROOT./bin/izuconfig.sh &ROOT &USERDIR &TRACE &KCINDEX'
//*
//SYSPRINT DD SYSOUT=&OUTCLS
//SYSOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//STDOUT DD SYSOUT=&OUTCLS
//*
//*------------------------------------------------------------------
//* Start the Websphere Liberty Profile server
//*
//* WLPUDIR - PATH DD that points to the Liberty Profile's "user"
//* directory. If the DD is not allocated, the user
//* directory location defaults to the wlp/usr directory
//* in the install tree.
//* STDOUT - Destination for stdout (System.out)
//* STDERR - Destination for stderr (System.err)
//* STDENV - Initial Unix environment - read by the system. The
//* installation default and server specific server
//* environment files will be merged into this environment
//* before the JVM is launched.
//*------------------------------------------------------------------
//ZOSMF EXEC PGM=BPXBATSL,REGION=0M,COND=(0,LT),
// MEMLIMIT=&IZUMEM.,TIME=NOLIMIT,
// PARM='PGM &WLPDIR./lib/native/zos/s390x/bbgzsrv --clean &PARMS'
//*
//WLPUDIR DD PATH='&USERDIR./configuration'
//*
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//*STDOUT DD PATH='&ROOT/izusvr1.stdout',
//* PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//* PATHMODE=SIRWXU
//*STDERR DD PATH='&ROOT/izusvr1.stderr',
//* PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//* PATHMODE=SIRWXU
パラメータ(IZUPRMxx)
HOSTNAME('*')
HTTP_SSL_PORT(10443)
INCIDENT_LOG UNIT('SYSALLDA')
JAVA_HOME('/usr/lpp/java/java17/J17.0_64')
KEYRING_NAME('ZOSMF_RING')
LOGGING('*=warning:com.ibm.zoszmf.*=info:com.ibm.zoszmf.environment.ui=
finer')
RESTAPI_FILE ACCT(IZUACCT) REGION(65536) PROC(IZUFPROC)
COMMON_TSO ACCT(IZUACCT) REGION(50000) PROC(IZUFPROC)
SAF_PREFIX('IZUDFLT')
SEC_GROUPS USER(IZUUSER),ADMIN(IZUADMIN),SECADMIN(IZUSECAD)
SESSION_EXPIRE(495)
TEMP_DIR('/tmp')
UNAUTH_USER(IZUGUEST)
SERVER_PROC('IZUSVR1')
ANGEL_PROC('IZUANG1')
AUTOSTART('CONNECT')
AUTOSTART_GROUP('NONE')
USER_DIR('/global/zosmf')
CLOUD_SEC_ADMIN('IBMUSER')
WLM_CLASSES DEFAULT(IZUGHTTP)
LONG_WORK(IZUGWORK)
/* Uncomment PLUGINS statement and the names of the plugins you
wish to use below: */
/* PLUGINS( CAPACITY_PROV,
COMMSERVER_CFG,
INCIDENT_LOG,
ISPF,
RESOURCE_MON,
SOFTWARE_MGMT,
SYSPLEX_MGMT,
WORKLOAD_MGMT,
ZERT_ANALYZER) */
PLUGINS(COMMSERVER_CFG,
ISPF,
SOFTWARE_MGMT,
RESOURCE_MON,
WORKLOAD_MGMT)
DISPLAY IZU
参考: Displaying the z/OSMF server settings
F IZUSVR1,DISPLAY IZU
コマンド実行結果(一部サニタイズしています)
VS01 2025070 09:11:45.42 -f IZUSVR1,DISPLAY IZU
VS01 2025070 09:11:45.45 STC00082 +CWWKB0004I: z/OSMF PARMLIBs DISPLAY
IZUG200I The home page of z/OSMF server in SYSTEM(VS01)
https://xxx:10443/zosmf
IZUG041I The server started at 03/09/2025 11:30:08
and has been running for 1 day(s) 21 hour(s) 41 minute(s) 36 second
(s)
Current z/OSMF settings Source
HOSTNAME(xxx) IZUPRM00
VS01 2025070 09:11:45.45 STC00082 +CWWKB0061I CONTINUATION 1 FOR MESSAGE IDENTIFIER 18775
HTTP_SSL_PORT(10443) IZUPRM00
LOGGING('*=warning:com.ibm.zoszmf.*=info:com.ibm.zoszm
f.environment.ui=finer') IZUPRM00
UNAUTH_USER(IZUGUEST) IZUPRM00
SEC_GROUPS
ADMIN(IZUADMIN) IZUPRM00
USER(IZUUSER) IZUPRM00
SECADMIN(IZUSECAD) IZUPRM00
SAF_PREFIX(IZUDFLT) IZUPRM00
VS01 2025070 09:11:45.45 STC00082 +CWWKB0061I CONTINUATION 2 FOR MESSAGE IDENTIFIER 18775
CLOUD_SAF_PREFIX(IYU) DEFAULT
KEYRING_NAME(ZOSMF_RING) IZUPRM00
SESSION_EXPIRE(495) IZUPRM00
WLM_CLASSES
LONG_WORK(IZUGWORK) IZUPRM00
DEFAULT(IZUGHTTP) IZUPRM00
JAVA_HOME(/usr/lpp/java/java17/J17.0_64) IZUPRM00
TEMP_DIR(/tmp) IZUPRM00
INCIDENT_LOG UNIT(SYSALLDA) IZUPRM00
VS01 2025070 09:11:45.45 STC00082 +CWWKB0061I CONTINUATION 3 FOR MESSAGE IDENTIFIER 18775
RESTAPI_FILE
ACCT(IZUACCT) IZUPRM00
PROC(IZUFPROC) IZUPRM00
REGION(65536) IZUPRM00
COMMON_TSO
ACCT(IZUACCT) IZUPRM00
PROC(IZUFPROC) IZUPRM00
REGION(50000) IZUPRM00
AUTOSTART_GROUP(NONE) IZUPRM00
VS01 2025070 09:11:45.46 STC00082 +CWWKB0061I CONTINUATION 4 FOR MESSAGE IDENTIFIER 18775
AUTOSTART(CONNECT) IZUPRM00
SERVER_PROC(IZUSVR1) IZUPRM00
ANGEL_PROC(IZUANG1) IZUPRM00
USER_DIR(/global/zosmf) IZUPRM00
CSRF_SWITCH(ON) DEFAULT
CLOUD_SEC_ADMIN(IBMUSER) IZUPRM00
Status of z/OSMF plugins
VS01 2025070 09:11:45.46 STC00082 +CWWKB0061I CONTINUATION 5 FOR MESSAGE IDENTIFIER 18775
Configuration Assistant(STARTED) IZUPRM00
Capacity Provisioning(UNSPECIFIED) DEFAULT
Workload Management(STARTED) IZUPRM00
Resource Monitoring(STARTED) IZUPRM00
Incident Log(UNSPECIFIED) DEFAULT
Software Management(STARTED) IZUPRM00
WebISPF(STARTED) IZUPRM00
ZERT(UNSPECIFIED) DEFAULT
Sysplex Management(UNSPECIFIED) DEFAULT
VS01 2025070 09:11:45.46 STC00082 +CWWKB0005I: COMMAND RESPONSES COMPLETED SUCCESSFULLY FROM display
izu|setizu Command Handler.
VS01 2025070 09:11:45.46 STC00082 +CWWKB0002I: MODIFY COMMAND DISPLAY IZU COMPLETED SUCCESSFULLY.
RACF STARTEDクラス: IZUSVR1.*
RLIST STARTED IZUSVR1.* STDATA
CLASS NAME
----- ----
STARTED IZUSVR1.* (G)
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE NONE NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
STDATA INFORMATION
------------------
USER= IZUSVR
GROUP= IZUADMIN
TRUSTED= NO
PRIVILEGED= NO
TRACE= YES
USS
zFS
IBMUSER : /global/zosmf : > df -k | grep zosmf
/global/zosmf (OMVS.VS01.SIZUUSRD.ZFS) 21458/172800 4294964075 Available
IBMUSER : /global/zosmf : > ls -la
total 64
drwxr-xr-x 4 IZUSVR IZUADMIN 8192 Jul 16 2021 .
drwxr-xr-x 5 BPXROOT SSHDG 8192 Mar 9 11:08 ..
drwxrwxr-x 9 IZUSVR IZUADMIN 8192 Mar 9 11:31 configuration
drwxrwx--- 10 IZUSVR IZUADMIN 8192 Mar 9 11:31 data
IBMUSER : /global/zosmf : > ls -la configuration/servers/zosmfServer
total 192
drwxrwxr-x 4 IZUSVR IZUADMIN 8192 Mar 9 11:30 .
drwxrwxr-x 3 IZUSVR IZUADMIN 8192 Jul 17 2021 ..
drwxrwxr-x 2 IZUSVR IZUADMIN 8192 Mar 9 11:30 apps
-rw-r--r-- 1 IZUSVR IZUADMIN 5581 Mar 9 11:30 bootstrap.properties
-rw-r--r-- 1 IZUSVR IZUADMIN 5581 Mar 9 11:30 bootstrap.properties.old
-rw-r--r-- 1 IZUSVR IZUADMIN 224 Mar 9 11:30 izu.config.properties
-rw-r--r-- 1 IZUSVR IZUADMIN 1299 Mar 9 11:30 jvm.options
lrwxrwxrwx 1 IZUSVR IZUADMIN 76 Mar 9 11:30 jvm.security.override.properties -> /usr/lpp/zosmf/defaults/servers/zosmfServer/jvm.security.override.properties
-rw-r--r-- 1 IZUSVR IZUADMIN 1174 Mar 9 11:30 kc.properties
drwxrwx--- 3 IZUSVR IZUADMIN 8192 Jul 17 2021 resources
-rw-r--r-- 1 IZUSVR IZUADMIN 714 Mar 9 11:30 server.env
-rwxr-xr-x 1 IZUSVR IZUADMIN 15835 Mar 9 11:30 server.xml
Data Gatherer REST Serviceインストール・パス
※APAR OA66399、PH61005 でインストール・パスが変更されています
IBMUSER : /usr/lpp/grb : > ls -la
total 80
drwxr-xr-x 5 BPXROOT SSHDG 8192 Sep 16 18:50 .
drwxr-xr-x 62 BPXROOT SSHDG 8192 Nov 28 02:09 ..
drwxr-xr-x 2 BPXROOT SSHDG 8192 Aug 5 2024 IBM
drwxr-xr-x 4 BPXROOT SSHDG 8192 Jul 10 2024 REST
drwxr-xr-x 2 BPXROOT SSHDG 8192 Aug 1 2024 smf_explorer
IBMUSER : /usr/lpp/grb : > ls -la smf_explorer
total 3200
drwxr-xr-x 2 BPXROOT SSHDG 8192 Aug 1 2024 .
drwxr-xr-x 5 BPXROOT SSHDG 8192 Sep 16 18:50 ..
-rwxr-xr-x 1 BPXROOT SSHDG 462 Aug 1 2024 README.md
-rwxr-xr-x 1 BPXROOT SSHDG 783177 Aug 1 2024 smf_explorer.zip
-rwxr-xr-x 1 BPXROOT SSHDG 795089 Aug 1 2024 smfexplorer-1.1.12-py3-none-any.whl
-rwxr-xr-x 1 BPXROOT SSHDG 894 Aug 1 2024 uss_requirements.txt
SMF
SMFPRMxx
ACTIVE,
DSNAME(SYS1.VS01.MAN1,
SYS1.VS01.MAN2),
RECORDING(LOGSTREAM)
DEFAULTLSNAME(IFASMF.VS01.DATA)
NOPROMPT,
REC(PERM),
MAXDORM(3000),
MEMLIMIT(6144M),
STATUS(010000),
JWT(0510),
SID(&SYSNAME(1:4))
SID(UNKN),
LISTDSN,
SYS(TYPE(0,2:10,14,15,20,22:24,26,30,32:34,40,42,47:48,64,70:73,
122,
74(3:6),75:83,
84,88,
90,99,100:102,110,127:134,148:151,161,
244,245)),
INTVAL(01),
SYNCVAL(00),
SYS(DETAIL,INTERVAL(003000)),
SYS(EXITS(IEFACTRT,IEFUJI,IEFU83,IEFU84,IEFU85,IEFUJV)),
SUBSYS(STC,EXITS(IEFU83,IEFU84,IEFU85,IEFU29),
INTERVAL(SMF,SYNC))
DISPLAYコマンド
D SMF
VS01 2025070 13:54:54.61 -d smf
VS01 2025070 13:54:54.62 IFA714I 13.54.54 SMF STATUS 448
LOGSTREAM NAME BUFFERS STATUS
A-IFASMF.VS01.DATA 13093 CONNECTED
D SMF,O
VS01 2025070 13:55:58.63 -d smf,o
VS01 2025070 13:55:58.63 IEE967I 13.55.58 SMF PARAMETERS 458
MEMBER = SMFPRM00
NOWIC -- DEFAULT
NOHFTSINTVL -- DEFAULT
NOARECSIGN -- DEFAULT
NORECSIGN -- DEFAULT
SMFDLEXIT(USER3(IRRADU86)) -- DEFAULT
SMFDLEXIT(USER2(IRRADU00)) -- DEFAULT
SMFDPEXIT(USER3(IRRADU86)) -- DEFAULT
SMFDPEXIT(USER2(IRRADU00)) -- DEFAULT
EMPTYEXCPSEC(NOSUPPRESS) -- DEFAULT
NOPERMFIX -- DEFAULT
NOSMF30COUNT -- DEFAULT
MULCFUNC -- DEFAULT
DSPSIZMAX(2048M) -- DEFAULT
BUFUSEWARN(25) -- DEFAULT
BUFSIZMAX(0128M) -- DEFAULT
DDCONS(YES) -- DEFAULT
LASTDS(MSG) -- DEFAULT
NOBUFFS(MSG) -- DEFAULT
MAXEVENTINTRECS(00) -- DEFAULT
DUMPABND(RETRY) -- DEFAULT
SUBSYS(STC,TYPE(0,2:10,14,15,20,22:24,26,30,32:34,40,42,47:48,
64,70:73,122,74(3:6),75:83,84,88,90,99,100:102,110,127:134,
148:151,161,244,245)) -- SYS
SUBSYS(STC,DETAIL) -- SYS
SUBSYS(STC,INTERVAL(SMF,SYNC)) -- PARMLIB
SUBSYS(STC,EXITS(IEFU29)) -- PARMLIB
SUBSYS(STC,EXITS(IEFU85)) -- PARMLIB
SUBSYS(STC,EXITS(IEFU84)) -- PARMLIB
SUBSYS(STC,EXITS(IEFU83)) -- PARMLIB
SYNCVAL(00) -- PARMLIB
INTVAL(01) -- PARMLIB
SYS(EXITS(IEFUJV)) -- PARMLIB
SYS(EXITS(IEFU85)) -- PARMLIB
SYS(EXITS(IEFU84)) -- PARMLIB
SYS(EXITS(IEFU83)) -- PARMLIB
SYS(EXITS(IEFUJI)) -- PARMLIB
SYS(EXITS(IEFACTRT)) -- PARMLIB
SYS(INTERVAL(003000)) -- PARMLIB
SYS(DETAIL) -- PARMLIB
SYS(TYPE(0,2:10,14,15,20,22:24,26,30,32:34,40,42,47:48,64,
70:73,122,74(3:6),75:83,84,88,90,99,100:102,110,127:134,
148:151,161,244,245)) -- PARMLIB
LISTDSN -- PARMLIB
SID(VS01) -- PARMLIB
JWT(0510) -- PARMLIB
STATUS(010000) -- PARMLIB
MEMLIMIT(06144M) -- PARMLIB
MAXDORM(3000) -- PARMLIB
REC(PERM) -- PARMLIB
NOPROMPT -- PARMLIB
DEFAULTLSNAME(IFASMF.VS01.DATA) -- PARMLIB
RECORDING(LOGSTREAM) -- PARMLIB
DSNAME(SYS1.VS01.MAN2) -- PARMLIB
DSNAME(SYS1.VS01.MAN1) -- PARMLIB
ACTIVE -- PARMLIB
参考:
Create a z/OSMF nucleus on your system
IZUSVR reference information
Displaying the z/OSMF server settings
APAR OA66399: Z/OS DATA GATHERER USS INSTALLATION PATH CORRECTION
APAR PH61005: Z/OS DATA GATHERER USS INSTALLATION PATH CORRECTION - Z/OSMF
OA66401: NEW FUNCTION - 2024 2Q Z/OS DATA GATHERER REST SERVICES AND SMF EXPLORER UPDATES AND CORRECTIONS
z/OSMFインスタンス追加
RACF定義やユーザー/グループなどはなるべく既存の環境のものをそのまま流用する方針とします。
基本的には以下のガイドに従います。
Configure a separate z/OSMF server instance
zFS作成
SYS1.SAMPLIB(IZUMKFS)に提供されるサンプルJCLを参考に、zFSの作成、USSへのマウント、フォルダ作成を行います。
ここでは、OMVS.ZOSMF.SMFEXP.ZFS
というzFSを作成し、USS上に/var/zosmf
というマウントポイントにマウントします。IPL後も自動マウントされるようにBPXPRMxxにマウントの定義も追加します。
マウント後、ディレクトリ/var/zosmf/data/home/izusvr
、/var/zosmf/configuration/workflow
を作成し、Permission設定を行います。
mkdir -p /var/zosmf/data/home/izusvr
mkdir -p /var/zosmf/configuration/workflow
chown -R IZUSVR:IZUADMIN /var/zosmf
chmod -R 755 /var/zosmf
起動プロシージャー
"IZUSVR1"を参考に、以下の新規プロシージャー"IZUSVR2"を作成します。
起動プロシージャー
//IZUSVR2 PROC PARMS='zosmfServer', /* Server parms */
// ROOT='/usr/lpp/zosmf', /* z/OSMF installation root */
// WLPDIR='/usr/lpp/zosmf/liberty', /* Liberty directory */
// OUTCLS='*', /* SYSOUT class */
// USERDIR='/var/zosmf', /* Configuration directory */
// TRACE='N', /* Trace option */
// KCINDEX='Y', /* KC index rebuild flag */
// IZUPRM='02', /* Parmlib suffixes or PREV */
// SERVER='STANDALONE', /* AUTOSTART server */
// Z='0', /* Reserved for IBM */
// IZUMEM=4G /* Server memlimit */
//*
//*--------------------------------------------------------------*/
//* z/OSMF AUTOSTART Websphere Liberty Profile server startup */
//* procedure */
//*--------------------------------------------------------------*/
//*------------------------------------------------------------------
//* Parse z/OSMF PARMLIB member
//*------------------------------------------------------------------
//ZPARM EXEC PGM=IZUPARMS,REGION=0M,
// PARM='/IZUPRM=&IZUPRM,TRACE=&TRACE,USERDIR=&USERDIR,SERVER=&SERVER,Z
// =&Z'
//*
//DFLTCFG DD PATH='&ROOT./defaults/configuration.defaults'
//*
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//CEEDUMP DD SYSOUT=&OUTCLS
//*
//*------------------------------------------------------------------
//* Configure z/OSMF server
//*------------------------------------------------------------------
//CONFZMF EXEC PGM=BPXBATCH,REGION=0M,COND=(0,LT),
// PARM='SH &ROOT./bin/izuconfig.sh &ROOT &USERDIR &TRACE &KCINDEX'
//*
//SYSPRINT DD SYSOUT=&OUTCLS
//SYSOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//STDOUT DD SYSOUT=&OUTCLS
//*
//*------------------------------------------------------------------
//* Start the Websphere Liberty Profile server
//*
//* WLPUDIR - PATH DD that points to the Liberty Profile's "user"
//* directory. If the DD is not allocated, the user
//* directory location defaults to the wlp/usr directory
//* in the install tree.
//* STDOUT - Destination for stdout (System.out)
//* STDERR - Destination for stderr (System.err)
//* STDENV - Initial Unix environment - read by the system. The
//* installation default and server specific server
//* environment files will be merged into this environment
//* before the JVM is launched.
//*------------------------------------------------------------------
//ZOSMF EXEC PGM=BPXBATSL,REGION=0M,COND=(0,LT),
// MEMLIMIT=&IZUMEM.,TIME=NOLIMIT,
// PARM='PGM &WLPDIR./lib/native/zos/s390x/bbgzsrv --clean &PARMS'
//*
//WLPUDIR DD PATH='&USERDIR./configuration'
//*
//STDOUT DD SYSOUT=&OUTCLS
//STDERR DD SYSOUT=&OUTCLS
//*STDOUT DD PATH='&ROOT/izusvr1.stdout',
//* PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//* PATHMODE=SIRWXU
//*STDERR DD PATH='&ROOT/izusvr1.stderr',
//* PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//* PATHMODE=SIRWXU
主な変更点:
- プロシージャー名:
IZUSVR1
→IZUSVR2
- USRDIR:
/global/zosmf
→/var/zosmf
- IZUPRM:
00
→02
- SERVER:
AUTOSTART
→STANDALONE
起動ユーザーを指定するためにSTARTEDクラスのプロファイルも作成しておきます。ここでは、起動ユーザーは既存のIDと同様の'IZUSVR'を使用します。
RACF STARTEDクラス: IZUSVR2.*
RDEFINE STARTED IZUSVR2.* UACC(NONE) STDATA(USER(IZUSVR) GROUP(IZUADMIN) PRIVILEGED(NO) TRUSTED(NO) TRACE(YES))
SETROPTS RACLIST(STARTED) REFRESH
RLIST STARTED IZUSVR2.* STDATA
CLASS NAME
----- ----
STARTED IZUSVR2.* (G)
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE NONE NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
STDATA INFORMATION
------------------
USER= IZUSVR
GROUP= IZUADMIN
TRUSTED= NO
PRIVILEGED= NO
TRACE= YES
IZUPRMxx
"IZUPRM00"を参考に、"IZUPRM02"を作成します。
IZUPRMxx
HOSTNAME('*')
HTTP_SSL_PORT(20443)
INCIDENT_LOG UNIT('SYSALLDA')
JAVA_HOME('/usr/lpp/java/java17/J17.0_64')
KEYRING_NAME('ZOSMF_RING')
LOGGING('*=warning:com.ibm.zoszmf.*=info:com.ibm.zoszmf.environment.ui=
finer')
RESTAPI_FILE ACCT(IZUACCT) REGION(65536) PROC(IZUFPROC)
COMMON_TSO ACCT(IZUACCT) REGION(50000) PROC(IZUFPROC)
SAF_PREFIX('IZUDFLT')
SEC_GROUPS USER(IZUUSER),ADMIN(IZUADMIN),SECADMIN(IZUSECAD)
SESSION_EXPIRE(495)
TEMP_DIR('/tmp')
UNAUTH_USER(IZUGUEST)
SERVER_PROC('IZUSVR1')
ANGEL_PROC('IZUANG1')
AUTOSTART('CONNECT')
AUTOSTART_GROUP('NONE')
USER_DIR('/var/zosmf')
CLOUD_SEC_ADMIN('IBMUSER')
WLM_CLASSES DEFAULT(IZUGHTTP)
LONG_WORK(IZUGWORK)
/* Uncomment PLUGINS statement and the names of the plugins you
wish to use below: */
/* PLUGINS( CAPACITY_PROV,
COMMSERVER_CFG,
INCIDENT_LOG,
ISPF,
RESOURCE_MON,
SOFTWARE_MGMT,
SYSPLEX_MGMT,
WORKLOAD_MGMT,
ZERT_ANALYZER) */
PLUGINS(COMMSERVER_CFG,
ISPF,
SOFTWARE_MGMT,
RESOURCE_MON,
WORKLOAD_MGMT)
主な変更点:
- HTTP_SSL_PORT:
10443
→20443
- USER_DIR:
/global/zosmf
→/var/zosmf
Data Gatherer - SMF REST Service設定
基本的には以下のガイドに従います。
Configure z/OS Data Gatherer: SMF REST Services
RACF
以下のガイドを参考にRACF設定を行います。
Setting up z/OS Data Gatherer REST services
RACF SERVERクラス: BBG.SECCLASS.DATASET
RDEFINE SERVER (BBG.SECCLASS.DATASET) UACC(NONE)
PERMIT BBG.SECCLASS.DATASET CLASS(SERVER) ID(IZUSVR) ACCESS(READ)
SETROPTS RACLIST(SERVER) REFRESH
RLIST SERVER BBG.SECCLASS.DATASET AUTHUSER
CLASS NAME
----- ----
SERVER BBG.SECCLASS.DATASET
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE NONE NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
SECLEVEL
--------
NO SECLEVEL
CATEGORIES
----------
NO CATEGORIES
SECLABEL
--------
NO SECLABEL
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
USER ACCESS ACCESS COUNT
---- ------ ------ -----
IZUSVR READ 000000
ID ACCESS ACCESS COUNT CLASS ENTITY NAME
-------- ------- ------------ -------- ---------------------------------------
NO ENTRIES IN CONDITIONAL ACCESS LIST
RACF FACILITYクラス: ERBSDS.MON2DATA
※補足
これはMonitor II REST service用の定義なので今回は不要のはずだが、ついでに設定しておく。
ユーザーごとに個別に権限付与する必要があるようなので、ここではIZADMINグループにREAD権限付与する。また、このプロファイルを作成すると、SDSFのDAパネル表示させようとした時にこのプロファイルのチェックが入ってエラーになってしまうので、SYS1グループにもREAD権限を与えておく。
RDEFINE FACILITY (ERBSDS.MON2DATA) UACC(NONE)
PERMIT ERBSDS.MON2DATA CLASS(FACILITY) ID(IZUADMIN) ACCESS(READ)
PERMIT ERBSDS.MON2DATA CLASS(FACILITY) ID(SYS1) ACCESS(READ)
SETROPTS RACLIST(SERVER) REFRESH
RLIST FACILITY ERBSDS.MON2DATA AUTHUSER
CLASS NAME
----- ----
FACILITY ERBSDS.MON2DATA
LEVEL OWNER UNIVERSAL ACCESS YOUR ACCESS WARNING
----- -------- ---------------- ----------- -------
00 IBMUSER NONE READ NO
INSTALLATION DATA
-----------------
NONE
APPLICATION DATA
----------------
NONE
SECLEVEL
--------
NO SECLEVEL
CATEGORIES
----------
NO CATEGORIES
SECLABEL
--------
NO SECLABEL
AUDITING
--------
FAILURES(READ)
NOTIFY
------
NO USER TO BE NOTIFIED
USER ACCESS ACCESS COUNT
---- ------ ------ -----
IZUADMIN READ 000000
SYS1 READ 000000
ID ACCESS ACCESS COUNT CLASS ENTITY NAME
-------- ------- ------------ -------- ---------------------------------------
NO ENTRIES IN CONDITIONAL ACCESS LIST
RACF DATASETクラス: DEV01.**
エラー例(z/OSMFのJOBLOG):
2025-02-27 01:01:01.482/GMT | smf | [ERROR] | [LargeThreadPool-thread-5] saf-dataset-authorization-service - 'User 'IBMUSER' is not authorized to access the dataset 'TEST01.SMFDUMP.TAG.D250226.V01''
[ERROR ] CWWKS2911E: SAF Service RACROUTE_AUTH did not succeed because the resource profile TEST01.SMFDUMP.TAG.D250226.V01 in class DATASET does not exist. SAF return code 0x00000004. RACF return code 0x00000004. RACF reason code 0x00000000.
そのため、SMF REST Service経由でSMFダンプデータセットにアクセスするユーザーにはそのデータセットに対するREAD権限を付与しておく。また、ダンプデータセット作成のことも考慮し、今回はIZUADMINグループに対してALTER権限を付与する。
ここでは、DEV01
というHLQをダンプデータセット用に使用することにする。(RACF DATASETプロファイルを作成する際はDEV01というユーザー、もしくはグループが存在している必要があるので注意!)
ADDSD 'DEV01.**' UACC(NONE)
PERMIT 'DEV01.**' CLASS(DATASET) ID(IZUADMIN) ACCESS(READ)
SETROPTS GENERIC(DATASET) REFRESH
LISTDSD DATASET('DEV01.**') AUTHUSER
INFORMATION FOR DATASET DEV01.** (G)
LEVEL OWNER UNIVERSAL ACCESS WARNING ERASE
----- -------- ---------------- ------- -----
00 DEV01 NONE NO NO
AUDITING
--------
FAILURES(READ)
NOTIFY
--------
NO USER TO BE NOTIFIED
YOUR ACCESS CREATION GROUP DATASET TYPE
----------- -------------- ------------
ALTER SYS1 NON-VSAM
NO INSTALLATION DATA
SECURITY LEVEL
------------------------------------------
NO SECURITY LEVEL
CATEGORIES
----------
NO CATEGORIES
SECLABEL
--------
NO SECLABEL
ID ACCESS
-------- -------
IZUADMIN ALTER
ID ACCESS CLASS ENTITY NAME
-------- ------- -------- ----------------------------------------------------
NO ENTRIES IN CONDITIONAL ACCESS LIST
z/OSMF Setting Service構成
SMF REST Serviceを構成する前提として、z/OSMF settings serviceの構成を行う必要があります。以下のガイドに従い構成します。
Configure the z/OSMF settings service
こちらは主にSYS1.SAMPLIB(IZUSTSEC)に提供されるサンプルをベースにRACFの各種プロファイル定義、権限設定を行う操作が主となります。
こちらも事前設定済みの想定とするため、詳細は割愛します。
SMF REST Service有効化
以下のガイドに従い、z/OSMFの設定としてSMF REST Serviceを有効化します。
Enabling the service
やり方としては、ブラウザからz/OSMFの管理コンソールに接続してGUIにより行う方法と、設定ファイルを更新する方法があります。ここでは後者のやり方で実施します。
/usr/lpp/zosmf/samples/zosmf.json
を /var/zosmf/configuration/settings/zosmf/zosmf.json
にコピーして編集します。
{
"services": {
"IZU_SMF_CONFIGURE": "Y",
"IZU_ZM2_CONFIGURE": "Y"
}
}
※IZU_ZM2_CONFIGUREはMonitorIIアクセス用なので今回の検証スコープとは関係ないので"N"でよいのですが、お試しなので"Y"にしています。
zosmf.jsonファイルのOwner:GroupはIZUSVR:IZUADMINに指定し、文字コードはISO8859-1(ASCII)として作成する必要がありますのでご注意ください。
IBMUSER : /var/zosmf/configuration/settings/zosmf : > ls -laT
total 48
drwxrwx--- 2 IZUSVR IZUADMIN 8192 Mar 9 11:16 .
drwxrwxr-x 3 IZUSVR IZUADMIN 8192 Mar 9 11:16 ..
t ISO8859-1 T=on -rw-rw---- 1 IZUSVR IZUADMIN 95 Mar 9 11:16 zosmf.json
設定後、z/OSMFを再起動します。
SMFダンプ取得
SMFダンプ取得用サンプルJCL(ログストリームに取得されているSMFのダンプ)
//SMFDMP JOB CLASS=A,MSGCLASS=X
//DUMP EXEC PGM=IFASMFDL,REGION=0M
//DUMPOUT DD DSN=DEV01.SMFDUMP.TAG.D250309.V01,
// SPACE=(CYL,(200,5),RLSE),
// DCB=(LRECL=32760,RECFM=VBS,BLKSIZE=0),
// DISP=(NEW,CATLG,DELETE),UNIT=3390,STORCLAS=SCBASE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
LSNAME(IFASMF.VS01.DATA,OPTIONS(DUMP))
OUTDD(DUMPOUT,TYPE(70:79),START(1600),END(1700))
DATE(2025068,2025068)
/*
参考: Specifying parameters for the SMF log stream dump program
接続確認
z/OSMF提供REST Serviceの基本的な使い方はこちら。
参考: Using the z/OSMF REST services
curlコマンドによる接続確認
curl --request GET --insecure --user TAG:xxx --header "X-CSRF-ZOSMF-HEADER:" https://xxx:20443/zosmf/zosdg/smf/v3/api-docs > api_docs.json
上のcurlコマンドで、APIドキュメントファイル(json)が取得できればOKです。取得されるAPIドキュメントは以下のような内容です。
{
"openapi": "3.0.1",
"info": {
"title": "z/OS Data Gatherer: SMF Data REST Services",
"description": "z/OS Data Gatherer REST Services \n\n\nThe SMF records must be sorted by following SMF header fields: SMFHDR_Date (SMF date), SMFHDR_Time (SMF time) and SMFHDR_SID (SMF System identification)\n \n\n\n ...",
"contact": {
"name": "IBM support",
"url": "https://www.ibm.com/support"
},
"license": {
"name": "z/OS 3.1",
"url": "https://www.ibm.com/docs/en/SSLTBW_3.1.0/pdf/e0zf100_v3r1.pdf"
},
"version": "v1",
"x-build-timestamp": "2024-12-03T12:21:31Z",
"x-modules-version": "1.3.1"
...
※curlコマンドで入手されるjsonデータは成形されていません。上の例は改行やインデントにより成形した結果のイメージを記載しています(JSONデータの成形にはjqコマンドや、VSCodeのFormat機能が利用可能です)。
Swagger UIへのアクセス
ブラウザからSMF REST ServiceのSwagger UIにアクセスしてみます。
URL https://xxx:20443/zosmf/zosdg/smf/
にアクセス
正規の手順でやるのだとすると、証明書を信頼できるルート証明機関に登録してあげるというのが王道だと思いますが、とりあえず今回は「xxxにアクセスする」を選択して先に進みます。
下の方にスクロールし、「Authorize」ボタンをクリック
さらに下の方にスクロールし、SMF30の GET /v1/smf/type/30/subtype/1
を展開して「Try it Out」ボタンをクリックし、必須フィールドに値を入れてます。
さらに下の方にスクロールし、「Execute」ボタンをクリック
HTTP Response: 200が返って、JSONの情報が返されればOK! (SMF REST Service経由で情報取得できたことが確認できました)
PC側セットアップ例
ここではWindows11上に、VS Code, Python環境を整備し、Jupyter NotebookからSMF Explorerのライブラリを使いz/OSMF(SMF REST Service)経由でSMFデータを取得するための設定を行います。
VS Code, Pythonインストール
まずは一般的な手順に従って、VS Code、および、Python関連のExtension(Python Extension for Visual Studio Code, JuPyter Extension for Visual Studio Code)、Python V3.11をインストールします。一応過去に書いた記事で参考になりそうな箇所のリンク記載しますが、もっと分かりやすい記事は色々と転がっていると思います。
参考: https://qiita.com/tomotagwork/items/c9fc5e6adad795bfa175#pc%E5%81%B4%E6%A7%8B%E6%88%90
今回使用するSMF ExplorerがサポートするPythonのバージョンが3.9~3.11であるため、ここでは3.11をインストールすることとします。
参考: Install Python
具体的な操作はここでは割愛します。
今回の環境では、以下のように複数のバージョンのPythonがインストールされている状況です。
C:\>py --list -paths
-V:3.13 * Python 3.13 (64-bit)
-V:3.12 Python 3.12 (64-bit)
-V:3.11 Python 3.11 (64-bit)
-V:3.10 Python 3.10 (64-bit)
Graphvizのインストール(オプション)
SMF Explorerには取得するフィールドの構造をグラフとして可視化する機能が提供されています。この機能を使用する場合、内部的にGraphvizというツールを使用しますので、このツールをインストールしておく必要があります。
基本的に以下のサイトからインストーラーを入手してインストールすればOKです。
https://graphviz.org/download/
Python仮想環境のセットアップ
複数バージョンのPythonを使い分けるには、Pythonの仮想環境を利用するのが便利です。
※VS CodeのTerminalを開くとデフォルトではPower Shellが開きますが、Power Shellだとうまく仮想環境のActivateができない場合があるので、普通のコマンドプロンプトで実行します。
参考: Windows10のVSCodeでvenvを利用するときの注意点
仮想環境作成
VS Codeワークスペースのトップのディレクトリで、以下のコマンドを使用し Python V3.11の仮想環境を作成します。(→venv311_test01という名前のディレクトリ以下に仮想環境のファイルが作成される。)
py -3.11 -m venv venv311_test01
※ポップアップで、「We noticed a new environment has been created. Do you want to select it for the workspace folder?」というメッセージが出ますがここでは無視します。
仮想環境のActivate
以下のコマンドで仮想環境をActivateします。
.\venv311_test01\Scripts\activate
プロンプトの先頭に(venv311_test01)
という仮想環境の名前が表示されればOK
SMF Explorer関連パッケージの入手
SMF Explorer関連パッケージは、USS上のData Gathererインストール・パス配下に提供されています。
例: /usr/lpp/grb/smf_explorer/smf_explorer.zip
これをバイナリー形式でPCに転送して展開すると、以下の2つのファイルが含まれていることが分かります。
- README.md
- smfexplorer-1.1.12-py3-none-any.whl (約777KB)
REAMDE.mdの中身は以下の通りです。
# IBM SMF Explorer with Python
Version : 1.1.12
The **smf_explorer.zip** file contains the **smfexplorer** Python package.
Find further instructions for installing and using the **smfexplorer** on the official documentation page.
https://ibm.github.io/IBM-SMF-Explorer/
### License Specification
See **https://www.ibm.com/docs/en/SSLTBW_3.1.0/pdf/e0zf100_v3r1.pdf** for details on the **IBM Licensed Program Specifications**
Copyright IBM Corp. 2020, 2024
必要なパッケージのインストール
Activateした仮想環境のTreminalにて、必要なパッケージをインストールします。
SMF Explorer関連のパッケージをインストール
pip install smf_explorer\smfexplorer-1.1.12-py3-none-any.whl
その他、適宜必要なパッケージをインストールします。
-
ipykernel: VS Code上でJupyter Notebookを使用するために必要
pip install ipykernel
-
graphviz: フィールド構造の可視化
pip install graphviz
-
python-dotenv: 環境変数管理用
pip install python-dotenv
-
...
接続確認
Jupyter Notebookから接続確認してみます。
以下のような単純なPythonスクリプトを含むNotebookを作成します。
※このスクリプトでは、SMF Type 30 Subtype 1のいくつかのフィールドを取得しています。
import os
import smfexplorer
from smfexplorer.fields import SMF30S1
connection_string = "https://xxx:20443/zosmf/zosdg/smf" # replace with your own connection string
user_name = "TAG"
user_password = "xxxxxxxx"
verify_ssl = 'false'
connection_info = f"mode=dgapi;url={connection_string};verify_ssl={verify_ssl};username={user_name};password={user_password}"
os.environ["SMFPY_CONNECTION_STRING"] = connection_info
dataset_name = "DEV01.SMFDUMP.TAG.D250309.V01"
ctx = smfexplorer.new_context(dataset_name)
fields = [SMF30S1.timestamp,
SMF30S1.sid,
SMF30S1.sys_name,
SMF30S1.job_name
]
ctx.request(fields).run()
VS CodeでNotebookを開き、「Select Kernel」をクリック
Select Another Kernelを選択
先ほど作成した3.11の仮想環境"venv311_test01"を選択
おわりに
これで一通りセットアップが完了し、PythonスクリプトからSMFデータを取得するところまで確認できました。
あとはこれを利用してどのようにデータ分析/可視化できるのか、もう少し具体的な操作方法について見ていきます。