目次 前 次 PDF


Oracle TSAM Plusエージェント・カスタム・プラグインの開発

Oracle TSAM Plusエージェント・カスタム・プラグインの開発
この章では、次の項について説明します。
概要
Oracle TSAM Plusエージェントでは、次の3つの主なレイヤー・モジュールが提供されます。
Oracle TSAM Plusフレームワーク
Oracle TSAM Plusフレームワークは、Tuxedoシステム内のデータを収集します。収集動作は、モニタリングのタイプとポリシーによって制御されます。収集されたメトリックは、オープン・インタフェースを使用してプラグインに渡されます。
プラグイン・データの受信側
Oracle TSAM Plusエージェントには、デフォルト・プラグインが付属しています。デフォルト・プラグインは、ローカル・モニター・サーバー(LMS)が作成した共有メモリー・プールに、メトリックを送信します。
LMS (ローカル・モニター・サーバー)
LMSはデータをOracle TSAM Plusマネージャと同期させます。
Oracle TSAM PlusエージェントおよびOracle TSAM Plusマネージャは、データの収集、集約、保管および表現の完全なソリューションを提供します。モニタリング・データの使用に関する様々な要求をサポートできるよう、Oracle TSAM Plusエージェント・プラグ・インタフェースは、オープン・アーキテクチャに基づいています。これにより、パフォーマンス・メトリック・データを解釈するカスタマイズされたプラグインを書くことができます。カスタム・プラグインは、Oracle TSAM Plusエージェントのデフォルト・プラグインとともに動作することも、独立して動作することもできます。カスタム・プラグインは、通常次の作業に使用されます。
サード・パーティ管理ソフトウェアとの統合
アプリケーション・モニタリング・スイートの社内での開発
監査ベース・アプリケーション・データ
Oracle TSAM Plusエージェント・データ収集フレームワーク
TSAM Plusが有効になると、Oracle TSAM Plusエージェント・フレームワークにより、パフォーマンス・メトリックが収集されます。このフレームワークは、Tuxedoアプリケーションの呼出しパスの段階、サービス、トランザクションおよびシステム・サーバーなど、パフォーマンスにとって重要な主な領域をカバーしています。Oracle TSAM Plusエージェントでは、Oracle Tuxedo FML32型付きバッファを使用して、各メトリックが組込みFML32フィールドとして定義されるように収集されたメトリックを指定できます。モニタリング・ポイントはモニタリング・タイプによって異なり、Oracle Tuxedo ATMIアプリケーションにのみ適用されます。表3-1は、呼出しパス・モニタリング・ポイントのリストです。
 
表3-1 呼出しパスのモニタリング・ポイント
段階
サポート対象のTuxedo処理型
要求メッセージをIPCキューへ送信する前
ネイティブ・クライアント、アプリケーション・サーバー、GWTDOMAN、BRIDGE、JSH/WSHおよびGWWS
要求メッセージをIPCキューから受信した後
アプリケーション・サーバー、GWTDOMAINおよびGWWS
応答メッセージをIPCキューへ送信する前
アプリケーション・サーバー、GWTDOMAIN、BRIDGEおよびGWWS
応答メッセージをIPCキューから受信した後
ネイティブ・クライアント、アプリケーション・サーバー、GWTDOMAIN
要求メッセージをネットワークへ送信する前
GWTDOMAIN、JSH/WSHおよびGWWS
要求メッセージをネットワークから受信した後
GWTDOMAINおよびBRIDGE
応答メッセージをネットワークへ送信する前
GWTDOMAINおよびBRIDGE
応答メッセージをネットワークから受信した後
GWTDOMAINおよびBRIDGE
表3-2は、サービス・モニタリング・ポイントのリストです。
 
表3-2 サービスのモニタリング・ポイント
段階
サポート対象のTuxedo処理型
リクエスト・メッセージを受信した後
アプリケーション・サーバー、GWTDOMAINおよびGWWS
応答メッセージをIPCキューへ送信する前
アプリケーション・サーバー、GWTDOMAINおよびGWWS
表3-3はシステム・サーバー・モニタリング・ポイントのリストです。
 
表3-3 システム・サーバーのモニタリング・ポイント
段階
サポート対象のTuxedo処理型
Main Loop1
GWTDOMAIN、BRIDGEおよびGWWS

1
メトリックは内部で収集されます。この時点でデータがプラグインに渡されます。

表3-4は、トランザクション・モニタリング・ポイントのリストです。
 
表3-4 トランザクションのモニタリング・ポイント
段階
サポート対象のTuxedo処理型
トランザクション・ルーチンの実行後
ネイティブ・クライアント、アプリケーション・サーバー、TMS、GWTDOMAIN、WSH、JSH、TMQFORWARD
 
Oracle TSAM Plusエージェント・カスタム・プラグインの作成
この項には次のトピックが含まれます:
概要
Oracle Tuxedoには、組込みプラグイン・フレームワークがあるので、追加機能を簡単に使用することができます。たとえば、Oracle Tuxedoセキュリティ・メカニズムは、プラグイン・フレームワーク上に作成されます。Oracle Tuxedoでは、サービス・プロバイダとエンド・ユーザー間の契約として機能するインタフェース・セットが定義されています。ここで、「service」というのはOracle Tuxedo ATMIサービスではなく、一般的な用語です。Oracle TSAM Plusエージェントは、Oracle Tuxedoプラグイン・フレームワークを使用して、別のデータ・レシーバを追加することもできます。
Oracle Tuxedoプラグイン・フレームワークの概念
次の項では、Oracle Tuxedoプラグイン・フレームワークの主な概念を示します。
インタフェース
インタフェースは、プラグイン実装およびプラグインの呼出し側の間の契約フォーマットです。インタフェースには、以下の属性を存在する必要があります。
インタフェースID
インタフェースIDは、Oracle Tuxedoプラグイン・フレームワークに一意に識別されるインタフェース名であり、書式は次のとおりです。
<interface id> ::= <component name>[/<sub-component/name>]/<interface name>
Oracle TSAM Plusエージェント・プラグインの書式は、次のとおりです。
engine/performance/monitoring
バージョン
インタフェースには、メジャーのバージョン番号およびマイナーのバージョン番号という2つのバージョンがあります。
データ構造および関数の宣言
データ構造には、プラグイン呼出し側および実装の間で転送される具体的な情報が定義されます。関数の宣言には、プラグインによって実装する必要があるルーチンが定義されます。
実装
プラグインは、Cコードを使用して書かれたダイナミック・ライブラリです。ライブラリには、インタフェースで指定されるメソッドが実装されます。Oracle Tuxedoプラグイン・フレームワークは、1つのインタフェースに対して複数の実装(インターセプタ)をサポートしています。
Oracle Tuxedoは、ファンアウト・インターセプタおよびスタック・インターセプタの2つのタイプをサポートしています。Oracle TSAM Plusエージェントでは、ファンアウト・インターセプタが使用されます。図3-1に、Oracle TSAM Plusエージェント・プラグインのアーキテクチャを示します。
図3-1 Oracle TSAM Plusエージェント・プラグインのアーキテクチャ
Oracle Tuxedoのインフラストラクチャは、プラグインAメソッドXを呼び出します。プラグインAは、次に示すように、「InterceptionSeq」属性で指定された順にインターセプトするプラグインのメソッドXを呼び出します。
プラグイン・メソッドXが呼び出されます。
プラグイン1メソッドXが返されます。
プラグイン2メソッドXが呼び出されます。
プラグイン2メソッドXが返されます。
プラグインnメソッドXが呼び出されます。
プラグインnメソッドXが返されます。
インターセプタに使用されるプラグインは、すべて同じインタフェースを実装します。インターセプトのシーケンスには、同じプラグインの複数のオカレンスをもつことはできません。
Oracle TSAM Plusエージェントは、ファンアウト・プラグインを提供します。ファンアウト・プラグインを使用すると、インターセプタ・プラグインを書いたり、作成したりできます。
プラグインの登録/登録解除/編集
いったんプラグインが書かれると、機能するコンポーネントがプラグインを検索して、該当するメソッドを呼出しできるようにOracle Tuxedoのレジストリに登録する必要があります。Oracle Tuxedoでは、特にプラグインを使用するために次の3つのコマンドが提供されています。
epifreg :プラグインの登録
epifunreg :プラグインの登録解除
epifregedt :プラグインの編集
Oracle TSAM Plusエージェント・プラグインの開発
Oracle TSAM Plusエージェント・プラグインの呼出しは、モニタリング・ポイントから始まります。Oracle TSAM Plusエージェントは、メトリックを収集および計算し、プラグインへ渡される引数を構成します。Oracle TSAM Plusエージェントのファンアウト・プラグインは、登録シーケンスによって、インターセプタ・プラグインを呼び出します。
Oracle TSAM Plusカスタム・プラグインの開発の単純な例がガイドラインとして提供されています。システム環境は、Solaris + Sparcです。機能は基本的なもので、メトリックのバッファを印刷するだけです。このプラグインは、Oracle TSAM Plusエージェントのデフォルト・プラグインと一緒に機能します。
1.
2.
3.
4.
5.
プラグインのソース・コードの作成
リスト3-1に、Oracle TSAM Plusプラグインcustomplugin.c.の例を示します。
リスト3-1 Oracle TSAM Plusエージェントcustomplugin.cプラグインのソース・コードの例
#include <e_pif.h>
#include <tpadm.h>
#include <fml32.h>
#include <e_perf_mon.h>

static TM32I _TMDLLENTRY print_app(
       perf_mon_1 *,
       FBFR32 **,
       MONITORCTL *,
       TM32U);

static TM32I _TMDLLENTRY print_svc(
       perf_mon_1 *,
       FBFR32 **,
       MONITORCTL *,
       TM32U);

static TM32I _TMDLLENTRY print_sys(
       perf_mon_1 *,
       FBFR32 **,
       MONITORCTL *,
       TM32U);

static TM32I _TMDLLENTRY print_tran(
       perf_mon_1 *,
       FBFR32 **,
       MONITORCTL *,
       TM32U);

static TM32I _TMDLLENTRY plugin_destroy (
       _TCADEF,
       const struct _e_pif_instance_handles *,
       TM32U);

static TM32I _TMDLLENTRY plugin_copy (_TCADEF,
       void *,
       const struct _e_pif_interception_data *,
       struct _e_pif_instance_handles *,
       TM32U);

static const perf_mon_1 Vtblperfapp_1 = {
       print_app,
       print_svc,
       print_sys,
       print_tran,
};

static const _e_pif_plugin_info perf_mon_1_info = {
       { 1, 0 }, /* interface major version */
       { 1, 0 }, /* implementation */
       "abc/tuxedo/tsam", /* implementation id */
       ED_PERF_MON_INTF_ID, /* interface id */
       4, /* virtual table size */
       "ABC, Inc.", /* vendor */
       "Custom Plug-in for Oracle TSAM", /* product name */
       "1.0", /* vendor version */
       EF_PIF_SINGLETON, /* m_flags */
       plugin_destroy,
       plugin_copy
};

int _TMDLLENTRY
plugin_entry(_TCADEF, const char *pIId,
       const char *pImplId,
       const struct _e_pif_iversion *version,
       const struct _e_pif_data *pData,
       const struct _e_pif_interception_data *pInterceptionData,
       struct _e_pif_instance_handles *pI,
       TM32U flags)
{
       const char * const * regData = pData->regdata;
        char *logfile = NULL;
       
       pI->pVtbl = (void *) &Vtblperfapp_1;
       pI->pPluginInfo = (_e_pif_plugin_info *) &perf_mon_1_info;
       pI->pPrivData = NULL;
return (EE_SUCCESS);
}


static TM32I _TMDLLENTRY
plugin_destroy (_TCADEF, const struct _e_pif_instance_handles *pIhandles,
       TM32U flags)
{
       return(EE_SUCCESS);
}


static TM32I _TMDLLENTRY
plugin_copy (_TCADEF, void *iP,
       const struct _e_pif_interception_data *pInterceptionData,
       struct _e_pif_instance_handles *pIhandles,
       TM32U flags)
{
       return(EE_SUCCESS);
}
static TM32I _TMDLLENTRY print_app(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}

static TM32I _TMDLLENTRY print_svc(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}

static TM32I _TMDLLENTRY print_sys(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}
static TM32I _TMDLLENTRY print_tran(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}
 
プラグインの構築
cc -c customplugin.c -I$TUXDIR/include
cc -G -KPIC -o customplugin.so -L$TUXDIR/lib -lfml customplugin.o
プラグインの登録
プラグインを登録するには、次のステップを実行します:
1.
「tmshutdown」を使って、Oracle Tuxedoアプリケーションを停止します。
2.
reg.sh」という名前のシェル・スクリプトを作成します。
3.
スクリプトを実行します
sh ./reg.sh
4.
「tmboot」を使って、Oracle Tuxedoアプリケーションを起動します。
リスト3-2に、reg.shシェル・スクリプトの例を示します。
リスト3-2 reg.hシェル・スクリプト
#!/bin/sh
epifreg -r -p abc/tuxedo/tsam -i engine/performance/monitoring \
-o SYSTEM -v 1.0 \
-f $APPDIR/customplugin.so -e plugin_entry
epifregedt -s -k "SYSTEM/impl/bea/performance/monfan" \
-a InterceptionSeq=bea/performance/monshm \
-a InterceptionSeq=abc/tuxedo/tsam \
 
Oracle TSAM Plusのモニタリングの有効化
Oracle TSAM Plusコンソールを使用して適切なモニタリング・ポリシーを定義することによって、Oracle TSAM Plusモニタリングを有効化します。
詳細は、Oracle TSAM Plusユーザー・ガイドを参照してください。
呼出しの実行および標準出力の確認
メトリックは収集され、印刷されます。
リスト3-3に、メトリックの出力を示します。
リスト3-3 メトリック印刷の例
TA_MONDEPTH 1
TA_MONSTATUS 1
TA_MONPROCTYPE 2
TA_PID 2459
TA_SRVID 10
TA_MONLOGTIMESEC 1259292914
TA_MONLOGTIMEUSEC 26411
TA_MONFIELDSMAP1 -1
TA_MONFIELDSMAP2 -1
TA_MONMSGSIZE 24
TA_MONMSGQUEUED 0
TA_MONLASTTIMESEC 1259292914
TA_MONLASTTIMEUSEC 26411
TA_MONSTARTTIMESEC 1259292914
TA_MONSTARTTIMEUSEC 10500
TA_MONELAPSETIME 15
TA_DOMAINID dom2:bjsol16:66536
TA_GROUPNAME ATMIGRP1
TA_LMID L1
TA_MONTYPE APP
TA_MONCORRID dom2:bjsol16:66536 L1 tuxclient 2478 1 1 1259292909
TA_MONMSGTYPE ARQ
TA_MONSTAGE Q2ME
TA_MONSVCNAME I_TOUPPER
TA_MONHOSTSVC I_TOUPPER
TA_MONSVCSEQ INITIATOR-I_TOUPPER-11659-0
TA_MONPSVCSEQ INITIATOR
TA_MONQID 1879048194-00010.00010
TA_MONPROCNAME tux_atmi_svr

TA_MONDEPTH 1
TA_MONSTATUS 1
TA_MONPROCTYPE 2
TA_PID 2459
TA_SRVID 10
TA_MONLOGTIMESEC 1259292914
TA_MONLOGTIMEUSEC 29368
TA_MONFIELDSMAP1 -1
TA_MONFIELDSMAP2 -1
TA_MONMSGSIZE 100
TA_MONLASTTIMESEC 1259292914
TA_MONLASTTIMEUSEC 29368
TA_MONSTARTTIMESEC 1259292914
TA_MONSTARTTIMEUSEC 10500
TA_MONERRNO 0
TA_MONURCODE 1
TA_MONELAPSETIME 18
TA_DOMAINID dom2:bjsol16:66536
TA_GROUPNAME ATMIGRP1
TA_LMID L1
TA_MONTYPE APP
TA_MONCORRID dom2:bjsol16:66536 L1 tuxclient 2478 1 1 1259292909
TA_MONMSGTYPE ARP
TA_MONSTAGE ME2Q
TA_MONSVCNAME I_TOUPPER
TA_MONHOSTSVC I_TOUPPER
TA_MONSVCSEQ INITIATOR-I_TOUPPER-11659-0
TA_MONPSVCSEQ INITIATOR
TA_MONPROCNAME tux_atmi_svr
 
Oracle TSAM Plusエージェント・プラグインのインタフェース
Oracle TSAM Plusプラグイン・インタフェースのすべての内容が「$TUXDIR/include/e_perf_mon.h」ファイルに定義されます。Oracle TSAM Plusプラグインをビルドする場合は、このファイルをプラグインのソース・コードにインクルードする必要があります。
The $TUXDIR/include/e_perf_mon.h file definitions are as follows:
バージョンおよびインタフェースの識別子
リスト3-4は、バージョンおよび識別子の例を提供します。
リスト3-4 バージョンおよびインタフェースの識別子
#define ED_PERF_MON_MAJOR_VERSION 1
#define ED_PERF_MON_MINOR_VERSION 0
/* Interfaces defined in this module */
#define ED_PERF_MON_INTF_ID "engine/performance/monitoring"
Value Definitions and Data Structure
 
リスト3-5に、Oracle TSAM Plusフレームワークおよびプラグインのコア・データ構造を示します。
リスト3-5 コア・データ構造
typedef struct {
unsigned char fieldsmap[MAXMAPSIZE];
char monitoring_policy[MAXPOLICYLEN]; /* monitor policy */
char corr_id[MAXCORRIDLEN]; /* plug-in supplied correlation ID */
int ulen;
void * udata;
long mon_flag;
} MONITORCTL;
 
表3-5は、MONITORCTLメンバーを示します。
 
表3-5 MONITORCTLメンバー
メンバー
説明
monitoring_policy
内部使用のみ
corr_id
プラグインの相関識別子をTSAM Plusフレームワークで使用できます。
ulen
アプリケーション・バッファのデータの長さを示します。
udata
アプリケーション・バッファを示します。これは型付きバッファで、呼出しモニタリングおよびサービス・モニタリングのみに利用可能です。tptypes(5)を使用すると、タイプおよびサブタイプを確認することができます。
mon_flag
要求と変更を示すためにTSAM Plusフレームワークおよびプラグインの両方が設定したフラグを示します。
表3-6は、MONITORCTL配列サイズ定義を示します。表3-7は、mon_flagの値を示します。
 
表3-6 MONITORCTL配列サイズ定義
配列
サイズの説明
/* fieldsmapのサイズ*/
#define MAXMAPSIZE 128
/* monitoring_policyのサイズ*/
#define MAXPOLICYLEN 128
/* corr_idのサイズ*/
#define MAXCORRIDLEN 256
 
表3-7 mon_flagの値
メンバー
説明
#define PI_CORRID_REQUIRED 0x00000001
PI_CORRID_REQUIREDは、呼出しパス・モニタリングを開始するときにTSAM Plusフレームワークによって設定されます。つまり、プラグインがMONITORCTLのcorr_idメンバーを使用して、フレームワークに相関識別子を指定する必要があります。
関数表
リスト3-6には、プラグイン実装のメソッド関数表が定義されています。
リスト3-6 プラグイン実装のメソッド関数表
typedef struct perf_mon_1_Vtbl {
       TM32I (_TMDLLENTRY *_ec_perf_mon_app) _((
                        struct perf_mon_1_Vtbl * ip,
                        FBFR32 **buf,
                        MONITORCTL *mon_ctl,
                        TM32U flags
       ));
       TM32I (_TMDLLENTRY *_ec_perf_mon_svc) _((
                        struct perf_mon_1_Vtbl * ip,
                        FBFR32 **buf,
                        MONITORCTL *mon_ctl,
                        TM32U flags
       ));
       TM32I (_TMDLLENTRY *_ec_perf_mon_sys) _((
                        struct perf_mon_1_Vtbl * ip,
                        FBFR32 **buf,
                        MONITORCTL *mon_ctl,
                        TM32U flags
       ));
       TM32I (_TMDLLENTRY *_ec_perf_mon_tran) _((
                        struct perf_mon_1_Vtbl * ip,
                        FBFR32 **buf,
                        MONITORCTL *mon_ctl,
                        TM32U flags
       ));
} perf_mon_1, *perf_mon_1_ptr;
 
各メソッドは、モニタリング・タイプに対応しています。_ec_perf_mon_appは呼出しパス・モニタリング用、_ec_perf_mon_svcはサービス・モニタリング用、_ec_perf_mon_sysはシステム・サーバー・モニタリング用、_ec_perf_mon_tranはトランザクション・モニタリング用に使用されます。各メソッドは、該当するモニタリング・タイプのモニタリング・ポイントから呼び出されます。メソッドの引数は、次のとおりです。
struct perf_mon_1_Vtbl *ip: 仮想表ポインタe。
注意:
カスタム・プラグインの場合は不要です。
FBFR32 **buf: FML32内のメトリック・バッファのアドレスです。
MONITORCTL *mon_ctl: 制御構造です。
TM32U flags: 符号なし32バイト整数のビット・フラグです。
その他のヘルプ・ヘッダー・ファイル
$TUXDIR/include/e_pif.h
Oracle Tuxedoの一般的なプラグイン定義ファイルです。これは、プラグイン・ソース・コードにインクルードする必要があります。
$TUXDIR/include/tpadm.h
Oracle Tuxedoに組み込まれているFML32フィールドの定義ファイルです。パフォーマンス・メトリックのすべては、FML32フィールドとして定義され、一部のパフォーマンス・メトリックはこのファイルで定義されます。
$TUXDIR/include/monflds.h
TSAM組込みFML32フィールド定義ファイル。すべてのパフォーマンス・メトリックは、tpadm.hのほか、このファイルで定義されます。
$TUXDIR/include/fml32.h
収集されたメトリックは、Oracle Tuxedo FML32バッファに格納されます。これらの項目にアクセスするには、FML32のルーチンを使用する必要があります。したがって、fml32.hをインクルードする必要があります。
Oracle TSAM Plusエージェント・プラグインの実装
Oracle TSAM Plusエージェント・プラグインを実装するには、次の手順に従います。
1.
2.
3.
「perf_mon_1」の「e_perf_mon.h」関数表への定義
リスト3-7に、e_perf_mon.h関数表で定義されたperf_mon_1の例を示します。
リスト3-7 e_perf_mon.h関数表で定義されたperf_mon_1の定義
static const perf_mon_1 Vtblperfapp_1 = {
       print_app,
       print_svc,
       print_sys,
       print_tran,
};
 
プラグイン情報変数の定義
リスト3-8に、プラグイン情報変数の定義方法を示します。
リスト3-8 プラグイン情報変数の定義
static const _e_pif_plugin_info perf_mon_1_info = {
       { 1, 0 }, /* interface version */
       { 1, 0 }, /* implementation version */
       "abc/tuxedo/tsam", /* implementation id */
       ED_PERF_MON_INTF_ID, /* interface id */
       4, /* virtual table size */
       "ABC, Inc.", /* vendor */
       "Custom Plug-in for Oracle TSAM", /* product name */
       "1.0", /* vendor version */
       EF_PIF_SINGLETON, /* m_flags */
       plugin_destroy,
       plugin_copy
};
 
変更可能なメンバーは、「実装バージョン」、「実装id」、「ベンダ」、「製品名」および「ベンダ・バージョン」です。その他の項目は、例と同じである必要があります。
plugin_destroyおよびplugin_copyは、破棄およびコピーに対するOracle Tuxedoの一般的なプラグインのルーチンです。Oracle TSAM Plusプラグインに対しては、リスト3-9に示すとおりに2つの空の関数を書くことができます。
リスト3‑9 plugin_destroyおよびplugin_copy
static TM32I _TMDLLENTRY
plugin_destroy (_TCADEF, const struct _e_pif_instance_handles *pIhandles, TM32U flags)
{
       return(EE_SUCCESS);
}
static TM32I _TMDLLENTRY
plugin_copy (_TCADEF, void *iP,
       const struct _e_pif_interception_data *pInterceptionData,
       struct _e_pif_instance_handles *pIhandles, TM32U flags)
{
       return(EE_SUCCESS);
}
 
プラグイン・エントリ・ルーチンの記述
各プラグインは「entry」ルーチンを持ち、プラグイン登録処理に指定されている必要があります。このルーチンでは、バーチャル 関数表およびプラグイン情報の構造をプラグイン・インタフェース・ハンドラに指定する必要があります。
リスト3-10に、プラグイン・ルーチンの例を示します。
リスト3-10 プラグイン・エントリ・ルーチン
int _TMDLLENTRY
plugin_entry(_TCADEF, const char *pIId,
       const char *pImplId,
       const struct _e_pif_iversion *version,
       const struct _e_pif_data *pData,
       const struct _e_pif_interception_data *pInterceptionData,
       struct _e_pif_instance_handles *pI,
       TM32U flags)
{
const char * const * regData = pData->regdata;
char *logfile = NULL;
       pI->pVtbl = (void *) &Vtblperfapp_1;
       pI->pPluginInfo = (_e_pif_plugin_info *) &perf_mon_1_info;
       pI->pPrivData = NULL;
       return (EE_SUCCESS);
}
 
注意:
例に示す決まった処理を使用することをお薦めします。プラグインを起動するために「entry」ルーチンは一回しか呼び出されません。
具体的なプラグイン実装の記述
実装関数表は、「entry」ルーチン内のOracle Tuxedoに登録されます。次の章からは、該当するモニタリング・タイプに基づき、TSAM Plusプラグインの記述方法に焦点を当てます。
警告:
Oracle Tuxedo ATMIの呼出し(FML32オペレーションのtpalloc/tprealloc/tpfreeおよびtptypesを除く)をプラグインで行わないでください。そうするとOracle Tuxedoコンテキストが損なわれる可能性があり、予期しない動作につながる場合があります。
呼出しパス・モニタリング・プラグイン・ルーチン
呼出しパス・モニタリング・プラグイン・ルーチンは、モニタリング・ポイントから呼び出されます。詳細は、2‑1ページの「Oracle TSAM Plusエージェント・データ収集フレームワーク」を参照してください。
基本実装
この例では、ルーチンは渡されたFML32バッファを出力します。
static TM32I _TMDLLENTRY print_app(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}
Understanding Current Monitoring Points
呼出しパス・モニタリングは、最も包括的なOracle Tuxedoアプリケーションのインターセプタです。記録および分析のために複数のメトリックを提供します。
モニタリング・ステージの決定
モニタリング段階は、FML32フィールド名としてTA_MONSTAGEを使用したメトリックです。表3‑8は、TA_MONSTAGEの値のリストです。
 
表3-8 TA_MONSTAGEの値
説明
STMO
新しい呼出しパス・モニタリングが起動されます。これは、現在モニターされている呼出しパスの最初のレコードです。
ME2Q
IPCへメッセージが送信される前。これはリクエスト・メッセージ、または応答メッセージです。
「initiator」をモニタリングする場合、「STMO」と「ME2Q」が同じポイントに存在するため、「STMO」が「ME2Q」に置換されます。
Q2ME
IPCからのメッセージが受信される前。これはリクエスト・メッセージ、または応答メッセージです。
ME2NET
ネットワークへメッセージを送信する前。GWTDOMAINにのみ適用されます。これはリクエスト・メッセージ、または応答メッセージです。
NET2ME
ネットワークからのメッセージを受信した後。GWTDOMAINにのみ適用されます。これはリクエスト・メッセージ、または応答メッセージです。
リスト3-11に、モニタリング段階の決定の例を示します。
リスト3-11 モニタリング段階の決定
{
       char *stage;
       FLDLEN32 len;
       stage = Ffind32(*obuf, TA_MONSTAGE,0,&len);
       if (stage != NULL ) {
              if (strcmp(stage,���STMO���) == 0 ) {
                     /* ... */
              }else if (strcmp(stage,���Q2ME��� == 0 ) {
                     /* ... */
              
              /* other processment */
       }              
}
 
「STRING」フィールド・タイプの場合は、高速プロセスを使用するために「Ffind32」ルーチンを使用することをお薦めします。
メッセージ・タイプの決定
Oracle Tuxedoシステムに転送されるアプリケーションのメッセージには、リクエスト・メッセージと応答メッセージの2つのメッセージがあります。フィールドのTA_MONMSGTYPEは、メッセージのタイプを示します。
表3-9は、TA_MONMSGTYPEの値を示します。
 
表3-9 TA_MONMSGTYPEの値
説明
ARQ
リクエスト・メッセージ
ARP
応答メッセージ
現在のプロセスの場所の決定
モニタリング・ポイントは、常にOracle Tuxedo アプリケーションのプロセスに位置しています。したがって、現在のプロセスを理解することが重要です。Oracle TSAM Plusフレームワークでは、フィールドTA_DOMAINID、TA_PID、TA_LMID、TA_MONPROCNAME、TA_GROUPNAMEおよびTA_SRVIDを使用して、プロセスの場所を示します(表3-10の定義を参照)。
 
表3-10 現在のプロセスの場所を示すフィールド
書式
説明
TA_DOMAINID
ドメイン識別子です。書式は、domainid: mastername:ipckeyです。
domainidは、UBBCONFIGで構成されたDOMAINIDです。設定されていない場合、TUXDOMが使用されます。
Masternameは、マスター・マシン名です。
Ipckeyは、UBBCONFIGのキーです。
TA_PID
プロセスID
TA_LMID
論理マシンID
TA_MONPROCNAME
プロセス名です。
TA_GROUPNAME
Oracle Tuxedoサーバーのグループ名です。
TA_SRVID
Oracle TuxedoサーバーIDです。
注意:
一部のプロセスでは、すべてのメトリックを利用できるとは限りません。たとえばクライアント・プロセスの場合、TA_SRVIDは利用できません。
よく使用されるメトリックの確認
モニタリングの段階でメッセージ・タイプとプロセスの場所について必要な情報を取得したら、次の段階はよく使用されるメトリックがFML32バッファでも実行されたかどうか確認することです。メトリックが利用可能かどうかは、前述の条件によります。
表3-11は、一般に使用されるメトリックを示します。
 
表3-11 一般に使用されるメトリック
フィールド名
説明
段階
TA_MONCORRID
文字列
このモニターされる呼出しパスの相関識別子を示します。
すべて
TA_MONMSGSIZE
long
現在のメッセージのサイズを示します。
すべて1
TA_MONMSGQUEUED
long
サーバーのリクエストIPCキューにあるメッセージ数を示します。
リクエスト・メッセージ
Q2ME
TA_MONSTARTTIMESEC
long
この呼出しパスのモニタリングを起動したときのタイム・スタンプの2番目の部分を示します。これはエポック秒の秒数です。
すべて
TA_MONSTARTTIMEUSEC
long
起動タイム・スタンプのマイクロ秒の部分を示します。常にTA_MONSTARTUTIMESECと一緒に使用され、時間測定の細粒度を高めることができます。
すべて
TA_MONLASTTIMESEC
long
モニターされたメッセージがトランスポートを出入りするときのタイム・スタンプの2番目の部分を示します。これはエポック秒の秒数です。トランスポートは、メッセージを転送する方法で、これにはIPCキューやネットワークなどがあります。一般的な使用方法を次に示します。
IPCキューからリクエストをフェッチすると、TA_LASTTIMESECは、リクエスト・メッセージがキューに登録されたときのタイム・スタンプを示します。
ネットワークからリクエストをフェッチすると、TA_LASTTIMESECは、ピア・プロセスがネットワークにメッセージを送信したときのタイム・スタンプを示します。
すべて
TA_MONLASTTIMEUSEC
long
最後のタイム・スタンプのマイクロ秒の部分を示します。常にTA_MONLASTTIMESECと一緒に使用され、時間測定の細粒度を高めることができます。
すべて
TA_MONLGTRID
文字列
呼出しパスがトランザクションに関連する場合、現在のモニタリング・ポイントのGTRIDを示します。
トランザクションに関連するモニタリング・ポイント
TA_MONCLTADDR
文字列
リモート・クライアントのアドレスを示します。モニタリングがOracle Tuxedoのワークステーションから開始される場合、WSH、JSHまたはGWWS、TSAM Plusフレームワークは、呼出しパスの情報を伝達するためにクライアントのipアドレスおよびポート番号を追加します。書式は、//ip address:portです。
すべて
TA_MONDEPTH
short
呼出しパスの深さを示します。1つのサービスから別のサービスにホップすると、深さが1段階増加されたと見なされます。イニシエータでの開始値は0です。詳細は、TSAM Plusユーザー・ガイドを参照してください。
すべて
TA_MONERRNO
long
Oracle Tuxedoインフラストラクチャで設定されているエラー番号です。
応答メッセージ
TA_MONURCODE
long
tpreturnのurcodeを示します。
応答メッセージ
TA_MONSVCNAME
文字列
現在のモニタリング・ポイントのサービス名を示します。リクエスト・メッセージの場合はターゲット・サービス名で、応答メッセージの場合は応答を戻すサービスです。
すべて
TA_MONHOSTSVC
文字列
現在のサービス・ルーチンのサービス名を示します。
アプリケーション・サーバー内のモニタリング・ポイント
TA_MONCALLFLAG
long
tpcall/tpacallに設定した呼出しフラグを示します。
リクエスト・メッセージ
ME2Q
STMO
TA_MONCALLMODE
short
呼出しタイプを示します。1 - tpacall, 2 - tpcall, 3 - tpforward
 
リクエスト・メッセージ
ME2Q
STMO
TA_MONQID
文字列
現在のサービスを提供するサーバーのリクエスト・キューIDを示します。書式は、「physical queue key - Oracle Tuxedo logic queue name」です。例:
14444547-00004.00018
リクエスト・メッセージ
Q2ME
TA_MONLDOM
文字列
ローカル・ドメインの設定を示します。書式は、ldom:domainidです。DOM1:FINANCEはその一例です。「LDOM」および「DOMAINID」の詳細については、DMCONFIGのOracle Tuxedoマニュアルを参照してください。
ME2NET
NET2ME
TA_MONRDOM
文字列
リモート・ドメインの設定を示します。書式はTA_MONLDOMの書式と同じですが、リモート・ドメインの値を使用します。
ME2NET
NET2ME
TA_MONWSENDPOINT
文字列
GWWSのWebサービス・エンド・ポイントのURLを示します。
応答メッセージ
ME2Q
TA_MONCPUTIME
long
サービス実行のために使用されたCPU時間。
応答メッセージ
ME2Q

1
STRINGなど、自己記述型バッファ・タイプの場合は、サイズを「0」にすることができます。

呼出しパス相関識別子の生成
モニタリングの起動時にプラグインで相関識別子を指定する必要があります。TA_MONSTAGE値は「STMO」です。Oracle TSAM Plusフレームワークは、PI_CORRID_REQUIREDMONITORCTL mon_flagに設定します。相関識別子を指定しない場合、エラーが報告されます。Oracle TSAM Plusのデフォルトのプラグインでは、相関識別子が提供されます。次の2つのシナリオを考慮する必要があります。
Oracle TSAM Plusのデフォルト・プラグインを使用した操作
カスタム・プラグインで、相関識別子の生成を省略することができます。カスタム・プラグインでOracle TSAM Plusのデフォルト・プラグインによって生成された相関識別子を上書きする場合は、Oracle TSAM Plusのデフォルト・プラグインの後にくるカスタム・プラグインのインターセプタ・シーケンスを指定する必要があります。
Oracle TSAM Plusのデフォルト・プラグインを使用しない操作
Oracle TSAM Plusのデフォルト・プラグインをOracle Tuxedoのプラグイン・フレームワークから削除する場合は、カスタム・プラグインで相関ID iを指定する必要があります。例:
if (monctl->mon_flag & PI_CORRID_REQUIRED) {
       strcpy(monctl->corr_id, mygetid());
}
mygetid()」は、想定される識別子の生成ルーチンを示します。新しい識別子の長さは、MONITORCTLのcorr_idのサイズを超えることはできません。
識別子を作成するには、カスタム・プラグインでOracle TSAM Plusフレームワーク・サービスを使用して相関識別子を取得できます。リスト3-12は、識別子の生成例を示します。
リスト3-12 識別子の生成例
extern int _TMDLLENTRY tmmon_getcorrid(char *obuf, int len);
...
if (monctl->mon_flag & PI_CORRID_REQUIRED) {
       char new_corrid[MAXCORRIDLEN];
       if (tmmon_getcorrid(new_corrid, sizeof(new_corrid)) == 0 ) {
              strpcy(monctl->corr_id,new_corrid);
       }
}
...
 
注意:
Oracle TSAM Plusフレームワークの相関ID生成ルーチンを使用する場合、libtsamがプラグインにリンクされている必要があります。
サービス・モニタリング・プラグイン・ルーチン
サービスのモニタリング手順は単純です。サービス・ルーチンの呼出しの前後にデータが収集されます。リクエストが実行されるときにプラグインが呼び出され、クライアントに応答が返信されます。
基本実装
この例では、ルーチンは渡されたFML32バッファを出力します。
static TM32I _TMDLLENTRY print_svc(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}
.
よく使用されるメトリックの確認
表3-12は、サービス・モニタリング・プラグイン・ルーチン・メトリックを示します。
 
表3-12 サービス・モニタリング・プラグイン・ルーチン・メトリック
フィールド名
説明
TA_MONMSGWAITTIME
long
リクエスト・メッセージが実行される前に、サーバーのリクエストIPCキュー内で待機する時間を示します。
単位はミリ秒です。待ち時間は、次の2つのシナリオで計算されます。
Oracle Tuxedo 12cR1以上が、リクエストの送信者の場合
待ち時間は、このサービスに対するトランスポートの最後のタイム・スタンプを考慮して計算されます。待ち時間は正確に実行されます。
Oracle Tuxedo 12cR1以前のリリースが、送信者の場合
待ち時間は、キューの平均的長さ、最後にサービスが実行された時間、およびディスパッチ・スレッド数に基づいて計算されます。これは、大まかな値です。この値は同様のサービスを提供し、実行時間が一定のサーバーにのみ適用されます。
TA_MONMSGSIZE
long
応答メッセージのサイズを示します。
TA_MONMSGQUEUED
long
現在サーバーリクエストIPCのキューに登録されているメッセージ数を示します。
TA_MONLASTTIMESEC
long
サービスの実行が開始されるまでのエポック秒数を示します。
TA_MONLASTTIMEUSEC
long
エポック秒をマイクロ秒単位で示します。これは、TA_MONLASTTIMESECで使用されます。
TA_MONERRNO
long
Oracle Tuxedoの戻りエラー・コードであるtperrnoを示します。
TA_MONURCODE
long
tpreturnのurcodeを示します。
TA_MONEXECTIME
long
現在サービスの実行にかかるレスポンス時間を、ミリ秒単位で表します。時間は、Oracle TSAM Plusフレームワークを使用して計算されます。プラグインを使用して現在の時間、および最終タイムスタンプを取得することもできます。
TA_MONCPUTIME
long
現在のサービス実行に使用されるCPU時間。単位はミリ秒です。
TA_MONSVCNAME
文字列
サービス名を示します。
TA_MONLOCATION
文字列
現在のプロセスが処理される場所を示します。これは、呼出しパス・モニタリングと同義です。
システム・サーバー・モニタリング・プラグイン・ルーチン
Oracle TSAM Plusは、いくつかのタイプのOracle Tuxedoシステム・サーバー・モニタリング(GWTDOMAIN、BRIDGEおよびGWWS)をサポートしています。モニタリングは、スループット、未処理リクエスト数、およびネットワークのキューに登録されているメッセージ数を対象としています。プラグインは、Oracle TSAM Plusフレームワークによって定期的に呼び出されます。間隔は、モニタリング・ポリシーにより指定されます。実行中のサーバーの操作中にデータが収集されます。
基本実装
この例では、ルーチンは渡されたFML32バッファを出力します。
static TM32I _TMDLLENTRY print_sys(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}
よく使用されるメトリックの確認
表3-13は、システム・サーバー・モニタリング・プラグイン・ルーチン・メトリックを示します。
 
表3-13 システム・サーバー・モニタリング・プラグイン・ルーチン・メトリック
フィールド名
説明
TA_MONLINKNUM
short
現在サーバーに接続されているネットワーク・リンク数を示します。ネットワーク・リンク数が2つ以上の場合、ネットワーク・リンク上の次の統計データがFMLオカレンスのスタイルで表示されます。例えば、TA_MONLINKADDR「0」は最初のネットワーク・リンクに、TA_MONLINKADDR「1」は2番目のネットワーク・リンクに属します。
TA_MONLINKSTATUS
short
ネットワーク・リンクのステータスとして、次の3つの値を指定することができます: 1: 初期化段階。0: 正常に接続されている。 -1:接続が失われている。
TA_MONNUMPEND
long
このネットワーク・リンクに対してネットワーク・バッファのキューに登録されているメッセージ数を示します。バッファはシステムのネットワーク・スタックではなく、Oracle Tuxedoのネットワーク層に対するバッファです。
これは、プラグインが呼び出された場合、メッセージ数を反映するスナップショット値を示します。
TA_MONBYTESPEND
long
ネットワーク・バッファのキューに登録されているメッセージのバイト数を示します。これはTA_MONNUMPENDに関連していますが、データ量を計算します。
TA_MONNUMWAITRPLY
long
このネットワーク・リンク上の未処理のリクエスト数を示します。つまり、応答を待つリクエスト・メッセージ数を示します。GWTDOMAINにのみ適用されます。BRIDGEでは、このメトリックをサポートしていません。
これは、スナップショットの値です。
TA_MONACCNUM
long
このネットワーク・リンクに対して、「sysinterval」ポリシーを使用して制御される、現在から最後のプラグインの呼び出しまでに蓄積されたメッセージ数を示します。
これは1回の間隔の間に蓄積された情報を反映するスループットの値です。
TA_MONACCBYTES
long
蓄積されたメッセージのバイト数を示します。これはTA_MONACCNUMに関連していますが、データ量を計算します。
これは、スループットの値です。
TA_MONLINKADDR
文字列
GWTDOMAINのリンク・アドレスであり、UBBCONFIGで定義されたRDOMを示します。BRIDGEの場合、リモート・ホスト名です。
TA_MONINRPCFAIL
long
GWWSのインバウンドに対するRPC失敗リクエストの数。
TA_MONOUTRPCFAIL
long
GWWSのアウトバウンドに対するRPC失敗リクエストの数。
TA_MONINBOUNDPEND
long
GWWSのインバウンドに対する応答を待機している保留リクエストの数。
TA_MONOUTBOUNDPEND
long
GWWSのアウトバウンドに対する応答を待機している保留リクエストの数。
トランザクション・モニタリング・プラグイン・ルーチン
Oracle TSAM Plusは、XAトランザクション内の重要なルーチンの呼出しもトレースします。スコープには、tpbegintpcommittpabort、xa_xxx呼び出し、およびGWTDOMAINSトランザクション・ルーチンが含まれます。
基本実装
この例では、ルーチンは渡されたFML32バッファを出力します。
static TM32I _TMDLLENTRY print_tran(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}
よく使用されるメトリックの確認
リスト3-10は、通常使用されるトランザクション・モニタリング・プラグイン・ルーチンのメトリックを示します。
 
表3-14 トランザクション・モニタリング・プラグイン・ルーチン・メトリック
フィールド名
説明
TA_MONXANAME
文字列
XAトランザクションのルーチン名、例えば、「tpbegin」、「xa_commit」などを示します。
TA_MONXACODE
long
ルーチンの戻りコードを示します。
TA_MONEXECTIME
long
ルーチンの実行時間をミリ秒単位で示します。
TA_MONRMID
long
リソース・マネージャ・インスタンスID。xa_xxx呼出しにのみ適用されます。
TA_MONLGTRID
文字列
現在のトランザクションのグローバル・トランザクションIDを示します。
TA_MONRGTRID
文字列
親トランザクションのGTRIDを示します。それがネットワークのサブオーディネータである場合は、GWTDOMAINにのみ適用されます。
TA_MONLOCATION
文字列
現在のプロセスが処理される場所を示します。これは、呼出しパス・モニタリングと同義です。
Oracle Tuxedoへのプラグインの構成
注意:
プラグインは、Oracle Tuxedoインフラストラクチャで実行されます。よくテストしてからOracle Tuxedo本番環境に構成する必要があります。
Oracle Tuxedoへの登録
Oracle Tuxedoでは、epifregコマンドを使用して、プラグインがOracle Tuxedoレジストリに登録されます。これにより、インフラストラクチャが実行時にプラグインを呼び出すことができます。Oracle TSAM Plusでは、Oracle TSAM Plusフレームワークを使用してプラグインが呼び出されます。
リスト3-13では、プラグインの呼出しにepifregコマンドの使用方法を示します。
リスト3-13 epifregを使用したプラグインの呼出し
epifreg -r -p abc/tuxedo/tsam -i engine/performance/monitoring \
       -o SYSTEM -v 1.0 -f /test/abc/customplugin.so -e plugin_entry
epifregedt -s -k "SYSTEM/impl/bea/performance/monfan" \
       -a InterceptionSeq=bea/performance/monshm \
          -a InterceptionSeq=abc/tuxedo/tsam
 
この場合は、カスタム・プラグインをOracle Tuxedoに登録するために次の2つの手順を実行する必要があります。
1.
「epifreg」を使用したOracle Tuxedoへのカスタム実装登録
a.
-p」オプションは実装IDを示し、ソース・コード内で指定された値と一貫性を持たせる必要があります。
b.
-v」はバージョン番号を示します。
c.
-f」は、ダイナミック・ライブラリのパスを示します。
d.
-e」は、「General Steps」項に記載される「entry」ルーチンを示します。
2.
epifregedt」コマンドを使用したファンアウト・プラグインの「InterceptionSeq」属性変更
Oracle TSAM Plusは、ファンアウト・プラグイン・メカニズムをサポートしています。これにより、複数のプラグインを同時に操作できます。Oracle TSAM Plusエージェントには、ファンアウト・プラグインおよびデフォルト・インターセプタ・プラグインが備わっています。カスタム・プラグインは追加インターセプタ・プラグインです。
「-a InterceptionSeq=xxx」オプションを使用すると、ファンアウト・プラグインは、指定した順番でインターセプタ・プラグインを呼び出すことを示します。「xxx」は 実装IDです。この例では、Oracle Tuxedoのデフォルト・インターセプタ・プラグイン実装IDである「bea/performance/monshm」が、カスタム・プラグイン実装IDである「abc/tuxedo/tsam」の前に呼び出されます。
3.
複数のカスタム・プラグインを開発した場合は、最初にそれらをepifregコマンドを使って登録し、次に「epifregedt」を使用して、適切な「InterceptionSeq」シーケンスを使用して呼出しシーケンスを変更する必要があります。
Oracle Tuxedoからの登録解除
epifunreg」を使用して、指定したプラグインを登録解除することができます。例:
epifunreg -p abc/tuxedo/tsam
カスタム・プラグインの登録解除後、「epifregedt」を使用して、現在利用可能なプラグインに基づき、ファンアウト・プラグインの呼出しを再度変更することができます。例:
epifregedt -s -k "SYSTEM/impl/bea/performance/monfan" \
-a InterceptionSeq=bea/performance/monshm
注意:
Oracle Tuxedoアプリケーションの停止後、プラグインの登録、登録解除、変更を行うことを強くお薦めします。
Oracle TSAM Plusエージェント・プラグインの開発/デプロイメントに関する注意
FML32オペレーションのtpalloc/tprealloc/tpfreeおよびtptypesを除いて、Oracle Tuxedo ATMI呼出しをプラグインに使用しないでください。モニタリング・ポイントは、Oracle Tuxedoの通信フレームワークに組み込まれます。組込みATMI呼出しでは、現在のOracle Tuxedoコンテキストが損なわれる可能性があります。
プラグインによって渡されたFML32バッファを解放することはできません。
新しい相関IDなどの情報がOracle TSAM Plusフレームワークに戻されると、プラグインの最新の変更が有効になります。
MONITORCTL udataを変更しないでください。これは、アプリケーション・メッセージの読取り専用インターセプトです。変更すると、予測しない動作につながる場合があります。

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved