プラグイン・プログラミング・ガイド

     前  次    新規ウィンドウで目次を開く    PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

Oracle TSAMエージェント・カスタム・プラグインの作成

この章では、次の項について説明します。

 


概要

Oracle Tuxedoには、組込みプラグイン・フレームワークがあるので、追加機能を簡単に使用することができます。たとえば、Oracle Tuxedoセキュリティ・メカニズムは、プラグイン・フレームワーク上に作成されます。Oracle Tuxedoでは、サービス・プロバイダとエンド・ユーザー間の契約として機能するインタフェース・セットが定義されています。ここで、「service」というのはOracle Tuxedo ATMIサービスではなく、一般的な用語です。Oracle TSAMエージェントは、Oracle Tuxedoプラグイン・フレームワークを使用して、別のデータ・レシーバを追加することもできます。

Oracle Tuxedoプラグイン・フレームワークの概念

次の項では、Oracle Tuxedoプラグイン・フレームワークの主な概念を示します。

インタフェース

インタフェースは、プラグイン実装およびプラグインの呼出し側の間の契約フォーマットです。インタフェースには、以下の属性を存在する必要があります。

実装

プラグインは、Cコードを使用して書かれたダイナミック・ライブラリです。ライブラリには、インタフェースで指定されるメソッドが実装されます。Oracle Tuxedoプラグイン・フレームワークは、1つのインタフェースに対して複数の実装(インターセプタ)をサポートしています。

Oracle Tuxedoは、ファンアウト・インターセプタおよびスタック・インターセプタの2つのタイプをサポートしています。Oracle TSAMエージェントでは、ファンアウト・インターセプタが使用されます。図3-1は、Oracle TSAMエージェント・プラグインのアーキテクチャを示します。

図 3-1 Oracle TSAMエージェント・プラグインのアーキテクチャ

Oracle TSAMエージェント・プラグインのアーキテクチャ

Oracle Tuxedoのインフラストラクチャは、プラグインAメソッドXを呼び出します。プラグインAは、次に示すように、「InterceptionSeq」属性で指定された順にインターセプトするプラグインのメソッドXを呼び出します。

インターセプタに使用されるプラグインは、すべて同じインタフェースを実装します。インターセプトのシーケンスには、同じプラグインの複数のオカレンスをもつことはできません。

Oracle TSAMエージェントは、ファンアウト・プラグインを提供します。ファンアウト・プラグインを使用すると、インターセプタ・プラグインを書く/作成することができます。

プラグインの登録/登録解除/編集

いったんプラグインが書かれると、機能するコンポーネントがプラグインを検索して、該当するメソッドを呼出しできるようにOracle Tuxedoのレジストリに登録する必要があります。Oracle Tuxedoでは、特にプラグインを使用するために次の3つのコマンドが提供されています。

 


Oracle TSAMエージェント・プラグインの開発

Oracle TSAMエージェント・プラグインの呼出しは、モニタリング・ポイントから始まります。Oracle TSAMエージェントは、メトリックを収集および計算し、プラグインへ渡される引数を構成します。Oracle TSAMエージェントの ファンアウト・プラグインは、登録シーケンスによって、インターセプタ・プラグインを呼び出します。

Oracle TSAMカスタム・プラグインの開発の単純な例がガイドラインとして提供されています。システム環境は、Solaris on Sparcです。機能は基本的なもので、メトリックのバッファを印刷するたけです。このプラグインは、Oracle TSAMエージェントのデフォルト・プラグインと一緒に機能します。

  1. プラグインのソース・コードの作成
  2. プラグインの構築
  3. プラグインの登録
  4. Oracle TSAMのモニタリングの有効化
  5. 呼出しの実行および標準出力の確認

プラグインのソース・コードの作成

リスト3-1は、Oracle TSAMプラグインcustomplugin.c.の例を示します。

リスト3-1 Oracle TSAMエージェント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. スクリプトを実行します。
  4. sh ./reg.sh
  5. 「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のモニタリングの有効化

Oracle TSAMコンソールで適切なモニタリング・ポリシーを定義することによって、Oracle TSAMモニタリングを有効化します。

詳細は、Oracle TSAM管理者ガイドおよびOracle TSAMユーザーズ・ガイドを参照してください。

呼出しの実行および標準出力の確認

メトリックは収集され、印刷されます。

リスト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エージェント・プラグインのインタフェース

Oracle TSAMプラグイン・インタフェースのすべての内容が「$TUXDIR/include/e_perf_mon.h」ファイルに定義されます。Oracle TSAMプラグインをビルドする場合は、このファイルをプラグインのソース・コードにインクルードする必要があります。

. 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フレームワークおよびプラグインのコア・データ構造を表示します。

リスト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-1に、MONITORCTLメンバーを示します。

表3-1 MONITORCTLメンバー
メンバー
説明
monitoring_policy
内部使用のみ
corr_id
プラグインの相関識別子をTSAMフレームワークで使用することができます。
ulen
アプリケーション・バッファのデータの長さを示します。
udata
アプリケーション・バッファを示します。これは型付きバッファで、呼出しモニタリングおよびサービス・モニタリングのみに利用可能です。tptypes(5)を使用すると、タイプおよびサブタイプを確認することができます。
mon_flag
要求と変更を示すためにTSAMフレームワークおよびプラグインの両方が設定したフラグを示します。

表3-2に、MONITORCTL配列サイズの定義を示します。表3-3に、mon_flagの値を示します。

表3-2 MONITORCTL配列サイズ定義
配列
サイズの説明
/* fieldsmapのサイズ*/
#define MAXMAPSIZE 128
/* monitoring_policyのサイズ*/
#define MAXPOLICYLEN 128
/* corr_idのサイズ*/
#define MAXCORRIDLEN 256

表3-3 mon_flagの値
メンバー
説明
#define PI_CORRID_REQUIRED 0x00000001
PI_CORRID_REQUIREDは、呼出しパスのモニタリングを開始するときにTSAMフレームワークによって設定されます。つまり、プラグインが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はトランザクション・モニタリング用に使用されます。各メソッドは、該当するモニタリング・タイプのモニタリング・ポイントから呼び出されます。メソッドの引数は、次のとおりです。

その他のヘルプ・ヘッダー・ファイル

 


Oracle TSAMエージェント・プラグインの実装

Oracle TSAMエージェント・プラグインを実装するには、次の手順に従います。

  1. 「perf_mon_1」の「e_perf_mon.h」関数表への定義
  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プラグインに対しては、リスト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プラグインの記述方法に焦点を当てます。

警告: Oracle Tuxedo ATMIの呼出し(FML32オペレーションのtpalloc/tprealloc/tpfreeおよびtptypesを除く)をプラグインで行わないでください。そうするとOracle Tuxedoコンテキストが損なわれる可能性があり、予期しない動作につながる場合があります。

呼出しパス・モニタリング・プラグイン・ルーチン

呼出しパス・モニタリング・プラグイン・ルーチンは、モニタリング・ポイントから呼び出されます。詳細については、「Oracle TSAMエージェント・データ収集フレームワーク」を参照してください。

基本実装

この例では、ルーチンは渡された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アプリケーションのインターセプタです。記録および分析のために複数のメトリックを提供します。

リスト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」ルーチンを使用することをお薦めします。

表3-5に、TA_MONMSGTYPEの値を示します。

表3-5 TA_MONMSGTYPEの値
説明
ARQ
リクエスト・メッセージ
ARP
応答メッセージ

注意: 一部のプロセスでは、すべてのメトリックを利用できるとは限りません。たとえばクライアント・プロセスの場合、TA_SRVIDは利用できません。
よく使用されるメトリックの確認

モニタリングの段階でメッセージ・タイプとプロセスの場所について必要な情報を取得したら、次の段階はよく使用されるメトリックがFML32バッファでも実行されたかどうか確認することです。メトリックが利用可能かどうかは、前述の条件によります。

表3-7に、一般に使用されるメトリックを示します。

表3-7 一般に使用されるメトリック
フィールド名
説明
ステージ
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フレームワークは、呼出しパスの情報を伝達するためにクライアントのipアドレスおよびポート番号を追加します。書式は、//ip address:portです。
すべて
TA_MONDEPTH
short
呼出しパスの深さを示します。1つのサービスから別のサービスにホップすると、深さが1段階増加されたと見なされます。イニシエータでの開始値は0です。詳細については、『TSAMユーザー・ガイド』を参照してください。
すべて
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

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

呼出しパス相関識別子の生成

モニタリングの起動時にプラグインで相関識別子を指定する必要があります。TA_MONSTAGE値は「STMO」です。Oracle TSAMフレームワークは、PI_CORRID_REQUIREDMONITORCTL mon_flagに設定します。相関識別子を指定しない場合、エラーが報告されます。Oracle TSAMのデフォルトのプラグインでは、相関識別子が提供されます。次の2つのシナリオを考慮する必要があります。

mygetid()」は、想定される識別子の生成ルーチンを示します。新しい識別子の長さは、MONITORCTLのcorr_idのサイズを超えることはできません。

識別子を作成するには、カスタム・プラグインでOracle TSAMフレームワーク・サービスを使用して相関識別子を取得することができます。リスト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フレームワークの相関ID生成ルーチンを使用する場合、libtsamがプラグインにリンクされている必要があります。

サービス・モニタリング・プラグイン・ルーチン

サービスのモニタリング手順は単純です。サービス・ルーチンの呼出しの前後にデータが収集されます。リクエストが実行されるときにプラグインが呼び出され、クライアントに応答が返信されます。

基本実装

この例では、ルーチンは渡されたFML32バッファを出力します。

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

.

よく使用されるメトリックの確認

表3-8に、サービス・モニタリング・プラグイン・ルーチン・メトリックを示します。

表3-8 サービス・モニタリング・プラグイン・ルーチン・メトリック
フィールド名
説明
TA_MONMSGWAITTIME
long
リクエスト・メッセージが実行される前に、サーバーのリクエストIPCキュー内で待機する時間を示します。
単位はミリ秒です。待ち時間は、次の2つのシナリオで計算されます。
  • Oracle Tuxedo 11gR1以上は、リクエスト送信者です。
  • 待ち時間は、このサービスに対するトランスポートの最後のタイム・スタンプを考慮して計算されます。待ち時間は正確に実行されます。

  • Oracle Tuxedo 11gR1以下は、リリースの送信者です。
  • 待ち時間は、キューの平均的長さ、最後にサービスが実行された時間、およびディスパッチ・スレッド数に基づいて計算されます。これは、大まかな値です。この値は同様のサービスを提供し、実行時間が一定のサーバーにのみ適用されます。

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フレームワークを使用して計算されます。プラグインを使用して現在の時間、および最終タイム・スタンプを取得することもできます。
TA_MONCPUTIME
long
現在のサービス実行に使用されるCPU時間。単位はミリ秒です。
TA_MONSVCNAME
文字列
サービス名を示します。
TA_MONLOCATION
文字列
現在のプロセスが処理される場所を示します。これは、呼出しパス・モニタリングと同義です。

システム・サーバー・モニタリング・プラグイン・ルーチン

Oracle TSAMは、いくつかのタイプのOracle Tuxedoシステム・サーバー・モニタリング(GWTDOMAIN、BRIDGEおよびGWWS)をサポートしています。モニタリングは、スループット、未処理リクエスト数、およびネットワークのキューに登録されているメッセージ数を対象としています。プラグインは、Oracle TSAMフレームワークによって定期的に呼び出されます。間隔は、モニタリング・ポリシーにより指定されます。実行中のサーバーの操作中にデータが収集されます。

基本実装

この例では、ルーチンは渡されたFML32バッファを出力します。

static TM32I _TMDLLENTRY print_sys(perf_mon_1 * ip,FBFR32 **buf, MONITORCTL * monctl, TM32U flags)
{
       Fprint32(*buf);
       return(0);
}
よく使用されるメトリックの確認

表3-9に、システム・サーバー・モニタリング・プラグイン・ルーチン・メトリックを示します。

表3-9 システム・サーバー・モニタリング・プラグイン・ルーチン・メトリック
フィールド名
説明
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は、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-10 トランザクション・モニタリング・プラグイン・ルーチンのメトリック
フィールド名
説明
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では、Oracle TSAMフレームワークを使用してプラグインが呼び出されます。

リスト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へのカスタム実装登録
    1. -p」オプションは実装IDを示し、ソース・コード内で指定された値と一貫性を持たせる必要があります。
    2. -v」はバージョン番号を示します。
    3. -f」は、ダイナミック・ライブラリのパスを示します。
    4. -e」は、「General Steps」項に記載される「entry」ルーチンを示します。
  2. epifregedt」コマンドを使用したファンアウト・プラグインの「InterceptionSeq」属性変更
  3. Oracle TSAMは、ファンアウト・プラグイン・メカニズムをサポートしています。これにより、複数のプラグインを同時に操作することができます。Oracle TSAMエージェントには、ファンアウト・プラグインおよびデフォルト・インターセプタ・プラグインが備わっています。カスタム・プラグインは追加インターセプタ・プラグインです。

    「-a InterceptionSeq=xxx」オプションを使用すると、ファンアウト・プラグインは、指定した順番でインターセプタ・プラグインを呼び出すことを示します。「xxx」は 実装IDです。この例では、Oracle Tuxedoのデフォルト・インターセプタ・プラグイン実装IDである「bea/performance/monshm」が、カスタム・プラグイン実装IDである「abc/tuxedo/tsam」の前に呼び出されます。

  4. 複数のカスタム・プラグインを開発した場合は、最初にそれらを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エージェント・プラグインの開発/デプロイメントに関する注意


  先頭に戻る       前  次