はじめに
※追記: 新しいバージョン(CDPz V2.1)をベースにした記事を書き直しました => CDPzを利用したz/OS-ELK連携 - (1)セットアップ編 (CDPz V2.1)
以前、z/OSのシステム管理系の情報をOSSであるELKスタックに取り込んで管理できるといいんじゃないかということで、スクリプト作ってSYSLOGを取り込んだりしてみました。
この辺↓
- z/OSの新しい管理方法を探る - (1)DAパネル情報のElasticsearchへの取り込み
- z/OSの新しい管理方法を探る - (2)SYSLOGのElasticsearchへの取り込み
- z/OSの新しい管理方法を探る - (3)CICSヒストリカルデータのElasticsearchへの取り込み
これは、なるべく追加の製品機能を使わずにz/OS上のログ系の情報をElasticsearchに情報を取り込んでみるという試みでした。
実は、z/OS上の管理情報を分析系のプラットフォームに流し込むのをサポートしてくれる、CDPz(Common Data Provider for System z)という有償製品があります。今回は、上の記事の発展形ということで、このCDPzなるものを使ってどういったことができるのかを試そうと思い、とりあえずCDPzをセットアップしたのでログを残しておきます。
やりたいこと
z/OSのSYSLOGや、SMFの情報をElasticsearchに取り込んで、Kibanaで楽に可視化したい!
CDPzは、SYSLOGやJOBLOG, SMFのデータなどを、データ分析基盤(SplunkやELK)に連携する機能が提供されているらしいのです!
ミドルウェアのパフォーマンステスト結果なんかを分析/レポーティングするのが楽になったらうれしいな。
全体像
(箱の下の数字は各コンポーネントがListenするポート番号)
CDPzの導入
参考: Installing Common Data Provider for z Systems
CDPzは、上の全体像に図示した通り、主に4つのコンポーネントから成ります。
(1) Configuration Tool: 構成ツール
(2) Data Streamer: 収集したデータを別の分析基盤に送る
(3) Log Forwder: データ収集機能の1つ。主にSyslogやJobLogなどのデータを収集。
(4) System Data Engine: データ収集機能の1つ。SMSのデータを収集。
これらのコンポーネントは、以下のようなくくりでプログラムディレクトリに記載されており、それぞれFMIDが付与されています。(ちょっと分かりにくい...)
- Common Data Handler
- Configuration Tool / Data Streamer => FMID: HHBO110
- Log Forwarder => FMID: HGLA310
- System Data Engine => FMID: HHBO11E,HHBO11D
それぞれプログラム・ディレクトリの記述に従い、SMP/Eで導入作業を行います。
導入作業はSMP/Eで、基本的に他のプロダクトと大きな差異は無いと思います。この辺は環境依存のところが多いので、ここでは具体的な手順は割愛します。
※どうでもいいけど、この導入手順も一向に簡素化されませんね。とりあえず動かしたいだけなのにどうして「次へ」「次へ」でインストールできるようにならないのだろうか?製品1つインストールするのに、サンプルはあるにせよ結局10個以上ものJCLをカスタマイズ/実行しなければならないという...。しかもPTF適用でまたしても手こずる...。この煩雑な手順は本当に妥当なものなのか全く疑問で仕方がない。いつまでたっても慣れません。いつも心が折れそうになる...。ブツブツ...。
CDPzのセットアップ
導入が済んだら各コンポーネントの初期セットアップをしていきます。
(1) Configuration Tool
参考: Getting started with the Configuration Tool on z/OSMF
WebのUIを持つ構成ツールが提供されていて、z/OSMFに組み込んで利用できるようです。まずはこのツールを使うための構成を行います。
ユーザー作成
構成用のユーザーを作成します。
UID=0でユーザー"CDP001"を作成し、z/OSMFの管理グループ(IZUADMIN)権限付与します(TSOコマンドCONNECT CDP001 GROUP(IZUADMIN)
)。
作業ディレクトリの設定
参考: Setting up a working directory for the Configuration Tool
ここで、savingpolicy.shを流すように記載されているので、それに従って実行。
[CDP001@EPLEX1:/u/CDP001] sh /usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/savingpolicy.sh
If you are deploying the Configuration tool on z/OSMF, please input '1'.
If you are deploying the Configuration tool directly in Liberty server, please input '2'.
1
You may enter a blank value to accept the default values in parentheses.
The Configuration Tool will be deployed in z/OSMF
Before running this script, ensure you are in the z/OSMF Administrator
group (IZUADMIN by default for z/OSMF).
The Configuration Tool requires a workspace where it can output
completed policy files. Please enter the full path of the directory you
would like to create.
Policy file directory (default: /u/error for uid: 0/cdpConfig): /u/CDP001/cdpConfig
User ID to own the policy file directory (default: Error for uid: 0): CDP001
Group containing administrators (default: IZUADMIN):
*** Important: the default value for the next parameter represents absolute
directory. If the default directory will become invalid after the next IPL,
provide a directory path that does not change between IPLs. Otherwise accept
the default value.
The Configuration Tool Source Script Directory (default: /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB):
The Configuration Tool has been successfully implemented.
You may now import the following file in the z/OSMF Import Manager:
/u/CDP001/cdpConfig/HBOCDEUI/v1r1m0/LIB/cdpConfig.properties
これで、/u/CDP001/cdpConfig/HBOCDEUI/v1r1m0/LIB/に以下のようなファイルが作成される。
[CDP001@EPLEX1:/u/CDP001/cdpConfig/HBOCDEUI/v1r1m0/LIB] ls -la
total 40
drwxrwx--- 2 0 IZUADMIN 8192 Sep 19 18:02 .
drwxrwx--- 4 0 IZUADMIN 8192 Sep 19 18:02 ..
lrwxrwxrwx 1 0 STC 53 Sep 19 18:02 CDPUIServer.war -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/CDPUIServer.war
lrwxrwxrwx 1 0 STC 51 Sep 19 18:02 Sample.layout -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/Sample.layout
lrwxrwxrwx 1 0 STC 51 Sep 19 18:02 Sample.policy -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/Sample.policy
lrwxrwxrwx 1 0 STC 67 Sep 19 18:02 cdp-starter-sets.streams.json -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/cdp-starter-sets.streams.json
lrwxrwxrwx 1 0 STC 56 Sep 19 18:02 cdp.protocols.json -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/cdp.protocols.json
lrwxrwxrwx 1 0 STC 57 Sep 19 18:02 cdp.transforms.json -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/cdp.transforms.json
-rw-rw---- 1 0 IZUADMIN 91 Sep 19 18:02 cdpConfig.json
lrwxrwxrwx 1 0 STC 58 Sep 19 18:02 cdpConfig.properties -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/cdpConfig.properties
lrwxrwxrwx 1 0 STC 65 Sep 19 18:02 cdpConfig.remove.properties -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/cdpConfig.remove.properties
lrwxrwxrwx 1 0 STC 58 Sep 19 18:02 cdpConfigVersion.txt -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/cdpConfigVersion.txt
lrwxrwxrwx 1 0 STC 54 Sep 19 18:02 cdpui.properties -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/cdpui.properties
lrwxrwxrwx 1 0 STC 49 Sep 19 18:02 defracf.cmd -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/defracf.cmd
lrwxrwxrwx 1 0 STC 50 Sep 19 18:02 en.i18n.json -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/en.i18n.json
lrwxrwxrwx 1 0 STC 54 Sep 19 18:02 ims.streams.json -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/ims.streams.json
lrwxrwxrwx 1 0 STC 48 Sep 19 18:02 index.html -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/index.html
lrwxrwxrwx 1 0 STC 64 Sep 19 18:02 log-forwarder.streams.json -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/log-forwarder.streams.json
lrwxrwxrwx 1 0 STC 52 Sep 19 18:02 main.bundle.js -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/main.bundle.js
lrwxrwxrwx 1 0 STC 57 Sep 19 18:02 polyfills.bundle.js -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/polyfills.bundle.js
lrwxrwxrwx 1 0 STC 54 Sep 19 18:02 sde.streams.json -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/sde.streams.json
lrwxrwxrwx 1 0 STC 48 Sep 19 18:02 server.xml -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/server.xml
lrwxrwxrwx 1 0 STC 54 Sep 19 18:02 vendor.bundle.js -> /V1R11/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/vendor.bundle.js
importType=plugin
izu.externalapp.file.version=v1r1m0
izu.externalapp.local.context.root=cdp
izu.externalapp.code.root=.
pluginId=com.ibm.zos.cdp
pluginDefaultName=Common Data Provider
pluginDescription=Configuration tool for IBM Common Data Provider
aboutPanelPath=cdpConfigVersion.txt
taskId1=CONFIGURE
taskVersion1=1.0
taskCategoryId1=4
taskDispName1=Common Data Provider
taskDispDesc1=Interface for configuring IBM Common Data Provider
taskSAFResourceName1=ZOSMF.IBM_CDP.CONFIG.CDPConfiguration
taskMultiSysplexScope1=false
taskHandlerEligible1=false
taskAuthenticatedGuestEligible1=true
taskNavigationURL1=/index.html
taskBundleUrl1=/
taskBundleFileName1=/main.bundle.js
taskMinZOS1=03.23.00
taskMinZOSMF1=03.23.00
Installing the Configuration Tool
参考: Installing the Configuration Tool
ブラウザから、上で作成したCDP001ユーザーでz/OSMFにログインし、z/OSMF管理 - インポート・マネージャーを選択
プロパティーファイルとして、上で作成した/u/CDP001/cdpConfig/HBOCDEUI/v1r1m0/LIB/cdpConfig.propertiesを指定して「表示」
「インポート済みプラグイン」タブで、Common Data Providerを選択し、アクションのメニューから「サーバーの関連付け」を選択
以下のTSOコマンド実行
[CICS004@EPLEX1:/] tsocmd "RDEFINE ZMFAPLA IZUDFLT.ZOSMF.IBM_CDP.CONFIG.CDPConfiguration UACC(NONE)"
RDEFINE ZMFAPLA IZUDFLT.ZOSMF.IBM_CDP.CONFIG.CDPConfiguration UACC(NONE)
ICH10006I RACLISTED PROFILES FOR ZMFAPLA WILL NOT REFLECT THE ADDITION(S) UNTIL A SETROPTS REFRESH IS ISSUED.
[CICS004@EPLEX1:/] tsocmd "SETROPTS REFRESH RACLIST(ZMFAPLA)"
SETROPTS REFRESH RACLIST(ZMFAPLA)
[CICS004@EPLEX1:/] tsocmd "PERMIT IZUDFLT.ZOSMF.IBM_CDP.CONFIG.CDPConfiguration CLASS(ZMFAPLA) ID(IZUADMIN) ACCESS(CONTROL)"
PERMIT IZUDFLT.ZOSMF.IBM_CDP.CONFIG.CDPConfiguration CLASS(ZMFAPLA) ID(IZUADMIN) ACCESS(CONTROL)
ICH06011I RACLISTED PROFILES FOR ZMFAPLA WILL NOT REFLECT THE UPDATE(S) UNTIL A SETROPTS REFRESH IS ISSUED
[CICS004@EPLEX1:/] tsocmd "PERMIT IZUDFLT.ZOSMF.IBM_CDP.CONFIG.CDPConfiguration CLASS(ZMFAPLA) ID(IZUUSER) ACCESS(READ)"
PERMIT IZUDFLT.ZOSMF.IBM_CDP.CONFIG.CDPConfiguration CLASS(ZMFAPLA) ID(IZUUSER) ACCESS(READ)
ICH06011I RACLISTED PROFILES FOR ZMFAPLA WILL NOT REFLECT THE UPDATE(S) UNTIL A SETROPTS REFRESH IS ISSUED
[CICS004@EPLEX1:/] tsocmd "SETROPTS REFRESH RACLIST(ZMFAPLA)"
SETROPTS REFRESH RACLIST(ZMFAPLA)
z/OSMFの画面をリフレッシュすると、左側のメニューの"構成"以下に"Common Data Provider"という項目が追加されます。
調べてみると、以下のようなTechNoteを発見。
https://www.ibm.com/support/pages/receive-hbo6501w-error-web-browser-when-attempting-open-cdp-zosmf-configuration
SYSLOGには以下のようなエラーがたくさん出てました。
ICH408I USER(CDP001 ) GROUP(SYS1 ) NAME(CDP001 ) 372
CEA.CEATSO.TSOREQUEST CL(SERVAUTH)
INSUFFICIENT ACCESS AUTHORITY
ACCESS INTENT(READ ) ACCESS ALLOWED(NONE )
とりあえず上のTechNoteに記載されている、CEA.CEA... というプロファイルが無かったので定義を追加し、IZUADMIN, IZUUSERグループにUPDATE権限を付与しました。
RDEFINE SERVAUTH CEA.CEADOCMD UACC(NONE)
PERMIT CEA.CEADOCMD CLASS(SERVAUTH) ID(IZUADMIN) ACCESS(UPDATE)
PERMIT CEA.CEADOCMD CLASS(SERVAUTH) ID(IZUUSER) ACCESS(UPDATE)
...
SETROPTS REFRESH RACLIST(SERVAUTH)
追加で、エラーが出ていたCEA.CEATSO.TSOREQUESTプロファイルにも同様にUPDATE権限付与します(READ権限だけでよさそうだけど、とりあえずテスト環境なのでUPDATE付けちゃいます)。
再度、左側のメニューから、構成 - Common Data Provider を選択すると、管理画面が表示されました!
これで構成ツールが使えそうなところまで確認できました。
(2) Data Streamer
参考: Configuring the Data Streamer
CDPZ01.V1R1M0.SHBOSAMP(HBODSPRO)に提供されるプロシージャーのサンプルを自環境の適当なPROCLIBにコピーして編集。
///*********************************************************************
//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/cdpz/v1r1m0/DS/LIB/startup.sh
/usr/lpp/IBM/cdpz/v1r1m0/UI/LIB/Sample.policy
50401 start=w trace=n
//*
//* Environment data
//*
//STDENV DD *
JAVA_HOME=/usr/lpp/java/J8.0_64
CDP_HOME=/usr/lpp/IBM/cdpz/cdp_work
TZ=JST-9
# DEFAULT_HEAP=4g
# MAXIMUM_HEAP=4g
# RESOLVER_CONFIG=//'USER.TCPIP(TCPDATA)'
# _BPXK_SETIBMOPT_TRANSPORT=TCPIPOE
//*
// PEND
//*********************************************************************
Data StreamerがListenするポートは50401とする。
また、CDP_HOMEとして/usr/lpp/IBM/cdpz/cdp_work を指定したので、それに合わせてUSS上にこのディレクトリを作成しておく。
Sample.policyは後でポリシー作成後に置き換えるので、一旦はこのまま。
Data StreamerをSTARTED TASKとして実行する際のユーザーとしてCDP001を指定しておく。
[CICS004@EPLEX1:/] tsocmd "RDEFINE STARTED HBODSPRO.* STDATA(USER(CDP001))"
RDEFINE STARTED HBODSPRO.* STDATA(USER(CDP001))
ICH10006I RACLISTED PROFILES FOR STARTED WILL NOT REFLECT THE ADDITION(S) UNTIL A SETROPTS REFRESH IS ISSUED.
[CICS004@EPLEX1:/] tsocmd "SETROPTS REFRESH GENERIC(STARTED) RACLIST(STARTED)"
SETROPTS REFRESH GENERIC(STARTED) RACLIST(STARTED)
(3) Log Forwarder
参考: Configuring the Log Forwarder
OPERLOG設定有無によってセットアップ手順が異なります。ここでは、OPERLOG設定なしの想定とします。
ガイドにあるポリシーの作成(Configuration Toolの利用)は後回しにします。
CDPZ01.V1R1M0.SGLASAMP(GLAPROC)に提供されるプロシージャーのサンプルを自環境の適当なPROCLIBにコピーして編集。
//*********************************************************************
//GLAPROC PROC OPT=''
//* The ENVDIR is defaulted to /usr/lpp/IBM/zscala/V3R1/samples in the
//* startup.sh script.
//*
//* Set GLABASE to the directory where the startup.sh script resides.
//* The default directory for startup.sh is listed below.
// SET GLABASE='/usr/lpp/IBM/zscala/V3R1/samples'
//*
//* Uncomment and set ENVDIR to the directory where the zlf.conf
//* environment file resides (do not remove the -e at the beginning of
//* the variable). If not uncommented, startup.sh will use the default
//* directory value, listed below.
//* SET ENVDIR='-e /usr/lpp/IBM/zscala/V3R1/samples'
// SET ENVDIR='-e /u/CDP001/cdpConfig'
//*
//***** GLAPROC PROC *************************************************
//*
//ZLOGOUT EXEC PGM=BPXBATSL,REGION=0M,TIME=NOLIMIT,
// PARM=('PGM /bin/sh &GLABASE./startup.sh &OPT &ENVDIR')
//* Output data sets
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//*
// PEND
//*********************************************************************
ENVDIRとして、/u/CDP001/cdpConfigを指定(ポリシーファイルがここに作成される想定)。
GLABASEは、startup.shのディレクトリを指定してますが、インストールディレクトリパスはデフォルトのままにしているので、そのまま。
Log ForwarderをSTARTED TASKとして実行する際のユーザーとしてCDP001を指定しておく。さらに、マニュアル記述の通り、FACILITYクラスの BPX.CONSOLEプロファイルにREAD権限付与する。
[CICS004@EPLEX1:/] tsocmd "RDEFINE STARTED GLAPROC.* STDATA(USER(CDP001))"
RDEFINE STARTED GLAPROC.* STDATA(USER(CDP001))
ICH10006I RACLISTED PROFILES FOR STARTED WILL NOT REFLECT THE ADDITION(S) UNTIL A SETROPTS REFRESH IS ISSUED.
[CICS004@EPLEX1:/] tsocmd "SETROPTS REFRESH GENERIC(STARTED) RACLIST(STARTED)"
SETROPTS REFRESH GENERIC(STARTED) RACLIST(STARTED)
[CICS004@EPLEX1:/] tsocmd "PERMIT BPX.CONSOLE CLASS(FACILITY) ID(CDP001) ACCESS(READ)"
PERMIT BPX.CONSOLE CLASS(FACILITY) ID(CDP001) ACCESS(READ)
ICH06011I RACLISTED PROFILES FOR FACILITY WILL NOT REFLECT THE UPDATE(S) UNTIL A SETROPTS REFRESH IS ISSUED
[CICS004@EPLEX1:/] tsocmd "SETROPTS REFRESH RACLIST(FACILITY)"
SETROPTS REFRESH RACLIST(FACILITY)
SYSLOGデータ取得用User Exitを追加します。
OPERLOGなし、JES3利用なし、の環境なのでGLASYSGというユーザーExitを追加します。
LPALSTxxにSGLALPAを登録し、PROGxxにてEXITを登録する。以下IPL時に有効化される静的定義の例。
...
CDPZ01.V1R1M0.SGLALPA(ZSPK01),
...
...
EXIT ADD EXITNAME(CNZ_MSGTOSYSLOG) MODNAME(GLASYSG)
...
必要に応じて動的設定もしくはIPL実施。
(4) System Data Engine
参考: Configuring the System Data Engine
SMFを取り込む際に、対象とするデータソースの形式によりセットアップ方法が異なります。ここでは、LogstreamではなくSYS1.MANxデータセットを取り込む想定とします。
ガイドにあるポリシーの作成(Configuration Toolの利用)は後回しにします。
PROGxxにAPF登録をします。
...
APF ADD
DSNAME(CDPZ01.V1R1M0.SHBOLOAD) VOLUME(ZSPK01)
...
CDPZ01.V1R1M0.SHBOCNTL(HBOSMF)に提供されるプロシージャーのサンプルを自環境の適当なPROCLIBにコピーして編集。
//HBOSMFCL EXEC PGM=HBOPDE,REGION=0M,TIME=1440,
// PARM='SHOWINPUT=NO,ZIIPOFFLOAD=YES'
//STEPLIB DD DISP=SHR,DSN=CDPZ01.V1R1M0.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='/etc/cdpConfig/hboin.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=*
//STEPLIB DD DISP=SHR,DSN=CDPZ01.V1R1M0.SHBOLOAD
=> データセット名変更
SET IBM_UPDATE_TARGET = 'PORT 50401';
=> Data Streamerのポート番号指定
SET IBM_RESOURCE = 'EXIT';
=> MANxデータセットをEXITにて取得する想定なので、"EXIT"で固定
// DD PATH='/etc/cdpConfig/hboin.sde'
=> ポリシーファイル名は後で変更
System Data EngineをSTARTED TASKとして実行する際のユーザーとしてCDP001を指定しておく。
[CICS004@EPLEX1:/] tsocmd "RDEFINE STARTED HBOSMF.* STDATA(USER(CDP001))"
RDEFINE STARTED HBOSMF.* STDATA(USER(CDP001))
ICH10006I RACLISTED PROFILES FOR STARTED WILL NOT REFLECT THE ADDITION(S) UNTIL A SETROPTS REFRESH IS ISSUED.
[CICS004@EPLEX1:/] tsocmd "SETROPTS REFRESH GENERIC(STARTED) RACLIST(STARTED)"
SETROPTS REFRESH GENERIC(STARTED) RACLIST(STARTED)
LPALST登録
...
CDPZ01.V1R1M0.SHBOLPA(ZSPK01),
...
EXIT登録
...
EXIT ADD EXITNAME(SYS.IEFU83) MODNAME(HBOSMFEX)
EXIT ADD EXITNAME(SYS.IEFU84) MODNAME(HBOSMFEX)
EXIT ADD EXITNAME(SYS.IEFU85) MODNAME(HBOSMFEX)
...
必要に応じて動的設定もしくはIPL実施。
補足
各種z/OS関連設定の確認
APF登録
xxx.SHBOLOADが含まれることを確認
D PROG,APF
...
499 ZSPK01 CDPZ01.V1R1M0.SHBOLOAD
...
EXIT
CNZ_MSGTOSYSLOG
SYS.IEFU82, SYS.IEFU84, SYS.IEFU85が含まれることを確認
D PROG,EXIT
...
EXIT DEF EXIT DEF EXIT DEF
CNZ_MSGTOSYSLOG E SYS.IEFU83 E SYS.IEFU84 E
SYS.IEFU85 I CSVDYLPA E CSVDYNEX E
...
D PROG,EXIT,MODNAME=HBOSMFEX
CSV462I 17.18.32 PROG,EXIT DISPLAY 821
MODULE HBOSMFEX
EXIT(S) SYS.IEFU83 SYS.IEFU84 SYS.IEFU85
LPA
xxx.SGLALPA以下、および、xxx.SHBOLPA以下のモジュールが登録されていることを確認
D PROG,LPA,MOD=HBOSMFEX
CSV550I 17.12.23 LPA DISPLAY 808
FLAGS MODULE ENTRY PT LOAD PT LENGTH DIAG
P HBOSMFEX 8407A218 0407A130 00000ED0 04027998
ELK側の準備
参考: Preparing to send data to Elasticsearch
サポートされるELKスタックのバージョンが5.1.2 - 5.2.1なので(古っ!)、V5.2.1の環境を用意する。
インストール
以下からV5.2.1のElasticsearch, Logstash, KibanaのRPMファイルを入手する
https://www.elastic.co/jp/downloads/past-releases
手元にあったCentOS V7 の環境を使う。
[root@Test05 /media/sf_Inst_Image/Elastic]# rpm -ivh elasticsearch-5.2.1.rpm
警告: elasticsearch-5.2.1.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID d88e42b4: NOKEY
準備しています... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
更新中 / インストール中...
1:elasticsearch-0:5.2.1-1 ################################# [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
[root@Test05 /media/sf_Inst_Image/Elastic]# rpm -ivh logstash-5.2.1.rpm
警告: logstash-5.2.1.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID d88e42b4: NOKEY
準備しています... ################################# [100%]
更新中 / インストール中...
1:logstash-1:5.2.1-1 ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Successfully created system startup script for Logstash
[root@Test05 /media/sf_Inst_Image/Elastic]# rpm -ivh kibana-5.2.1-x86_64.rpm
警告: kibana-5.2.1-x86_64.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID d88e42b4: NOKEY
準備しています... ################################# [100%]
更新中 / インストール中...
1:kibana-5.2.1-1 ################################# [100%]
構成
最低限の構成
Elasticsearch
/etc/elasticsearch/elasticsearch.yml 編集
http.port: 9200
http.host: 0.0.0.0
Kibana
/etc/kibana/kibana.yml 編集
server.port: 5601
server.host: "0.0.0.0"
Logstash
参考: Preparing to send data to Elasticsearch
Elasticsearchに取り込むためのLogstash構成ファイルが、USS上の/usr/lpp/IBM/cdpz/v1r1m0/DS/LIB/ibm_cdpz_ELK.tar.gzに提供されています。
これをバイナリーモードでLinux側にコピーして展開します。取り込むデータ毎に各種Logstash構成ファイルが含まれています。
デフォルトのlogstash構成確認ておきます。
systemdのlogstash.serviceを見てみると...
[Unit]
Description=logstash
[Service]
Type=simple
User=logstash
Group=logstash
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/etc/default/logstash
EnvironmentFile=-/etc/sysconfig/logstash
ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384
[Install]
WantedBy=multi-user.target
--path.settings
として/etc/logstashディレクトリが指定されています。
Running Logstash from the Command Line
このディレクトリ下のlogstash.ymlが構成ファイルとして使われます。
...
# Where to fetch the pipeline configuration for the main pipeline
#
path.config: /etc/logstash/conf.d
...
path.configに/etc/logstash/conf.dというディレクトリが指定されているので、このディレクトリ下に構成ファイルを配置することになります。(このディレクトリ下に配置された全てのファイルが辞書順にコンカチされて構成ファイルとして使われる)
Logstashの構成は後回し...
firewalld
9200と5601ポートにアクセスできるよう穴をあける。
[root@Test05 /etc/firewalld/zones]# firewall-cmd --zone=public --add-port=9200/tcp --permanent
success
[root@Test05 /etc/firewalld/zones]# firewall-cmd --zone=public --add-port=5601/tcp --permanent
success
[root@Test05 /etc/firewalld/zones]# cat public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<port protocol="tcp" port="9200"/>
<port protocol="tcp" port="5601"/>
</zone>
[root@Test05 /etc/firewalld/zones]# firewall-cmd --reload
success
SSHポートフォワード
今回お試しで利用する環境は、z/OSのマシンと、ELKスタックを乗せるLinuxマシンが、別のネットワークセグメントにあり、z/OS側がよりセキュアなネットワークとなっています。そのため、z/OS側からLinuxマシンに対してTCPのコネクションを張ることが制限されています(Linuxからz/OSへのSSH接続は可)。これを回避するために、テストをする時だけ一時的にSSHポートフォワードの構成を行うことにします。
ポートフォワードを行うためにLinux上で発行するコマンド例
ssh -f -N -R 8081:localhost:8081 <user>@eplex1
公開鍵認証の設定をしておくか、上のコマンド実行時にパスワードを入力する必要があります。
これをテスト実行するときだけ有効にする想定です。
起動
[root@Test05 ~]# systemctl start elasticsearch.service
[root@Test05 ~]# systemctl status elasticsearch.service
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled)
Active: active (running) since 火 2019-10-08 18:23:51 JST; 14s ago
Docs: http://www.elastic.co
Process: 2136 ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec (code=exited, status=0/SUCCESS)
Main PID: 2138 (java)
CGroup: /system.slice/elasticsearch.service
mq2138 /bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInit...
10月 08 18:23:51 Test05 systemd[1]: Starting Elasticsearch...
10月 08 18:23:51 Test05 systemd[1]: Started Elasticsearch.
10月 08 18:23:52 Test05 elasticsearch[2138]: OpenJDK 64-Bit Server VM warning: If the number of processors is exp...ads=N
Hint: Some lines were ellipsized, use -l to show in full.
[root@Test05 ~]# systemctl start kibana.service
[root@Test05 ~]# systemctl status kibana.service
● kibana.service - Kibana
Loaded: loaded (/etc/systemd/system/kibana.service; disabled; vendor preset: disabled)
Active: active (running) since 火 2019-10-08 18:24:40 JST; 5s ago
Main PID: 2239 (node)
CGroup: /system.slice/kibana.service
mq2239 /usr/share/kibana/bin/../node/bin/node --no-warnings /usr/share/kibana/bin/../src/cli -c /etc/kibana/...
10月 08 18:24:40 Test05 systemd[1]: Started Kibana.
10月 08 18:24:40 Test05 systemd[1]: Starting Kibana...
10月 08 18:24:45 Test05 kibana[2239]: {"type":"log","@timestamp":"2019-10-08T09:24:45Z","tags":["status","plugin...ized"}
10月 08 18:24:45 Test05 kibana[2239]: {"type":"log","@timestamp":"2019-10-08T09:24:45Z","tags":["status","plugin...ized"}
10月 08 18:24:45 Test05 kibana[2239]: {"type":"log","@timestamp":"2019-10-08T09:24:45Z","tags":["status","plugin...ized"}
10月 08 18:24:46 Test05 kibana[2239]: {"type":"log","@timestamp":"2019-10-08T09:24:46Z","tags":["status","plugin...ized"}
10月 08 18:24:46 Test05 kibana[2239]: {"type":"log","@timestamp":"2019-10-08T09:24:46Z","tags":["listening","inf...5601"}
10月 08 18:24:46 Test05 kibana[2239]: {"type":"log","@timestamp":"2019-10-08T09:24:46Z","tags":["status","ui set...ized"}
Hint: Some lines were ellipsized, use -l to show in full.
Elasticsearchにアクセスしてみる
[root@Test05 ~]# curl -X GET http://localhost:9200
{
"name" : "XMyGObu",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "bLWcxWLzSrWYM95qmZu52g",
"version" : {
"number" : "5.2.1",
"build_hash" : "db0d481",
"build_date" : "2017-02-09T22:05:32.386Z",
"build_snapshot" : false,
"lucene_version" : "6.4.1"
},
"tagline" : "You Know, for Search"
}
データ取り込みのための構成(Overview)
さて、上の手順で基本的なセットアップは済んだので、ここから、実際にデータを取得するための構成をしていくことになります。
何のデータをどこに流し込むか、ということを色々カスタマイズできるようなのですが、バリエーションも豊富で仕組みも結構複雑なので、まず、ここでは全体像を押さえて、具体的なデータ取得は別の記事で取り上げることにします。連携先はタイトルにあるようにELKスタックを前提としていますが、一旦ここではELK側は置いておいて、CDPz側にフォーカスします。
ざっくり言うと、以下のステップを踏むことになります。
1.Config Toolで"ポリシー"と呼ばれる定義を作成します。"ポリシー"とは、何のデータをどのように取得して、それをどこにどうやって送るか、というような情報を保持するものです。
2.作成されたポリシーの情報を元にして、CDPzの各コンポーネントを稼働させます。
以降、以下の省略形を使う場合があります。
DS: Data Streamer
LF: Log Forwarder
SDE: System Data Engine
1.Config Toolによるポリシーの作成
z/OSMFのプラグインとして、CDPzの構成ツールをセットアップしましたので、まずはそれを使ってポリシーを作成します。
※製品が事前に用意しているメニューから取得したい情報を選択して定義を作成していきますが、全ての情報がメニューとして用意されている訳ではありません。用意されていない項目を取得したい場合、追加でカスタマイズが必要となりますが、ここでは一旦用意されているメニューを取得するイメージで記載します。
ポリシーエディター
Create New policyを選択すると、Policy Profile Editの画面となり、ここでGUIベースでポリシーを定義することができます。以下のようなイメージでポリシーを作成していきます。
左側に縦に並んでいる青い箱は、何のデータを取得したいか、ということを表しています(LFもしくはSDE関連の情報)。SYSLOGやSMF Type110 Subtype1のデータなど、取得したいデータを選んでいきます。
※これら取得するデータの情報は"Data Stream"と呼ばれていますが、"Data Streamer"とは別物ですのでご注意ください!(まったくネーミングが紛らわしい!!!)
製品が用意しているメニューとしては、以下のようなものがあります。
図1の右側にある緑色の箱は、データをどこにどうやって送るかという情報を設定するもので(DS関連の情報)、Subscriberと呼ばれています。
※ネーミングに一貫性が無くて分かりにくい!!!
DataStreamとSubscriberはそれぞれ関連付けされて、どのデータをどこに送るかというのを定義していくことになります。
ポリシー編集画面で定義をしていく流れを図にするとこんな感じです。
上の図中の(1)-1, (1)-2で示されているLog Forwarder用の設定、System Data Engine用の設定はそれぞれ以下の通り。
生成物
上のエディターでGUIベースでポリシーを作成して保存すると、定義内容が反映されたファイルがUSS上に作成されます。
出力先はConfig Toolセットアップ時に指定したPolicy file directoryです。ここでは/u/CDP001/cdpConfig/
ファイル | 説明 |
---|---|
<policyName>.policy | Data Streamer関連情報を管理(どのデータをどこに送付するか)。Data Streamer起動プロシージャーで、このファイル名を指定。 |
<policyName>.config.properties <policyName>.zlf.conf |
Log Forwarder関連情報を管理(Log Fowarder関連ライブラリ、使用するData Streamerのポート番号など)。Log Forwader起動プロシージャーの”ENVDIR”で示されたディレクトリ下に適切な名前で配置する必要がある。 |
<policyName>.sde | System Data Engine関連情報を管理(取得するデータの情報)。実体は、ポリシーに追加したData Streamに紐づくSHBODEFSデータセットのメンバー(Data Streamとしての処理を独自言語で実装したもの)をコンカチしたもの。System Data Engine起動プロシージャーで、このファイル名を指定。 |
<policyName>.layout | ポリシーエディターの画面レイアウト情報を保持 |
2.CDPz各コンポーネントの起動
上で生成されたファイルを使用して、CDPzの各コンポーネントを実行することになります。
そのため、起動プロシージャーを編集し、上で生成したファイルを参照するようにします。
Data Streamer: HBODSPRO => xxx.policyファイル
Log Forwarder: GLAPROC => xxx.config.properties, xxx.zlf.confファイルのディレクトリ
System Data Engine: HBOSMF => xxx.sdeファイル