Oracle TSAM Plusエージェント・カスタム・プラグインの開発
Oracle TSAM Plusエージェントでは、次の3つの主なレイヤー・モジュールが提供されます。
Oracle TSAM Plusフレームワークは、Tuxedoシステム内のデータを収集します。収集動作は、モニタリングのタイプとポリシーによって制御されます。収集されたメトリックは、オープン・インタフェースを使用してプラグインに渡されます。
Oracle TSAM Plusエージェントには、デフォルト・プラグインが付属しています。デフォルト・プラグインは、ローカル・モニター・サーバー(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は、呼出しパス・モニタリング・ポイントのリストです。
|
|
|
ネイティブ・クライアント、アプリケーション・サーバー、GWTDOMAN、BRIDGE、JSH/WSHおよびGWWS
|
|
アプリケーション・サーバー、GWTDOMAINおよびGWWS
|
|
アプリケーション・サーバー、GWTDOMAIN、BRIDGEおよびGWWS
|
|
ネイティブ・クライアント、アプリケーション・サーバー、GWTDOMAIN
|
|
|
|
|
|
|
|
|
表3-2は、サービス・モニタリング・ポイントのリストです。
|
|
|
アプリケーション・サーバー、GWTDOMAINおよびGWWS
|
|
アプリケーション・サーバー、GWTDOMAINおよびGWWS
|
表3-3はシステム・サーバー・モニタリング・ポイントのリストです。
表3-3
システム・サーバーのモニタリング・ポイント
|
|
|
|
表3-4は、トランザクション・モニタリング・ポイントのリストです。
表3-4
トランザクションのモニタリング・ポイント
|
|
|
ネイティブ・クライアント、アプリケーション・サーバー、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は、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エージェント・プラグインのアーキテクチャを示します。
Oracle Tuxedoのインフラストラクチャは、プラグインAメソッドXを呼び出します。プラグインAは、次に示すように、「
InterceptionSeq」属性で指定された順にインターセプトするプラグインのメソッドXを呼び出します。
インターセプタに使用されるプラグインは、すべて同じインタフェースを実装します。インターセプトのシーケンスには、同じプラグインの複数のオカレンスをもつことはできません。
Oracle TSAM Plusエージェントは、ファンアウト・プラグインを提供します。ファンアウト・プラグインを使用すると、インターセプタ・プラグインを書いたり、作成したりできます。
いったんプラグインが書かれると、機能するコンポーネントがプラグインを検索して、該当するメソッドを呼出しできるようにOracle Tuxedoのレジストリに登録する必要があります。Oracle Tuxedoでは、特にプラグインを使用するために次の3つのコマンドが提供されています。
Oracle TSAM Plusエージェント・プラグインの開発
Oracle TSAM Plusエージェント・プラグインの呼出しは、モニタリング・ポイントから始まります。Oracle TSAM Plusエージェントは、メトリックを収集および計算し、プラグインへ渡される引数を構成します。Oracle TSAM Plusエージェントのファンアウト・プラグインは、登録シーケンスによって、インターセプタ・プラグインを呼び出します。
Oracle TSAM Plusカスタム・プラグインの開発の単純な例がガイドラインとして提供されています。システム環境は、Solaris + Sparcです。機能は基本的なもので、メトリックのバッファを印刷するだけです。このプラグインは、Oracle TSAM Plusエージェントのデフォルト・プラグインと一緒に機能します。
リスト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」という名前のシェル・スクリプトを作成します。
|
4.
|
「tmboot」を使って、Oracle Tuxedoアプリケーションを起動します。
|
リスト3-2に、
reg.shシェル・スクリプトの例を示します。
#!/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モニタリングを有効化します。
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
バージョンおよびインタフェースの識別子
#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フレームワークおよびプラグインのコア・データ構造を示します。
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メンバーを示します。
|
|
|
|
|
プラグインの相関識別子をTSAM Plusフレームワークで使用できます。
|
|
アプリケーション・バッファのデータの長さを示します。
|
|
アプリケーション・バッファを示します。これは型付きバッファで、呼出しモニタリングおよびサービス・モニタリングのみに利用可能です。tptypes(5)を使用すると、タイプおよびサブタイプを確認することができます。
|
|
要求と変更を示すためにTSAM Plusフレームワークおよびプラグインの両方が設定したフラグを示します。
|
表3-6は、MONITORCTL配列サイズ定義を示します。
表3-7は、mon_flagの値を示します。
|
|
|
|
/* monitoring_policyのサイズ*/
|
|
|
|
|
|
#define PI_CORRID_REQUIRED 0x00000001
|
PI_CORRID_REQUIREDは、呼出しパス・モニタリングを開始するときにTSAM Plusフレームワークによって設定されます。つまり、プラグインがMONITORCTLのcorr_idメンバーを使用して、フレームワークに相関識別子を指定する必要があります。
|
リスト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バイト整数のビット・フラグです。
|
Oracle Tuxedoの一般的なプラグイン定義ファイルです。これは、プラグイン・ソース・コードにインクルードする必要があります。
Oracle Tuxedoに組み込まれているFML32フィールドの定義ファイルです。パフォーマンス・メトリックのすべては、FML32フィールドとして定義され、一部のパフォーマンス・メトリックはこのファイルで定義されます。
•
|
$TUXDIR/include/monflds.h
|
TSAM組込みFML32フィールド定義ファイル。すべてのパフォーマンス・メトリックは、tpadm.hのほか、このファイルで定義されます。
収集されたメトリックは、Oracle Tuxedo FML32バッファに格納されます。これらの項目にアクセスするには、FML32のルーチンを使用する必要があります。したがって、
fml32.hをインクルードする必要があります。
Oracle TSAM Plusエージェント・プラグインの実装
Oracle TSAM Plusエージェント・プラグインを実装するには、次の手順に従います。
「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,
};
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)
各プラグインは「entry」ルーチンを持ち、プラグイン登録処理に指定されている必要があります。このルーチンでは、バーチャル 関数表およびプラグイン情報の構造をプラグイン・インタフェース・ハンドラに指定する必要があります。
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の値のリストです。
|
|
|
新しい呼出しパス・モニタリングが起動されます。これは、現在モニターされている呼出しパスの最初のレコードです。
|
|
IPCへメッセージが送信される前。これはリクエスト・メッセージ、または応答メッセージです。
「initiator」をモニタリングする場合、「STMO」と「ME2Q」が同じポイントに存在するため、「STMO」が「ME2Q」に置換されます。
|
|
IPCからのメッセージが受信される前。これはリクエスト・メッセージ、または応答メッセージです。
|
|
ネットワークへメッセージを送信する前。GWTDOMAINにのみ適用されます。これはリクエスト・メッセージ、または応答メッセージです。
|
|
ネットワークからのメッセージを受信した後。GWTDOMAINにのみ適用されます。これはリクエスト・メッセージ、または応答メッセージです。
|
{
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の値を示します。
モニタリング・ポイントは、常にOracle Tuxedo アプリケーションのプロセスに位置しています。したがって、現在のプロセスを理解することが重要です。Oracle TSAM Plusフレームワークでは、フィールドTA_DOMAINID、TA_PID、TA_LMID、TA_MONPROCNAME、TA_GROUPNAMEおよびTA_SRVIDを使用して、プロセスの場所を示します(
表3-10の定義を参照)。
|
|
|
ドメイン識別子です。書式は、domainid: mastername:ipckeyです。
•
|
domainidは、UBBCONFIGで構成されたDOMAINIDです。設定されていない場合、TUXDOMが使用されます。
|
|
|
|
|
|
|
|
|
Oracle Tuxedoサーバーのグループ名です。
|
|
|
注意:
|
一部のプロセスでは、すべてのメトリックを利用できるとは限りません。たとえばクライアント・プロセスの場合、TA_SRVIDは利用できません。
|
モニタリングの段階でメッセージ・タイプとプロセスの場所について必要な情報を取得したら、次の段階はよく使用されるメトリックがFML32バッファでも実行されたかどうか確認することです。メトリックが利用可能かどうかは、前述の条件によります。
表3-11は、一般に使用されるメトリックを示します。
|
|
|
|
|
|
このモニターされる呼出しパスの相関識別子を示します。
|
|
|
|
|
|
|
|
サーバーのリクエストIPCキューにあるメッセージ数を示します。
|
|
|
|
この呼出しパスのモニタリングを起動したときのタイム・スタンプの2番目の部分を示します。これはエポック秒の秒数です。
|
|
|
|
起動タイム・スタンプのマイクロ秒の部分を示します。常にTA_MONSTARTUTIMESECと一緒に使用され、時間測定の細粒度を高めることができます。
|
|
|
|
モニターされたメッセージがトランスポートを出入りするときのタイム・スタンプの2番目の部分を示します。これはエポック秒の秒数です。トランスポートは、メッセージを転送する方法で、これにはIPCキューやネットワークなどがあります。一般的な使用方法を次に示します。
•
|
IPCキューからリクエストをフェッチすると、TA_LASTTIMESECは、リクエスト・メッセージがキューに登録されたときのタイム・スタンプを示します。
|
•
|
ネットワークからリクエストをフェッチすると、TA_LASTTIMESECは、ピア・プロセスがネットワークにメッセージを送信したときのタイム・スタンプを示します。
|
|
|
|
|
最後のタイム・スタンプのマイクロ秒の部分を示します。常にTA_MONLASTTIMESECと一緒に使用され、時間測定の細粒度を高めることができます。
|
|
|
|
呼出しパスがトランザクションに関連する場合、現在のモニタリング・ポイントのGTRIDを示します。
|
|
|
|
リモート・クライアントのアドレスを示します。モニタリングがOracle Tuxedoのワークステーションから開始される場合、WSH、JSHまたはGWWS、TSAM Plusフレームワークは、呼出しパスの情報を伝達するためにクライアントのipアドレスおよびポート番号を追加します。書式は、//ip address:portです。
|
|
|
|
呼出しパスの深さを示します。1つのサービスから別のサービスにホップすると、深さが1段階増加されたと見なされます。イニシエータでの開始値は0です。詳細は、TSAM Plusユーザー・ガイドを参照してください。
|
|
|
|
Oracle Tuxedoインフラストラクチャで設定されているエラー番号です。
|
|
|
|
|
|
|
|
現在のモニタリング・ポイントのサービス名を示します。リクエスト・メッセージの場合はターゲット・サービス名で、応答メッセージの場合は応答を戻すサービスです。
|
|
|
|
|
アプリケーション・サーバー内のモニタリング・ポイント
|
|
|
tpcall/tpacallに設定した呼出しフラグを示します。
|
|
|
|
呼出しタイプを示します。1 - tpacall, 2 - tpcall, 3 - tpforward
|
|
|
|
現在のサービスを提供するサーバーのリクエスト・キューIDを示します。書式は、「physical queue key - Oracle Tuxedo logic queue name」です。例:
|
|
|
|
ローカル・ドメインの設定を示します。書式は、ldom:domainidです。DOM1:FINANCEはその一例です。「LDOM」および「DOMAINID」の詳細については、DMCONFIGのOracle Tuxedoマニュアルを参照してください。
|
|
|
|
リモート・ドメインの設定を示します。書式はTA_MONLDOMの書式と同じですが、リモート・ドメインの値を使用します。
|
|
|
|
GWWSのWebサービス・エンド・ポイントのURLを示します。
|
|
|
|
|
|
モニタリングの起動時にプラグインで相関識別子を指定する必要があります。
TA_MONSTAGE値は「
STMO」です。Oracle TSAM Plusフレームワークは、
PI_CORRID_REQUIREDを
MONITORCTL 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は、識別子の生成例を示します。
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)
表3-12は、サービス・モニタリング・プラグイン・ルーチン・メトリックを示します。
表3-12
サービス・モニタリング・プラグイン・ルーチン・メトリック
|
|
|
|
|
リクエスト・メッセージが実行される前に、サーバーのリクエストIPCキュー内で待機する時間を示します。
単位はミリ秒です。待ち時間は、次の2つのシナリオで計算されます。
•
|
Oracle Tuxedo 12cR1以上が、リクエストの送信者の場合
|
待ち時間は、このサービスに対するトランスポートの最後のタイム・スタンプを考慮して計算されます。待ち時間は正確に実行されます。
•
|
Oracle Tuxedo 12cR1以前のリリースが、送信者の場合
|
待ち時間は、キューの平均的長さ、最後にサービスが実行された時間、およびディスパッチ・スレッド数に基づいて計算されます。これは、大まかな値です。この値は同様のサービスを提供し、実行時間が一定のサーバーにのみ適用されます。
|
|
|
|
|
|
現在サーバーリクエストIPCのキューに登録されているメッセージ数を示します。
|
|
|
サービスの実行が開始されるまでのエポック秒数を示します。
|
|
|
エポック秒をマイクロ秒単位で示します。これは、TA_MONLASTTIMESECで使用されます。
|
|
|
Oracle Tuxedoの戻りエラー・コードであるtperrnoを示します。
|
|
|
|
|
|
現在サービスの実行にかかるレスポンス時間を、ミリ秒単位で表します。時間は、Oracle TSAM Plusフレームワークを使用して計算されます。プラグインを使用して現在の時間、および最終タイムスタンプを取得することもできます。
|
|
|
現在のサービス実行に使用されるCPU時間。単位はミリ秒です。
|
|
|
|
|
|
現在のプロセスが処理される場所を示します。これは、呼出しパス・モニタリングと同義です。
|
システム・サーバー・モニタリング・プラグイン・ルーチン
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
システム・サーバー・モニタリング・プラグイン・ルーチン・メトリック
|
|
|
|
|
現在サーバーに接続されているネットワーク・リンク数を示します。ネットワーク・リンク数が2つ以上の場合、ネットワーク・リンク上の次の統計データがFMLオカレンスのスタイルで表示されます。例えば、TA_MONLINKADDR「0」は最初のネットワーク・リンクに、TA_MONLINKADDR「1」は2番目のネットワーク・リンクに属します。
|
|
|
ネットワーク・リンクのステータスとして、次の3つの値を指定することができます: 1: 初期化段階。0: 正常に接続されている。 -1:接続が失われている。
|
|
|
このネットワーク・リンクに対してネットワーク・バッファのキューに登録されているメッセージ数を示します。バッファはシステムのネットワーク・スタックではなく、Oracle Tuxedoのネットワーク層に対するバッファです。
これは、プラグインが呼び出された場合、メッセージ数を反映するスナップショット値を示します。
|
|
|
ネットワーク・バッファのキューに登録されているメッセージのバイト数を示します。これはTA_MONNUMPENDに関連していますが、データ量を計算します。
|
|
|
このネットワーク・リンク上の未処理のリクエスト数を示します。つまり、応答を待つリクエスト・メッセージ数を示します。GWTDOMAINにのみ適用されます。BRIDGEでは、このメトリックをサポートしていません。
|
|
|
このネットワーク・リンクに対して、「sysinterval」ポリシーを使用して制御される、現在から最後のプラグインの呼び出しまでに蓄積されたメッセージ数を示します。
これは1回の間隔の間に蓄積された情報を反映するスループットの値です。
|
|
|
蓄積されたメッセージのバイト数を示します。これはTA_MONACCNUMに関連していますが、データ量を計算します。
|
|
|
GWTDOMAINのリンク・アドレスであり、UBBCONFIGで定義されたRDOMを示します。BRIDGEの場合、リモート・ホスト名です。
|
|
|
GWWSのインバウンドに対するRPC失敗リクエストの数。
|
|
|
GWWSのアウトバウンドに対するRPC失敗リクエストの数。
|
|
|
GWWSのインバウンドに対する応答を待機している保留リクエストの数。
|
|
|
GWWSのアウトバウンドに対する応答を待機している保留リクエストの数。
|
トランザクション・モニタリング・プラグイン・ルーチン
Oracle TSAM Plusは、XAトランザクション内の重要なルーチンの呼出しもトレースします。スコープには、
tpbegin、
tpcommit、
tpabort、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
トランザクション・モニタリング・プラグイン・ルーチン・メトリック
|
|
|
|
|
XAトランザクションのルーチン名、例えば、「tpbegin」、「xa_commit」などを示します。
|
|
|
|
|
|
|
|
|
リソース・マネージャ・インスタンスID。xa_xxx呼出しにのみ適用されます。
|
|
|
現在のトランザクションのグローバル・トランザクションIDを示します。
|
|
|
親トランザクションのGTRIDを示します。それがネットワークのサブオーディネータである場合は、GWTDOMAINにのみ適用されます。
|
|
|
現在のプロセスが処理される場所を示します。これは、呼出しパス・モニタリングと同義です。
|
注意:
|
プラグインは、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を示し、ソース・コード内で指定された値と一貫性を持たせる必要があります。
|
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」シーケンスを使用して呼出しシーケンスを変更する必要があります。
|
「
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を変更しないでください。これは、アプリケーション・メッセージの読取り専用インターセプトです。変更すると、予測しない動作につながる場合があります。
|