はじめに
CDPzを使用してSMFデータをElasticsearchに送り込む方法としては、手動でバッチジョブを実行する方法と、Log Forwarderのように常駐のアドレススペースを起動しておいてリアルタイムに取得する方法があります。
ここでは、バッチでSMFデータをハンドリングする方法を試してみます。
扱うのはCICS関連のSMFデータです。
関連記事
CDPzを利用したz/OS-ELK連携 - (1)セットアップ編
CDPzを利用したz/OS-ELK連携 - (2)SYSLOG取得編
CDPzを利用したz/OS-ELK連携 - (3)SMF-バッチ編
CDPzを利用したz/OS-ELK連携 - (4)SMF-リアルタイム編
CDPzを利用したz/OS-ELK連携 - (5)カスタマイズ-共通
CDPzを利用したz/OS-ELK連携 - (6)カスタマイズ-SYSLOG
CDPzを利用したz/OS-ELK連携 - (7)カスタマイズ-CICS
CDPzを利用したz/OS-ELK連携 - (8)カスタマイズ-RMF Monitor III
CDPzを利用したz/OS-ELK連携 - (9)カスタマイズ-fluentdの利用
利用コンポーネント
上の(4) System Data Engine部分を、バッチジョブとして手動実行します。
構成
CDPz側構成
SMFデータ取得用ポリシーの作成
ここでは、SMFに取得されたCICSのモニター、統計情報辺りの情報を取得することにします。
z/OSMF上のConfig Toolから、Create a new policy を選択し、名前を指定して、DATA STREAMをクリック
DATA STREAMを追加します。ここでは、CICS関連の主要な項目(モニター、統計情報)をチェックし、SELECT。
選択項目名と説明が分かりにくい(一部間違っている)ので、補足します。
恐らくこんな感じだと思われます。
Name | Desctiption |
---|---|
SMF_110_0 | ジャーナリング? (SMF Type110 SubType0) |
SMF_110_1 | <モニター情報> CICS TS V3.2 up (SMF Type110 SubType1 SMFMNRVM>=0650) |
SMF_110_1_FIELD | <モニター情報> フィールドコネクター? |
SMF_110_1_DICT | <モニター情報> ディクショナリーレコード |
SMF_110_1_6 | <モニター情報> IDクラスデータ |
SMF_110_E | <モニター情報> 例外クラスデータ |
SMF_110_1_5 | <モニター情報> トランザクションリソースクラスデータ |
SMF_110_2 | <統計情報> CICS |
SMF_110_3 | <統計情報> TSデータ共用サーバー |
SMF_110_4 | <統計情報> CFDTサーバー |
SMF_110_5 | <統計情報> Named Counterサーバー |
SMF_111 | <統計情報> CTG |
SMF_110_1_KPI | <モニター情報> 主要な項目を独自に集計してくれているっぽい |
参考
モニター: https://www.ibm.com/support/knowledgecenter/ja/SSGMCP_5.4.0/monitoring/dfht3_monformats.html
統計: https://www.ibm.com/support/knowledgecenter/ja/SSGMCP_5.4.0/system-programming/cics/dfha37r.html
※Logstashの構成では、8081ポートをListenする構成にしていますので、ここではLogstashのホスト名、ポート番号を指定すべきです。しかし今回使用しているテスト環境の制約のため、ホスト=>Linuxへのコネクションが直接張れません。そこで、ポートフォワードの設定をして、ローカルの8081ポートをLinuxの8081へフォワードする設定を別途実施しています。そのため、ここではlocalhost:8081を宛先として指定しています。
my_elasticsearchが作成されるので、そのSubscriberボタンをクリック
全てのStreamを選択し、UPDATE SUBSCRIPTIONをクリック
以下のように、Data StreamとSubscriberが線で繋がれ、関連付けされました。次にSYSTEM DATA ENGINEをクリックします。
結果、/u/CDP201/cdpConfig/以下に、上の設定に基づいて各種構成ファイルが生成されます。
[CICS004@EPLEX1:/u/CDP201/cdpConfig] ls -la | grep Test02
-rw-r----- 1 0 IZUADMIN 1032 Jan 8 11:00 Test02_CICS01.layout
-rw-r----- 1 0 IZUADMIN 19408 Jan 8 11:00 Test02_CICS01.policy
-rw-r----- 1 0 IZUADMIN 1035173 Jan 8 11:00 Test02_CICS01.sde
ここで生成されるTest02_CICS01.sdeは、USS上のファイルとして生成されていますが、中身は順次ファイルのようなのでそのままでは内容確認できません。なので、以下のようなJCLで無理やりTest02_CICS01.sde => CDP02.TEMP.TEST02.SDEというデータセットにコピーして中身確認してみました。
//IEBGENER JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//COPY1 EXEC PGM=IEBGENER
//SYSPRINT DD SYSOUT=*
//SYSIN DD DUMMY
//SYSUT1 DD PATH='/u/CDP201/cdpConfig/Test02_CICS01.sde',RECFM=V,
// LRECL=255,BLKSIZE=259,PATHDISP=(KEEP),FILEDATA=RECORD
//SYSUT2 DD DSN=CDPZ02.TEMP.TEST02.SDE,DISP=(NEW,CATLG,DELETE),
// VOL=SER=ZSPK01,SPACE=(CYL,(10,1)),RECFM=V,LRECL=255
すると、この中身は、CDPZ02.V2R1M0.SHBODEFSに提供されているメンバーのうち、ConfigToolで選択したData Stream(今回の場合CICSのモニターや統計情報)に関連するメンバーを連結したものになっているようです。
このsdeファイルから、/* Name: xxx */という行を抜粋すると、以下のようになっています。
/* Name: HBOCCORY */
/* Name: HBOLLSMF */
/* Name: HBORS110 */
/* Name: HBOR110T */
/* Name: HBOR1102 */
/* Name: HBOR1103 */
/* Name: HBOTDSPE */
/* Name: HBOTDWEK */
/* Name: HBOTPERI */
/* NAME: HBOTCIFI */
/* Name: HBOUS110 */
つまり、この順番でSHBODEFSメンバーの内容がコンカチされているようです。
ConfigToolでDataStreamとしてどの情報を取得するかというのを選択した際に(SMF_110_2など)、その選択した項目を取得するのに、どのSHBODEFSメンバーが必要になるかという情報は、恐らく/usr/lpp/IBM/zcdp/v2r1m0/UI/LIB/sde.streams.jsonの情報を元に判断しているようです。
...
{
"category": "SMF",
"name": "SMF_110_2",
"description": "Subtype 2. CICS statistics",
"tags": [
"CSV",
"Split"
],
"concatenation": [
"CDP"
],
"hboin": {
"all": [
"HBOCCORY",
"HBOLLSMF",
"HBORS110",
"HBOR110T",
"HBOR1102",
"HBOR1103",
"HBOTDSPE",
"HBOTDWEK",
"HBOTPERI",
"HBOTCIFI",
"HBOUS110"
]
},
...
JCL作成 (to dataset)
参考: Creating the System Data Engine batch job for writing SMF data to data sets
※このJCLを流すにあたっては、上で示したポリシーを作成する必要はありません。入力となるSMFデータセットがあれば単発で動作確認できます。
SMFを取得するバッチですが、datasetに出力するためのサンプルJCLというのが提供されているので、まずはこれを動かしてみます(いきなりData Streamer => Logstash に送るのはハードル高いので、事前テストの意味で、単発で確認できるJCL作って動作を確認します)。
CDPZ02.V2R1M0.SHBOSAMP(HBOJBCOL)をコピーして編集します。上で選択したSMF Type(CICS関連)のデータを取得する場合、以下のようなJCLになります。
//HBOSMFCB JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//*
//HBOSMFCB EXEC PGM=HBOPDE,REGION=0M,
// PARM='SHOWINPUT=NO,ZIIPOFFLOAD=NO'
//STEPLIB DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBOLOAD
//*
//* CONTROL STATEMENTS
//*
//HBOIN DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOCCSV)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOLLSMF)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBORS110)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOR110T)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOR1102)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOR1103)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOTDSPE)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOTDWEK)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOTPERI)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOTCIFI)
// DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBODEFS(HBOUS110)
//*
//* Sample COLLECT statement for processing log data
//*
// DD *
COLLECT SMF
COMMIT AFTER END OF FILE;
/*
//HBOLOG DD DISP=SHR,DSN=CDPZ01.SMFDUMP.D191016.T1
//HBOOUT DD SYSOUT=*
//HBODUMP DD SYSOUT=*
//HBODEBUG DD SYSOUT=*
//SMF11000 DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF11001 DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF110FC DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF110DD DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF11016 DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF110EX DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF110TX DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF11015 DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF11002 DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF11003 DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF11004 DD SYSOUT=*,RECFM=V,LRECL=32756
//SMF11005 DD SYSOUT=*,RECFM=V,LRECL=32756
カスタマイズ箇所についての補足:
HBOIN DD
HBOIN DDには、上のセクションで確認したように、sde.streams.jsonファイルから、必要なHBODEFSのメンバーを判断して指定します(取得したいSMF Typeに応じたメンバーを全てコンカチ)。
ここで指定するメンバーは順番を意識する必要があるので注意!最初に、HBOCCSV, HBOLLSMFを指定し、その後、HBORx, HBOTx, HBOUx の順に指定します。(CICS以外はちゃんと見てません。他のコンポーネントだと別途考慮しなければいけないことがあるかも...)
HBOLOG DD
ここでは、入力となるSMFデータセット(もしくは必要なSMFデータのみダンプしたデータセット)を指定します。
結果出力用DD
出力用のDD名に何を指定すればいいのかも分かりにくいのですが、HBOIN DDに指定したメンバーの定義から判断する必要があります(SET IBM_FILE = 'xxx' で指定されている名前)。
SHBODEFSメンバーの構造としてはこんな感じになっています。
HBOCCSVを最初に指定することで、CSVフォーマットでファイル(Data StreamerではなくDD)に出力するものと判断されます。
SET IBM_UPDATE_TARGET = 'FILE &IBM_FILE';
SET IBM_FILE_FORMAT = 'CSV';
HBOUxxxxというメンバーには、以下のように出力先を上書きする命令(DEFINE UPDATE)が含まれており、その直前に出力先DD名がIMB_FILE=で指定されています。
-- HBOR1102 records
SET IBM_FILE = 'SMF11002';
DEFINE UPDATE SMF_110_2
VERSION 'CDP.110 '
FROM SMF_110_2
TO &IBM_UPDATE_TARGET
&IBM_CORRELATION
AS &IBM_FILE_FORMAT SET(ALL);
つまり、上のJCLの出力用DD名には、このIBM_FILEに設定されている名前を指定すればよいことになります。
ちなみに、HBOU110から IBM_FILE= xxxの行を抜き出すとこんな感じです。
SET IBM_FILE = 'SMF11000';
SET IBM_FILE = 'SMF11001';
SET IBM_FILE = 'SMF110FC';
SET IBM_FILE = 'SMF110DD';
SET IBM_FILE = 'SMF11016';
SET IBM_FILE = 'SMF110EX';
SET IBM_FILE = 'SMF110TX';
SET IBM_FILE = 'SMF11015';
SET IBM_FILE = 'SMF11002';
SET IBM_FILE = 'SMF11003';
SET IBM_FILE = 'SMF11004';
SET IBM_FILE = 'SMF11005';
これらをJCLの結果出力用DD名として指定しています。
JCL実行!
上のJCLをサブミットしてみます。
NP DDNAME StepName ProcStep DSID Owner C Dest Rec-Cnt Page-Cnt Byte-Cnt CC Rmt Node O-Grp-N SecLabel PrMod
JESMSGLG JES2 2 CICS004 X LOCAL 20 1,189 1 1 1 LINE
JESJCL JES2 3 CICS004 X LOCAL 79 5,184 1 1 1 LINE
JESYSMSG JES2 4 CICS004 X LOCAL 85 4,176 1 1 1 LINE
HBOOUT HBOSMFCB 102 CICS004 X LOCAL 367 26,630 1 1 1 LINE
HBODUMP HBOSMFCB 103 CICS004 X LOCAL 38 2,899 1 1 1 LINE
SMF11001 HBOSMFCB 106 CICS004 X LOCAL 13 3,090 1 1 1 LINE
SMF110FC HBOSMFCB 107 CICS004 X LOCAL 3,920 534,420 1 1 1 LINE
SMF110DD HBOSMFCB 108 CICS004 X LOCAL 1,176 191,827 1 1 1 LINE
SMF110TX HBOSMFCB 111 CICS004 X LOCAL 77 684,483 1 1 1 LINE
SMF11002 HBOSMFCB 113 CICS004 X LOCAL 161 42,910 1 1 1 LINE
HBOOUT DDには、SMFを処理した内容が出力されます。各SMFレコードが何件あったか、というような情報も出力されているようです。
2020-01-08 17:06:25 HBO0102I Log SMF was successfully defined.
2020-01-08 17:06:25 HBO0125I SMF_110_1_C was successfully defined.
2020-01-08 17:06:25 HBO0165I The record procedure HBO2COMP is defined.
2020-01-08 17:06:25 HBO0125I SMF_110_1_CO was successfully defined.
2020-01-08 17:06:25 HBO0572I A comment is present in the language statement.
2020-01-08 17:06:25 HBO0125I SMF_110_E was successfully defined.
2020-01-08 17:06:25 HBO0572I A comment is present in the language statement.
2020-01-08 17:06:25 HBO0125I SMF_110_0 was successfully defined.
2020-01-08 17:06:25 HBO0572I A comment is present in the language statement.
2020-01-08 17:06:25 HBO0165I The record procedure HBOSD110 is defined.
2020-01-08 17:06:25 HBO0165I The record procedure HBO2CCMF is defined.
...
2020-01-08 17:06:26 HBO0300I System Data Engine Collect started.
2020-01-08 17:06:26 HBO0302I Processing CDPZ01.SMFDUMP.D191016.T1 on ZSPK01
2020-01-08 17:06:26 HBO0341I The first-record timestamp is 2019-10-16 14:26:40.630000
2020-01-08 17:06:26 HBO0342I The last-record timestamp is 2019-10-16 18:00:50.340000
2020-01-08 17:06:26 HBO0310I Buffer processing started after 176 records due to end of log.
2020-01-08 17:06:26 HBO0003I
2020-01-08 17:06:26 HBO0315I Records read from the log or built by log procedure:
2020-01-08 17:06:26 HBO0317I Record name | Number
2020-01-08 17:06:26 HBO0318I -------------------|----------
2020-01-08 17:06:26 HBO0319I SMF_110_0 | 0
2020-01-08 17:06:26 HBO0319I SMF_110_1_C | 13
2020-01-08 17:06:26 HBO0319I SMF_110_2 | 161
2020-01-08 17:06:26 HBO0319I SMF_110_3 | 0
2020-01-08 17:06:26 HBO0319I SMF_110_4 | 0
2020-01-08 17:06:26 HBO0319I SMF_110_5 | 0
2020-01-08 17:06:26 HBO0320I Unrecognized | 2
2020-01-08 17:06:26 HBO0318I -------------------|----------
2020-01-08 17:06:26 HBO0321I Total | 176
2020-01-08 17:06:26 HBO0318I -------------------|----------
2020-01-08 17:06:26 HBO0383I Unrecognized records are records that are in the data stream but are not defined in the
active policy.
2020-01-08 17:06:26 HBO0003I
2020-01-08 17:06:26 HBO0316I Records built by record procedures:
2020-01-08 17:06:26 HBO0317I Record name | Number
2020-01-08 17:06:26 HBO0318I -------------------|----------
2020-01-08 17:06:26 HBO0319I SMF_CICS_T | 77
2020-01-08 17:06:26 HBO0319I SMF_110_E | 0
2020-01-08 17:06:26 HBO0319I SMF_110_1_CO | 13
2020-01-08 17:06:26 HBO0319I SMF_110_1_5 | 0
2020-01-08 17:06:26 HBO0319I SMF_110_1_6 | 0
2020-01-08 17:06:26 HBO0318I -------------------|----------
2020-01-08 17:06:26 HBO0321I Total | 90
2020-01-08 17:06:26 HBO0003I
2020-01-08 17:06:26 HBO0323I -------Buffer------ --Stream-
2020-01-08 17:06:26 HBO0324I Stream name | Inserts Updates Writes
2020-01-08 17:06:26 HBO0325I -------------------------------------|------------------------------
2020-01-08 17:06:26 HBO0326I SMF110DD | 1176 0 1176
2020-01-08 17:06:26 HBO0326I SMF110EX | 0 0 0
2020-01-08 17:06:26 HBO0326I SMF110FC | 3920 0 3920
2020-01-08 17:06:26 HBO0326I SMF110TX | 77 0 77
2020-01-08 17:06:26 HBO0326I SMF11000 | 0 0 0
2020-01-08 17:06:26 HBO0326I SMF11001 | 13 0 13
2020-01-08 17:06:26 HBO0326I SMF11002 | 161 0 161
2020-01-08 17:06:26 HBO0326I SMF11003 | 0 0 0
2020-01-08 17:06:26 HBO0326I SMF11004 | 0 0 0
2020-01-08 17:06:26 HBO0326I SMF11005 | 0 0 0
2020-01-08 17:06:26 HBO0326I SMF11015 | 0 0 0
2020-01-08 17:06:26 HBO0326I SMF11016 | 0 0 0
2020-01-08 17:06:26 HBO0325I -------------------------------------|------------------------------
2020-01-08 17:06:26 HBO0327I Total | 5347 0 5347
2020-01-08 17:06:26 HBO0337I For 161 records or rows in an update of SMF11002 one or more values were set to null because
of errors.
2020-01-08 17:06:26 HBO0301I System Data Engine Collect ended.
2020-01-08 17:06:26 HBO0182I Product deregistration is successful.
HBODUMP DDにはエラーの情報が出力されています。データがnullになっていてフォーマットに失敗しているレコードがあったようです。
Record 8 in the log, of type SMF_110_2,
results in null in data field(s):
Value for target field SMFSTINT was set to null due to error
COUT Record 1C49A116 02160000 DE6E0054 E1400119 289FE9D6 *.....>... ....ZO*
+0010 E2F1C3C9 C3E20002 00020000 0000002C *S1CICS..........*
+0020 00720001 0000009E 01780001 0710C3E3 *..............CT*
+0030 F5F4C4F4 C1F1C3E3 F5F4C4F4 C1F10000 *54D4A1CT54D4A1..*
+0040 00000000 00000010 C1D7E4E2 E2000000 *........APUSS...*
+0050 F1F0F1F6 F2F0F1F9 F1F5F2F7 F0F60000 *10162019152706..*
+0060 00000000 00000000 00000000 00000000 *................*
+0070 F0F0F0F0 F0F0D6E0 6D66936B 7908C3E3 *000000O._.l,..CT*
+0080 F5F4C4F4 C1F10119 288F0061 914A4040 *54D4A1...../j. *
+0090 40404040 4040E2D7 F74BF24B F3400178 * SP7.2.3 ..*
+00A0 00430100 0000C4C6 C8C3E2C4 40400000 *......DFHCSD ..*
+00B0 40000000 00000000 000C0000 000CC3C9 * .............CI*
+00C0 C3E2E3E2 F5F44BC3 C9C3E24B C4C6C8C3 *CSTS54.CICS.DFHC*
+00D0 E2C44040 40404040 40404040 40404040 *SD *
+00E0 40404040 40404040 40400000 00040000 * ......*
+00F0 00000000 000D0000 00000000 00000000 *................*
+0100 00000000 00000000 00020000 00030000 *................*
+0110 00000000 00000000 00000000 00000000 *................*
+0120 00000000 00000000 00000000 00000000 *................*
+0130 00000000 00000000 00000000 00000000 *................*
+0140 00000000 00000000 00000000 00000000 *................*
+0150 00000000 00000000 00000000 00000000 *................*
+0160 00000000 00000000 00000100 000A0000 *................*
+0170 00000000 00000000 0000D200 00000000 *..........K.....*
+0180 00000000 00000000 00000000 00000000 *................*
+0190 00000000 00000000 00000000 00000000 *................*
+01A0 00000000 00000000 00000000 0000D6E1 *..............O.*
+01B0 903BBBE1 EA8CD6E1 9048DF74 2B68D6E1 *......O.......O.*
+01C0 1788AFA1 EA8CD6E1 1795D334 2B680000 *.h....O..nL.....*
+01D0 00000000 00000000 00000000 00000000 *................*
+01E0 00000000 00000000 0000E2E8 E2E3C5D4 *..........SYSTEM*
+01F0 4040D6E0 6D672376 C608C3C9 C3E2E4E2 * O._...F.CICSUS*
+0200 C5D90007 0007D6E0 6D672376 C608C3C9 *ER....O._...F.CI*
+0210 C3E2E4E2 C5D900BC *CSUSER.. *
各SMFxxx DDにCSV化された結果が出力されます。
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,0,30899,+0.0000000000000000,+1.327104000000000
0E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
10350,0,11011110,110,15:25:21:23,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,0,30899,+0.0000000000000000,+1.327104000000000
0E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
32118,0,11011110,110,15:25:21:23,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,31960,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,9,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
32118,0,11011110,110,15:26:05:06,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,31960,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,9,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
14798,0,11011110,110,15:26:23:38,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,14640,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,4,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
10350,0,11011110,110,15:28:18:01,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,0,30899,+0.0000000000000000,+1.327104000000000
0E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
32118,0,11011110,110,15:28:18:01,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,31960,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,9,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
32118,0,11011110,110,15:35:01:57,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,31960,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,9,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
32118,0,11011110,110,15:35:04:46,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,31960,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,9,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
32118,0,11011110,110,15:35:07:53,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,31960,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,9,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
32118,0,11011110,110,15:35:10:44,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,31960,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,9,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
25190,0,11011110,110,15:36:23:41,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,25032,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,7,0,30899,+0.0000000000000000,+1.32710400000
00000E+14,96,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,1
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,2
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,3
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,4
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,5
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,6
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,7
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,8
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,9
11334,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,11176,1,0710,CT54D4A1,CT54D4A1,0000,3,158,2,392,942,3464,3,10
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,C,001,4,1,0,TRAN
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTERM ,C,002,4,2,4,TERM
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHCICS ,C,089,8,3,8,USERID
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,C,004,4,4,16,TTYPE
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHCICS ,T,005,8,5,20,START
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHCICS ,T,006,8,6,28,STOP
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,P,031,4,7,36,TRANNUM
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,A,109,4,8,40,TRANPRI
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,C,166,8,9,44,TCLSNAME
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTERM ,C,111,8,10,52,LUNAME
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHPROG ,C,071,8,11,60,PGMNAME
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,C,097,20,12,68,NETUOWPX
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,C,098,8,13,88,NETUOWSX
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHCICS ,C,130,4,14,96,RSYSID
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHCICS ,A,131,4,15,100,PERRECNT
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHTASK ,T,132,8,16,104,RMUOWID
10350,0,11011110,110,14:26:40:63,2019-10-16,ZOS1,CICS,1,2,44,114,1,158,10192,1,0710,CT54D4A1,CT54D4A1,0000,1,0,0,0,158,26,392,DFHCICS ,C,167,8,17,112,SRVCLSNM
534,0,11011110,110,15:27:06:88,2019-10-16,ZOS1,CICS,2,2,44,114,1,158,376,1,0710,CT54D4A1,CT54D4A1,0000,16,AP,USS,,2020-10-16,19:15:27,2019-10-16,15:27:06,,0,0000000000000000,00:00:00,2019-10-15 17:45:43.317175,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
188,0,11011110,110,15:27:06:88,2019-10-16,ZOS1,CICS,2,2,44,114,1,158,30,1,0710,CT54D4A1,CT54D4A1,0000,16,AP,USS,,2020-10-16,19:15:27,2019-10-16,15:27:06,,0,0000000000000000,00:00:00,2019-10-15 17:45:43.317175,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
1178,0,11011110,110,15:27:06:88,2019-10-16,ZOS1,CICS,2,2,44,114,1,158,1020,1,0710,CT54D4A1,CT54D4A1,0000,16,AP,USS,,2020-10-16,19:15:27,2019-10-16,15:27:06,,0,0000000000000000,00:00:00,2019-10-15 17:45:43.317175,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
534,0,11011110,110,15:27:09:08,2019-10-16,ZOS1,CICS,2,2,44,114,1,158,376,1,0710,CT54D4A1,CT54D4A1,0000,16,AP,USS,,2020-10-16,19:15:27,2019-10-16,15:27:09,,0,0000000000000000,00:00:00,2019-10-15 17:45:43.317175,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
188,0,11011110,110,15:27:09:08,2019-10-16,ZOS1,CICS,2,2,44,114,1,158,30,1,0710,CT54D4A1,CT54D4A1,0000,16,AP,USS,,2020-10-16,19:15:27,2019-10-16,15:27:09,,0,0000000000000000,00:00:00,2019-10-15 17:45:43.317175,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
1178,0,11011110,110,15:27:09:08,2019-10-16,ZOS1,CICS,2,2,44,114,1,158,1020,1,0710,CT54D4A1,CT54D4A1,0000,16,AP,USS,,2020-10-16,19:15:27,2019-10-16,15:27:09,,0,0000000000000000,00:00:00,2019-10-15 17:45:43.317175,CT54D4A1,2019-10-15,17:45:41:86, ,SP7.2.3
こんな感じでCSVで出力できればとりあえずOKです。
JCL作成 (to Data Streamer)
参考: Creating the System Data Engine batch job for sending SMF data to the Data Streamer
先に作成したポリシーの定義に従ってSMFデータを処理し、Data Streamerにデータを流し込むJCLを作成します。
※補足
CDPZ02.V2R1M0.SHBOCNTL(HBOJBCO2)をコピーして編集...と思ったら、SHBOCNTLというデータセットがない。ちなみに、CDPz V1.1では、CDPZ01.V1R1M0.SHBOCNTL(HBOJBCOL)というのが提供されているが、どうやらV2.1ではSHBOCNTLをSHBOSAMPに統合したものと思われる。PTFを適用したら、SHBOSAMPにHBOJBCO2が追加された。
HBOJBCO2はUJ01485というPTFに含まれている。
参考: https://www-01.ibm.com/support/docview.wss?uid=isg1OA58659
CDPZ02.V2R1M0.SHBOSAMP(HBOJBCO2)をコピーして編集します。上で選択したSMF Type(CICS関連)のデータを取得する場合、以下のようなJCLになります。
//HBOJBCO2 JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1)
//*
//HBOTCAFF EXEC PGM=BPXTCAFF,PARM=
//*
//*
//HBOSMFCL EXEC PGM=HBOPDE,REGION=0M,
// PARM='SHOWINPUT=NO,ZIIPOFFLOAD=NO'
//STEPLIB DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBOLOAD
//*
//* CONTROL STATEMENTS
//* The control statement file must be customized to match
//* the target of the Common Data Provider configuration utility.
//*
//HBOIN DD *
SET IBM_UPDATE_TARGET = 'PORT 50401';
SET IBM_FILE_FORMAT = 'CSV';
// DD PATH='/u/CDP201/cdpConfig/Test02_CICS01.sde',
// PATHDISP=(KEEP),RECFM=V,LRECL=255,FILEDATA=RECORD
//*
//* Sample COLLECT statement for SMF data
//*
// DD *
COLLECT SMF
COMMIT AFTER END OF FILE;
/*
//HBOLOG DD DISP=SHR,DSN=CDPZ01.SMFDUMP.D191016.T1
//HBOOUT DD SYSOUT=*
//HBODUMP DD SYSOUT=*
//HBODEBUG DD SYSOUT=*
※ここではまだ実行はしません!
カスタマイズ箇所についての補足:
HBOIN DD
SET IBM_UPDATE_TARGET には、Data StreamerがListenするポート番号を指定します。
PATH='xxx.sde' には、ポリシー作成時に生成されたsdeファイルを指定します。
HBOLOG DD
ここでは、入力となるSMFデータセット(もしくは必要なSMFデータのみダンプしたデータセット)を指定します。
Data Streamer構成
Data Streamerのプロシージャー SYS0.PROCLIB(HBODSPRO)を編集して、ポリシー作成時に生成されたTest02_CICS01.policyのパスを指定します。必要に応じてData StreamerがListenするポート番号も変更します。
//HBODSPRO PROC
//*
//ZLOGOUT EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT
//*
//* Output and error data sets
//*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//*
//* Parameter data
//*
//STDPARM DD *
PGM /bin/sh
/usr/lpp/IBM/zcdp/v2r1m0/DS/LIB/startup.sh
/u/CDP201/cdpConfig/Test02_CICS01.policy
50401 start=w trace=n
//*
//* Environment data
//*
//STDENV DD *
JAVA_HOME=/usr/lpp/java/J8.0_64
CDP_HOME=/usr/lpp/IBM/zcdp/v2r1m0/cdp_work
TZ=JST-9
#DEFAULT_HEAP=4g
#MAXIMUM_HEAP=4g
#RESOLVER_CONFIG=//'USER.TCPIP(TCPDATA)'
#_BPXK_SETIBMOPT_TRANSPORT=TCPIPOE
//*
// PEND
ELK側構成
Logstash
/etc/logstash/pipelines.ymlを以下のように編集
- pipeline.id: main
path.config: "/etc/logstash/conf.d_cics01"
/etc/logstash/conf.d_cics01ディレクトリを作成し、CDPzで提供されているファイルのうち、共通のものとCICS用(SMF_110)のフィルターのファイルをこのディレクトリにコピーします。
[root@test08 /etc/logstash/conf.d_cics01]# ls -la
合計 136
drwxr-xr-x. 2 root root 4096 1月 15 14:27 .
drwxr-xr-x. 7 root root 4096 1月 15 14:35 ..
-rwxr--r--. 1 root root 358 1月 15 10:21 B_CDPz_Input.lsh
-rwxr--r--. 1 root root 469 1月 15 10:21 E_CDPz_Index.lsh
-rw-r--r--. 1 root root 727 1月 15 14:27 H_SMF_110_0.lsh
-rw-r--r--. 1 root root 842 1月 15 14:27 H_SMF_110_1.lsh
-rw-r--r--. 1 root root 846 1月 15 14:27 H_SMF_110_1_5.lsh
-rw-r--r--. 1 root root 846 1月 15 14:27 H_SMF_110_1_6.lsh
-rw-r--r--. 1 root root 816 1月 15 14:27 H_SMF_110_1_DICT.lsh
-rw-r--r--. 1 root root 747 1月 15 14:27 H_SMF_110_1_FIELD.lsh
-rw-r--r--. 1 root root 831 1月 15 14:27 H_SMF_110_1_KPI.lsh
-rw-r--r--. 1 root root 855 1月 15 14:27 H_SMF_110_2.lsh
-rw-r--r--. 1 root root 855 1月 15 14:27 H_SMF_110_3.lsh
-rw-r--r--. 1 root root 831 1月 15 14:27 H_SMF_110_4.lsh
-rw-r--r--. 1 root root 831 1月 15 14:27 H_SMF_110_5.lsh
-rw-r--r--. 1 root root 1212 1月 15 14:27 H_SMF_110_E.lsh
-rw-r--r--. 1 root root 16014 1月 15 14:27 H_SMF_110_T.lsh
-rw-r--r--. 1 root root 532 1月 15 14:27 N_SMF_110_0.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_1.lsh
-rw-r--r--. 1 root root 540 1月 15 14:27 N_SMF_110_1_5.lsh
-rw-r--r--. 1 root root 540 1月 15 14:27 N_SMF_110_1_6.lsh
-rw-r--r--. 1 root root 546 1月 15 14:27 N_SMF_110_1_DICT.lsh
-rw-r--r--. 1 root root 548 1月 15 14:27 N_SMF_110_1_FIELD.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_1_KPI.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_2.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_3.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_4.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_5.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_E.lsh
-rw-r--r--. 1 root root 536 1月 15 14:27 N_SMF_110_T.lsh
-rwxr--r--. 1 root root 429 1月 15 14:27 Q_CDPz_Elastic.lsh
実行
ELK側
Logstash起動
※Elasticsearch, Kibanaは事前に稼働中の想定
とりあえずテストなので手動でlogstashコマンド打って起動させます。
[root@test08 /etc/logstash]# /usr/share/logstash/bin/logstash --path.settings /etc/logstash
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.headius.backport9.modules.Modules (file:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.7.0.jar) to field java.io.FileDescriptor.fd
WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Thread.exclusive is deprecated, use Thread::Mutex
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2020-01-15T14:35:39,377][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"7.2.0"}
[2020-01-15T14:35:46,919][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}}
[2020-01-15T14:35:47,116][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=>"http://localhost:9200/"}
[2020-01-15T14:35:47,167][INFO ][logstash.outputs.elasticsearch] ES Output version determined {:es_version=>7}
[2020-01-15T14:35:47,170][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7}
[2020-01-15T14:35:47,190][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["//localhost"]}
[2020-01-15T14:35:47,264][INFO ][logstash.outputs.elasticsearch] Using default mapping template
[2020-01-15T14:35:47,319][WARN ][org.logstash.instrument.metrics.gauge.LazyDelegatingGauge] A gauge metric of an unknown type (org.jruby.specialized.RubyArrayOneObject) has been create for key: cluster_uuids. This may result in invalid serialization. It is recommended to log an issue to the responsible developer/development team.
[2020-01-15T14:35:47,322][INFO ][logstash.javapipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>6, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>750, :thread=>"#<Thread:0x460ce848 run>"}
[2020-01-15T14:35:47,384][INFO ][logstash.outputs.elasticsearch] Attempting to install template {:manage_template=>{"index_patterns"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s", "number_of_shards"=>1}, "mappings"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}}
[2020-01-15T14:35:47,636][INFO ][logstash.javapipeline ] Pipeline started {"pipeline.id"=>"main"}
[2020-01-15T14:35:47,787][INFO ][logstash.inputs.tcp ] Starting tcp input listener {:address=>"0.0.0.0:8081", :ssl_enable=>"false"}
[2020-01-15T14:35:47,875][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-01-15T14:35:48,098][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
8081ポートがListenされているか確認。
[root@test08 /etc/logstash]# netstat -an | grep 8081
tcp6 0 0 :::8081 :::* LISTEN
ポートフォワード設定
※ちょっと特殊な環境なので、Linuxからz/OS USSにssh接続してポートフォワードの設定をします。
[root@test08 /etc/logstash]# ssh -f -N -R 8081:localhost:8081 CICS004@eplex1
z/OS USSに接続して、8081ポートがListenされているか確認。
[CICS004@EPLEX1:/] netstat -a | grep 8081
SSHD7 00787559 127.0.0.1..8081 0.0.0.0..0 Listen
CDPz側
Data Streamer起動
参考: Running the Data Streamer
Data Stremerを起動します
S HBODSPRO
$HASP100 HBODSPRO ON STCINRDR
IEF695I START HBODSPRO WITH JOBNAME HBODSPRO IS ASSIGNED TO USER CDP201
, GROUP SYS1
$HASP373 HBODSPRO STARTED
IEF403I HBODSPRO - STARTED - TIME=12.49.39
HBO6000I Data Streamer - Version: V2R1M0, Build ID: 1,021, APAR: OA58659
HBO6119I Default Heap:4G Maximum Heap:4G
HBO6001I The Data Streamer started successfully in Warm start mode.
F HBODSPRO,APPL=DISPLAY,POLICY
HBO6076I The current policy is /u/CDP201/cdpConfig/Test02_CICS01.policy.
JCL実行
上で作成したJCL(to Data Streamer)をSubmit!
JOBLOGのHBOOUT DDからの抜粋。
2020-01-15 14:37:07 HBO0181I Product registration is successful.
2020-01-15 14:37:07 HBO0096I Z Common Data Provider 2.1.0
2020-01-15 14:37:07 HBO0097I Build Number: 20191111-1408m
2020-01-15 14:37:07 HBO0098I APAR Name: OA58659
2020-01-15 14:37:07 HBO0102I Log SMF was successfully defined.
2020-01-15 14:37:07 HBO0125I SMF_110_1_C was successfully defined.
2020-01-15 14:37:07 HBO0165I The record procedure HBO2COMP is defined.
2020-01-15 14:37:07 HBO0125I SMF_110_1_CO was successfully defined.
2020-01-15 14:37:07 HBO0572I A comment is present in the language statement.
2020-01-15 14:37:07 HBO0125I SMF_110_E was successfully defined.
2020-01-15 14:37:07 HBO0572I A comment is present in the language statement.
2020-01-15 14:37:07 HBO0125I SMF_110_0 was successfully defined.
2020-01-15 14:37:07 HBO0572I A comment is present in the language statement.
2020-01-15 14:37:07 HBO0165I The record procedure HBOSD110 is defined.
2020-01-15 14:37:07 HBO0165I The record procedure HBO2CCMF is defined.
2020-01-15 14:37:08 HBO0125I SMF_CICS_T was successfully defined.
...
2020-01-15 14:37:08 HBO0201I Update SMF_110_2 was successfully defined.
2020-01-15 14:37:08 HBO0300I System Data Engine Collect started.
2020-01-15 14:37:08 HBO0302I Processing CDPZ01.SMFDUMP.D191016.T1 on ZSPK01
2020-01-15 14:37:08 HBO0341I The first-record timestamp is 2019-10-16 14:26:40.630000
2020-01-15 14:37:08 HBO0342I The last-record timestamp is 2019-10-16 18:00:50.340000
2020-01-15 14:37:08 HBO0310I Buffer processing started after 176 records due to end of log.
2020-01-15 14:37:08 HBO5200I Using port 50401 on host 9.188.216.204 (EPLEX1)
2020-01-15 14:37:08 HBO5201I Connected to the Data Streamer on host 9.188.216.204 (EPLEX1) service 50401
2020-01-15 14:37:08 HBO0003I
2020-01-15 14:37:08 HBO0315I Records read from the log or built by log procedure:
2020-01-15 14:37:08 HBO0317I Record name | Number
2020-01-15 14:37:08 HBO0318I -------------------|----------
2020-01-15 14:37:08 HBO0319I SMF_110_1_C | 13
2020-01-15 14:37:08 HBO0319I SMF_110_2 | 161
2020-01-15 14:37:08 HBO0320I Unrecognized | 2
2020-01-15 14:37:08 HBO0318I -------------------|----------
2020-01-15 14:37:08 HBO0321I Total | 176
2020-01-15 14:37:08 HBO0318I -------------------|----------
2020-01-15 14:37:08 HBO0383I Unrecognized records are records that are in the data stream but are not defined in the
active policy.
2020-01-15 14:37:08 HBO0003I
2020-01-15 14:37:08 HBO0316I Records built by record procedures:
2020-01-15 14:37:08 HBO0317I Record name | Number
2020-01-15 14:37:08 HBO0318I -------------------|----------
2020-01-15 14:37:08 HBO0319I SMF_110_1_CO | 13
2020-01-15 14:37:08 HBO0318I -------------------|----------
2020-01-15 14:37:08 HBO0321I Total | 13
2020-01-15 14:37:08 HBO0003I
2020-01-15 14:37:08 HBO0323I -------Buffer------ --Stream-
2020-01-15 14:37:08 HBO0324I Stream name | Inserts Updates Writes
2020-01-15 14:37:08 HBO0325I -------------------------------------|------------------------------
2020-01-15 14:37:08 HBO0326I SMF_110_1 | 13 0 13
2020-01-15 14:37:08 HBO0326I SMF_110_1_DICT | 1176 0 1176
2020-01-15 14:37:08 HBO0326I SMF_110_1_FIELD | 3920 0 3920
2020-01-15 14:37:08 HBO0326I SMF_110_2 | 161 0 161
2020-01-15 14:37:08 HBO0325I -------------------------------------|------------------------------
2020-01-15 14:37:08 HBO0327I Total | 5270 0 5270
2020-01-15 14:37:08 HBO0337I For 161 records or rows in an update of SMF_110_2 one or more values were set to null
because of errors.
2020-01-15 14:37:08 HBO0003I
2020-01-15 14:37:08 HBO0394I -------------- TCP/IP Statistics ---------------
2020-01-15 14:37:08 HBO0395I -------------------------------------|----------
2020-01-15 14:37:08 HBO0396I Total Data Transmitted (Kilo-Bytes) | 1014
2020-01-15 14:37:08 HBO0397I Total Write Time (Milliseconds) | 16
2020-01-15 14:37:08 HBO0398I Maximum Payload Size (Bytes) | 732073
2020-01-15 14:37:08 HBO0395I -------------------------------------|----------
2020-01-15 14:37:08 HBO0301I System Data Engine Collect ended.
2020-01-15 14:37:08 HBO0182I Product deregistration is successful.
これにより、指定したSMFダンプデータセットからデータを抽出して、Data Streamer => LogStash => Elasticsearchという流れで格納されていきます。
確認
Kibanaの画面から、Elasticsearchに取り込まれたCICS関連SMFデータを確認してみます。
Elasticsearch Index確認
Kibanaの左側メニューの一番下のManagementを選択 - ElasticsearchのIndex Managementを選択します。
ここで、検索窓にcdp-zos-smfというキーワードを入れてみます。
そうすると、上のようなIndexが作成されていることが確認できます。
(データがElasticsearchに取り込まれて、この名前でIndexが作成されたことが分かります。)
Intex Pattern作成
次に、KibanaのIndex Patternsを選択し、Create Index Patternsボタンをクリックします。
Index Patternとして、"cdp-zos-smf_110_1-*"を指定し、Next stepボタンをクリックします。
Time filter field nameに、"@timestamp"を指定し、Create index patternボタンをクリックします。
他のIndexについても同様に実施。
Discover画面での確認
左側メニューの一番上のDiscoverを選択し、適宜画面をカスタマイズし、取得したSMFデータが表示されることを確認します。
これで、一通り、SMFをElasticsearchに取り込んでKibanaで参照する、という所まで確認できました。
補足: Embulk
当記事で想定しているシナリオは、SMFの情報をリアルタイムに取得するのではなく、過去に取得されたSMFデータをSMFデータセット(or SMFをダンプしたデータセット)を入力として、ある範囲のデータをまとめてバッチでElasticsearchに投入しようとするものです。
ここで選択するSMFデータの種類や対象データによっては非常に膨大なデータがドカンと一気に送付されることになります。例えば、CICSのモニター情報やDb2の会計情報についてはトランザクション単位の情報となるため、処理がピークの時間帯でのSMFデータは肥大しがちです。
Logstashやfluentd等のデータ転送の仕組みはどちらかというとストリーミング処理を想定したものなので、このような大量データ転送には向かない場合があります。
一方で大量データをデータソースに投入する目的で提供されているEmbulkというOSSがあります。
当記事中で確認目的で使っていますが、CDPzではLogstashに向けてTCPで転送するだけではなく、CSVファイルに出力させることもできます。
バッチ的に大量データを取り込む場合、以下のような経路で取り込むことも検討した方がよいと思います。
SMF => CDPz => CSVファイル === ftp転送 ===> Embulk => Elasticsearch
参考: Embulkを使用してCSVファイルをElasticsearchに取り込む