CDPzを利用したz/OS-ELK連携 - (4)SMF-リアルタイム編

# はじめに
CDPzを使用してSMFデータをElasticsearchに送り込む方法としては、手動でバッチジョブを実行する方法と、Log Forwarderのように常駐のアドレススペースを起動しておいてリアルタイムに取得する方法があります。
ここでは、リアルタイムにSMFデータをハンドリングする方法を試してみます。
扱うのはCICS関連のSMFデータです。

## 関連記事
[CDPzを利用したz/OS-ELK連携 - (1)セットアップ編](https://qiita.com/tomotagwork/private/f4fbb6d3e8b6ad084b34)
[CDPzを利用したz/OS-ELK連携 - (2)SYSLOG取得編](https://qiita.com/tomotagwork/private/5cd1d97dadaaf999c9cb)
[CDPzを利用したz/OS-ELK連携 - (3)SMF-バッチ編](https://qiita.com/tomotagwork/private/629c8bbbc95f9733e297)
[CDPzを利用したz/OS-ELK連携 - (4)SMF-リアルタイム編](https://qiita.com/tomotagwork/private/b339779769f7a5092b5a)
[CDPzを利用したz/OS-ELK連携 - (5)カスタマイズ-共通](https://qiita.com/tomotagwork/private/fe76619e8880956aa0e0)
[CDPzを利用したz/OS-ELK連携 - (6)カスタマイズ-SYSLOG](https://qiita.com/tomotagwork/private/b8e9fad37730703ef1a7)
[CDPzを利用したz/OS-ELK連携 - (7)カスタマイズ-CICS](https://qiita.com/tomotagwork/private/38091c17da9b13a4ee45)
[CDPzを利用したz/OS-ELK連携 - (8)カスタマイズ-RMF Monitor III](https://qiita.com/tomotagwork/private/7be3c192e5e1c1d7e3bc)
[CDPzを利用したz/OS-ELK連携 - (9)カスタマイズ-fluentdの利用](https://qiita.com/tomotagwork/private/241369db2958fdb0fcf4)


# 利用コンポーネント
今回扱うのは、以下の赤枠の範囲のイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/cbdca4ec-c495-2d12-50df-5c9832d0c5ac.png)

上の(4) System Data Engine部分を常駐タスクとして実行し、SMFのEXITで取得したデータをData Streamer経由でデータを送信します。

# 構成
## CDPz側構成
### SMFデータ取得用ポリシーの作成

この部分は、SMF-バッチ編の構成と全く同様です。
参考: [CDPzを利用したz/OS-ELK連携 - (3)SMF-バッチ編 - SMFデータ取得用ポリシーの作成](https://qiita.com/tomotagwork/private/629c8bbbc95f9733e297#smf%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%96%E5%BE%97%E7%94%A8%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90)

### Data Streamer構成

ここも、SMF-バッチ編の構成と全く同様です。
参考: [CDPzを利用したz/OS-ELK連携 - (3)SMF-バッチ編 - Data Streamer構成](https://qiita.com/tomotagwork/private/629c8bbbc95f9733e297#data-streamer%E6%A7%8B%E6%88%90)


### System Data Engine構成
System Data Engineのプロシージャー SYS0.PROCLIB(HBOSMF)を編集します。

```xxx:HBOSMF
//HBOSMFCL EXEC PGM=HBOPDE,REGION=0M,TIME=1440,
//         PARM='SHOWINPUT=NO,ZIIPOFFLOAD=NO'
//STEPLIB  DD DISP=SHR,DSN=CDPZ02.V2R1M0.SHBOLOAD
//*
//* CONTROL STATEMENTS
//* The control statement file must be customised to match
//* the target of the Common Data Provider configuration utility.
//*
//HBOIN    DD *
SET IBM_SDE_INTERVAL = '1 MINUTES';
SET IBM_UPDATE_TARGET = 'PORT 50401';
SET IBM_FILE_FORMAT = 'CSV';
SET IBM_RESOURCE = 'EXIT';
//         DD  PATH='/u/CDP201/cdpConfig/Test02_CICS01.sde',
//         PATHDISP=(KEEP),RECFM=V,LRECL=255,FILEDATA=RECORD
//*
//* Sample COLLECT statement for processing real-time SMF data
//*
//         DD *
COLLECT SMF FROM &IBM_RESOURCE
  EVERY &IBM_SDE_INTERVAL;
/*
//HBOOUT   DD SYSOUT=*
//HBODUMP  DD SYSOUT=*
//HBODEBUG DD SYSOUT=*
```

SET IBM_UPDATE_TARGET には、Data StreamerがListenするポート番号を指定します。
SET IBM_RESOURCE には、固定の文字列 'EXIT'を指定します。
PATH='xxx.sde' には、ポリシー作成時に生成されたsdeファイルを指定します。


## ELK側構成

バッチ編と同様です。
参考: [CDPzを利用したz/OS-ELK連携 - (3)SMF-バッチ編 - ELK側構成](https://qiita.com/tomotagwork/private/629c8bbbc95f9733e297#elk%E5%81%B4%E6%A7%8B%E6%88%90)

# 実行

## ELK側
バッチ編と同様です。
参考: [CDPzを利用したz/OS-ELK連携 - (3)SMF-バッチ編 - 実行 - ELK側構成](https://qiita.com/tomotagwork/private/629c8bbbc95f9733e297#elk%E5%81%B4)

## CDPz側

### Data Streamer起動
バッチ編と同様です。
参考: [CDPzを利用したz/OS-ELK連携 - (3)SMF-バッチ編 - Data Streamer起動](https://qiita.com/tomotagwork/private/629c8bbbc95f9733e297#data-streamer%E8%B5%B7%E5%8B%95)

### System Data Engine起動
参考: [Running the System Data Engine](https://www.ibm.com/support/knowledgecenter/en/SSGE3R_2.1.0/sde_start.html)

System Data Engineを起動します。

```
S HBOSMF                                                                 
$HASP100 HBOSMF   ON STCINRDR                                            
IEF695I START HBOSMF   WITH JOBNAME HBOSMF   IS ASSIGNED TO USER CDP201  
 , GROUP SYS1                                                            
$HASP373 HBOSMF   STARTED                                                
IEF403I HBOSMF - STARTED - TIME=16.03.14          
```

これで、SMFデータを取得する準備が整いました。

System Data Engineステータス確認

```
F HBOSMF,DISPLAY STATUS                              
HBO5006I DISPLAY STATUS                              
HBO5007I DISPLAY DISPLAY STATUS written to HBOOUT.  
```

```xxx:HBOSMFのJOBLOGのHBOOUT抜粋
 2020-01-15 16:10:56 HBO0300I System Data Engine Display status started.
 2020-01-15 16:10:56 HBO0003I
 2020-01-15 16:10:56 HBO0315I Records read from the log or built by log procedure:
 2020-01-15 16:10:56 HBO0317I Record name        |    Number
 2020-01-15 16:10:56 HBO0318I -------------------|----------
 2020-01-15 16:10:56 HBO0319I SMF_110_1_C        |         7
 2020-01-15 16:10:56 HBO0319I SMF_110_2          |         0
 2020-01-15 16:10:56 HBO0318I -------------------|----------
 2020-01-15 16:10:56 HBO0321I Total              |         7
 2020-01-15 16:10:56 HBO0003I
 2020-01-15 16:10:56 HBO0316I Records built by record procedures:
 2020-01-15 16:10:56 HBO0317I Record name        |    Number
 2020-01-15 16:10:56 HBO0318I -------------------|----------
 2020-01-15 16:10:56 HBO0319I SMF_110_1_CO       |         7
 2020-01-15 16:10:56 HBO0318I -------------------|----------
 2020-01-15 16:10:56 HBO0321I Total              |         7
 2020-01-15 16:10:56 HBO0003I
 2020-01-15 16:10:56 HBO0323I                                        -------Buffer------ --Stream-
 2020-01-15 16:10:56 HBO0324I Stream name                          |   Inserts   Updates    Writes
 2020-01-15 16:10:56 HBO0325I -------------------------------------|------------------------------
 2020-01-15 16:10:56 HBO0326I SMF_110_1                            |         7         0         7
 2020-01-15 16:10:56 HBO0326I SMF_110_1_DICT                       |       392         0       392
 2020-01-15 16:10:56 HBO0326I SMF_110_1_FIELD                      |      2352         0      2352
 2020-01-15 16:10:56 HBO0326I SMF_110_2                            |         0         0         0
 2020-01-15 16:10:56 HBO0325I -------------------------------------|------------------------------
 2020-01-15 16:10:56 HBO0327I Total                                |      2751         0      2751
 2020-01-15 16:10:56 HBO0003I
 2020-01-15 16:10:56 HBO0394I -------------- TCP/IP Statistics ---------------
 2020-01-15 16:10:56 HBO0395I -------------------------------------|----------
 2020-01-15 16:10:56 HBO0396I Total Data Transmitted (Kilo-Bytes)  |       514
 2020-01-15 16:10:56 HBO0397I Total Write Time (Milliseconds)      |       107
 2020-01-15 16:10:56 HBO0398I Maximum Payload Size (Bytes)         |    219701
 2020-01-15 16:10:56 HBO0395I -------------------------------------|----------
```

この後、CICSのモニターや統計情報を有効化してSMFにパフォーマンス情報を書き出しするシナリオを適当に流します。

# 確認
バッチ編と同じindexにデータが投入されるので、バッチ編でindex pattern作っていれば追加は不要です(取得される経路が違うだけで、ELK側は全く同じ)。

KibanaのDiscoveryで、リアルタイム(若干タイムラグはありますが)でSMFデータが取得されることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132331/9664fa3c-49e1-e92e-b01f-214fec6878e6.png)