6.17.1 UAPへのAPIの組み込み
モニタモードのプログラム管理機能を使用してUAPを監視する場合,HAモニタが提供するAPIをUAPから発行するために,UAPのソースコードを編集する必要があります。ここでは,UAPへのAPIの組み込みについて説明します。
(1) APIを組み込めるUAP
次に示すすべての項目に該当するUAPでAPIを使用できます。
-
C言語(ANSI C)でプログラミングされている。
-
HAモニタが提供するAPIで使用する,次の関数名称,領域名称を使用していない。
-
hamon_patrolstart
-
hamon_patrolstop
-
hamon_upapi_env
-
hamon_upapi_inf
-
-
HAモニタが提供するAPIで使用する,次の環境変数を使用していない。
-
HAMON_UAPNAME
-
HAMON_API_PATROL
-
-
UAP内にプロセスの全ファイルディスクリプタを解放する処理がない。
APIを発行すると,APIはUNIXドメイン通信でHAモニタと接続し,ファイルディスクリプタを一つ保持します。このため,UAP内にプロセスの全ファイルディスクリプタを解放する処理がある場合は,APIを使用できません。
-
HAモニタ以外の製品に監視されていない。
例えば,OpenTP1のSPPなどからはAPIを発行できません。
-
APIがスレッドを一つ生成し,APIの引数に指定したシグナルの送受信をスレッドで実行するため,次に示すすべての条件を満たしている。
-
スレッドを生成できる。
-
シグナルを使用できる。
-
APIで使用するためのシグナルが一つ以上ある。また,該当するシグナルについては,シグナルハンドラが未設定で,かつブロックされていない。
-
システムコールがシグナルの割り込みでリターン(エラー番号:EINTR)した場合を想定して,UAPが作成されている。
例えば,割り込みからリターンしたあとに,システムコール(sleep,usleep,およびnanosleep)が残り時間でリトライする,システムコール(readおよびwrite)が処理リトライする,などがシグナルの割り込みでリターン(エラー番号:EINTR)した場合に該当します。
-
(2) HAモニタが提供するファイル
HAモニタでは,UAPがAPIを発行するために次のファイルを提供します。
名称 |
ファイルの格納パス |
説明 |
---|---|---|
ヘッダファイル |
/opt/hitachi/HAmon/api/include/HA_mon_uap.h |
APIを使用するために必要なヘッダファイルです。 |
APIのオブジェクトファイル |
/opt/hitachi/HAmon/api/lib/hamon_api32.a |
APIを使用するためにUAPに静的にリンクが必要なオブジェクトファイルです。32ビット環境で動作するUAP用です。 |
/opt/hitachi/HAmon/api/lib/hamon_api64.a |
APIを使用するためにUAPに静的にリンクが必要なオブジェクトファイルです。64ビット環境で動作するUAP用です。 |
|
APIの共有ライブラリファイル※ |
/opt/hitachi/HAmon/api/lib/hamon_api32.so |
UAPの実行時に動的に使用するAPIライブラリファイルです。32ビット環境で動作するUAP用です。 |
/opt/hitachi/HAmon/api/lib/hamon_api64.so |
UAPの実行時に動的に使用するAPIライブラリファイルです。64ビット環境で動作するUAP用です。 |
- 注※
-
UAP実行時にAPIのオブジェクトファイルから動的にロードするライブラリです。UAPにリンケージできません。
(3) UAPの作成
C言語を使用してUAPを作成します。UAPには,HAモニタが提供するAPIを記述します。
また,UAPのスローダウン時に実行するシェルで解析できるように,システムコールやSQLなどの関数の発行前後にトレース情報を取得する処理を記述してください。メモリ上にトレース情報を取得し,coreから解析する方法やメッセージを出力する方法が有効です。
(4) コンパイルとリンケージ
APIを記述したUAPのソースファイルは,gccコマンドでコンパイルします。
コンパイル時に必須のオプションを,次の表に示します。
オプション |
意味 |
---|---|
-o |
作成するバイナリのファイル名を指定します。 |
-I/opt/hitachi/HAmon/api/include |
ヘッダファイルのパスを指定します。 |
-L/opt/hitachi/HAmon/api/lib |
共有ライブラリのパスを指定します。 |
-Wl,-Bdynamic |
リンカに「動的ライブラリに対してリンクする」ことを伝えます(デフォルト値であるため,指定しなくても指定時と同じ結果になります)。 |
-ldl |
dlopen関数などのライブラリを使用します。 |
次に,コンパイル時の例について,64ビット環境と32ビット環境に分けて示します。
- 64ビット環境の例
-
- C言語で作成したUAPのソースプログラム名
-
sample.c(メイン関数)
- UAPコンパイル時のコマンドラインの例
-
gcc△-o△sample△-I/opt/hitachi/HAmon/api/include△-L/opt/hitachi/HAmon/api/lib△sample.c△/opt/hitachi/HAmon/api/lib/hamon_api64.a△-Wl,-Bdynamic△-ldl
(凡例) △:半角スペースを示します。
- 32ビット環境の例
-
- C言語で作成したUAPのソースプログラム名
-
sample.c(メイン関数)
- UAPコンパイル時のコマンドラインの例
-
gcc△-o△sample△-I/opt/hitachi/HAmon/api/include△-L/opt/hitachi/HAmon/api/lib△sample.c△/opt/hitachi/HAmon/api/lib/hamon_api32.a△-Wl,-Bdynamic△-ldl
(凡例) △:半角スペースを示します。