...

共通イベント・インフラストラクチャー (CEI) 1 WebSphere ESBアナウンスメントWorkshop

by user

on
Category: Documents
18

views

Report

Comments

Transcript

共通イベント・インフラストラクチャー (CEI) 1 WebSphere ESBアナウンスメントWorkshop
WebSphere ESBアナウンスメントWorkshop
共通イベント・インフラストラクチャー
(CEI)
Copyright IBM Japan Co.,Ltd 2006
1
目次
‰
WESBのCEI概要
‰
CEIの前提
‰
イベント・ソースの開発
‰
イベント・サーバの構築
‰
イベント・コンシューマの利用と開発
‰
まとめ
2
Disclaimer
‰
当資料で提供する技術情報は、各製品の出荷前コードに基づくものを含
みます。
‰
この資料は日本アイ・ビー・エム株式会社ならびに
日本アイ・ビー・エム システムズ・エンジニアリング株式会社の正式なレ
ビューを受けておりません
‰
当資料は、資料内で説明されている製品の使用を保証するものではあり
ません。
‰
資料の内容には正確を期するよう注意しておりますが、この資料の内容
は2006年3月現在の情報であり、製品の新しいリリース、PTFなどによっ
て動作、仕様が変わる可能性があるのでご注意下さい。
‰
今後国内で提供されるリリース情報は、対応する発表レターなどでご確
認ください。
3
WESBのCEI概要
4
WESBのCEI
WebSphere Process Server
Service
Components
Supporting
Services
Business
Business
Processes
Processes
Interface
Maps
Human
Human
Tasks
Tasks
Business
Business
State
State
Machines
Machines
Business
Object Maps
Business
Business
Rules
Rules and
and
Selectors
Selectors
Relationships
WebSphere ESB
Mediations
Mediations
SOA Core
Service
Component
Architecture (SCA)
Business
Objects
Common Event
Infrastructure
WebSphere
WebSphere Application
Application Server
Server
Network
Network Deployment
Deployment
共通イベント・インフラストラクチャー(CEI)は、WebSphere ESB(WESB)で提供される重要な機能
のひとつです。WESBで稼動するサービスやコンポーネントは全て、CEIを使用できます。このセッ
ションでは、CEIをご紹介いたします。
5
CEIの目的
今まで各ノードでアプリケーション・ログに出力していた情報を、「イベ
ント」と定義して取り扱い、一元管理する
サービス・ log
プロバイダー1
サービス・ log
リクエスター1
サービス・ log
リクエスター2
サービス・
log
リクエスターN
サービス・
リクエスター1
WESB
log
log
WESB
サービス・
log
プロバイダーN
サービス・
プロバイダー1
サービス・
プロバイダー2
サービス・
リクエスター2
サービス・
リクエスターN
サービス・ log
プロバイダー2
log
log loglog
アプリログのフォーマット
が全て違う!
どこでエラーが発生してい
るか?
どこがボトルネックとなっ
ているか?
どのサービスが何回よばれ
たか?
どのフローを改善すべき
か?
サービス・
プロバイダーN
今までログとして各ノー
ドに出力していた情報を、
「イベント」として一括
管理!
WESBは、サービス・リクエスターとサービス・プロバイダーを仲介して、容易に連携して
くれる製品です。WESB上で稼動するSCAコンポーネントに対するエクスポート/イン
ポートも汎用的であるため、様々な種類のサービス・リクエスターとサービス・プロバイ
ダーを連携することができます。
サービスの利用者となるエンドユーザは、サービスが呼ばれている場所やサービスの種
類など全く意識する必要がありません。しかし、運用管理者から見た場合はどうでしょう
か。
例えば、エンドユーザに対してエラーが返っているとします。WESBを跨って連携するコ
ンポーネントは、それぞれの存在するノード上にファイルでログを出力します。運用管理
者は分散されたログファイルを集めて、各ログファイルを照らし合わせ、どこでエラーが
起きているかを判断する必要があります。ログファイルがサービス毎に異なったフォー
マットで出力されていれば、ログファイルを読む知識も必要です。
またはログファイルを収集、解析する仕組みを作りこむ場合も、汎用性やワークロードを
考慮する必要があります。
CEIは、ログフォーマットを統一して情報を一元管理することで、これらの問題点を解消
するだけでなく、アプリケーションログから出力される情報を、より有効活用していくことを
目的としています。
6
CEIのメリット
‰
CBE(後述)でログフォーマットを統一し、ログ管理や問題判別の効率が
向上する
€
‰
個々のログファイルに分散して出力していたイベント(ログ情報)を、CEI
で一元管理できる
€
‰
個々のログ解析ツールやログファイルに対する知識が必要なくなる
WESB上のあらゆるコンポーネントから発生するログ、イベントを収集すること
ができる
CEIで一元管理されたイベントは、DBに永続化され、情報を関連付けて
把握することができる
€
アプリケーションログを収集管理するインフラが提供されるため、各プロジェ
クトごとに作りこむ必要が無くなる
‰
イベント・ソースやイベント・コンシューマーを作成するためのAPIが用意
されているため、ユーザアプリケーションに組み込むことが可能となる
‰
DBに格納されたイベントを簡単に閲覧できるツールが用意されている
CEIの利点は上記のようにまとめられます。
ログファイルに共通フォーマットがなければ、各ログファイルに対する知識が必要であっ
たり、個々のログ解析ツールの知識が必要になるので、運用管理者にはそれだけの
ワークロードがかかります。ログフォーマットをCBEという形式に統一することで、そのよう
な負荷が軽減されるでしょう。
また、現在ログファイルはそれぞれのノードにファイル形式で出力されています。今まで
はログファイルを収集して保管する仕組みを作る必要がありましたが、CEIではログ情報
をイベントという形で一括管理し、イベントの収集/保管/利用の仕組みを提供します。
CEIで一括管理されたイベントは全てCBE形式で保管されているため、用途に応じて、
関連付けたりカスタマイズして分析に役立てることが容易になります。
イベントを出力する方法(イベント・ソース)や、イベントを取得して活用する方法(イベン
ト・コンシューマ)もAPIが用意されているので、自由に作りこむことができます。
また、一括管理されたイベントを簡単にモニターできるツール(CBEブラウザー)も用意
されています。
7
CEIの概要
WESB
イベント・ソース
イベント・サーバー
ユーザ
アプリケーション
CEIサーバーの設定により、
データストアへイベント
イベント・
を書き込んだり、PTPまた
コンシューマー
はPub/Subでイベントを
配布することも可能
ユーザ
アプリケーション
エミッター
(同期)
EJB
キュー
または
CEIサーバー
エミッター
(非同期)
MDB
モニタリング
ツール
トピック
キュー
ユーザアプリはエ
ミッターに対して
イベントを送信
CBEのExtended Data
(ユーザ独自のイベント
情報)はイベントカタロ
グに定義しておき、あと
から参照も可能
エミッターは同期または非
同期でCEIサーバーへイベン
トを送信(イベントのフィ
ルタリングも可能)
イベント
カタログ
イベント
定義
ユーザアプリまたはモニタ
リングツールを用い、CEI
サーバーから配布されたイ
ベントを受信したり、後か
らイベントを検索したりす
ることが可能
イベント
データベース
イベント
イベント(CBE)の動き
イベントの検索
上図は、CEIの概要を示しています。
イベント・ソースは、イベントを生成し、エミッターを経由してイベント・サーバーへイベント
を送信します。イベントの送信方法には、直接的にEJBコールして送信する方法(同期)
と、間接的にJMSを通して送信する方法(非同期)を選択できます。
イベント・サーバーは、イベント・ソースから送信されるイベントを収集して一元管理しま
す。イベント・サーバーは、イベントをデータベースに保管したり、イベントをモニタリング
しているアプリケーション(イベント・コンシューマー)へ、イベントを配布します。データ
ベースへの保管や、イベント・コンシューマーへのイベント配布は、設定で容易に選択
できます。
また、送信されたイベントをフィルタリングすることで、イベントのトラフィックを軽減させる
こともできます。
イベント・コンシューマーは、イベント・サーバーやイベント・データベースで管理されて
いるイベントを取得し利用するコンポーネントであり、問題判別やパフォーマンス情報の
把握などに役立てることができます。
イベント・データベースは、イベントを保管するデータベースです。
イベント・カタログは、イベント定義をデータベースに保管する機能です。
8
CEI(共通イベント・インフラストラクチャー)とは
‰
共通イベント・インフラストラクチャー
€
€
‰
CEI:Common Event Infrastructure
アプリケーションに対してイベント管理サービス(イベントの生成/永続化/配布/検索な
ど)を提供し、複数の分散された異なるイベントを連携させる技術
CEIの基本コンポーネント
€
イベント・ソース
„
„
„
€
エミッター
„
„
€
イベントの伝達の詳細を扱うコンポーネント
イベントサーバーのロケーション、イベントのフィルタリング、伝達のメカニズム(同期or非同期)を設定
イベント・サーバー
„
„
€
イベントを生成するアプリケーション
監視対象のリソースに関するイベントを生成するアダプターやモニター
他のソースからイベントを転送するアプリケーション
イベントを管理するサーバー
イベントの配布、イベント・データストアへのアクセスを実装
イベント・コンシューマー
„
„
イベント・サーバーからイベントを受け取るアプリケーション
非同期にイベント通知の受信や、イベント・データストアから過去のイベントデータの検索を行う
€
イベント・データベース
€
イベント・カタログ
„
„
イベントを格納するリポジトリー
イベントのメタデータ(CBEのExtended Dataの定義)を格納するリポジトリー
前述のとおり、CEIは、アプリケーションが従来ファイルに出力していたログ情報をイベン
トという形で一元管理するための新しい仕組みです。
アプリケーションから出力されるイベントを管理するための、イベント生成方法、永続化
や配布などの仕組みを提供しています。
従来ログに出力していたアプリケーションに関連する情報などがイベントとして管理され
ます。
CEIを構成するコンポーネントには、上記のようなものがあります。
9
CEIの前提
10
コモン・ベース・イベント(CBE)
‰
Common Base Event(CBE)
¾
¾
¾
‰
異なるソフトウェアやアプリケーションに対して、統一されたログ・フォーマット
(XML形式)を提供
CISCOとIBM中心に仕様を定め、OASIS(標準化団体)へ提出(2003年)
CEIで扱われるイベントは、CBEで表される
3-tuple(CBEのフォーマットに必要な3要素)
¾
¾
¾
起動/停止/接続…などの「状況」を、製品やプラットフォーム
Situation
やアプリケーションの区別なく共通のフォーマットで表現する
「状況」
Reporting component (Observing component)
Situationを報告するコンポーネント
Affected component (Experiencing / Impacted component )
Situationに影響されるコンポーネント
影響範囲が分かる
‰
Extended Data(拡張データ・エレメント)
¾
CBEの3-tuple に当てはまらないユーザデータは、Extended Dataに格納すること
が可能
¾
¾
¾
3-tupleのひとつであるメッセージ(msg)に格納できるデータは、1024文字という制限がある
ユーザアプリケーションの要件によっては、3-tupleにどうしてもあてはまらない場合がある
Extended Dataに、ユーザが独自のログ情報の属性が定義可能
CEIで取り扱うイベントは、イベントの構造を定義する標準のXML ベース形式である、コ
モン・ベース・イベント(CBE)を使用して表現されます。
今日の複雑なシステムでは、様々なOS/ミドルウェア/ユーザ・アプリケーションなどから
多くのログが出力されますが、それらは全て独自のフォーマットで記述されています。こ
れらのログを共通フォーマットで表示し、管理/解析/問題解決を容易に実施できるという
目的で定められた仕様がCBEです。
CBEは3-tupleと呼ばれる三つの要素を定めています。ただし、3-tupleに当てはまらな
いデータのための領域としてExtended Data(拡張データ・エレメント)を用意しています。
実際にCBEでログ設計を行う場合には、このExtended Dataの設計が重要となるでしょ
う。
11
CBEの出力例
<CommonBaseEvent creationTime="2005-06-08T05:25:08.660Z" globalInstanceId="F3A7B8FB7B42173DADDB1260D7DD11D9"
sequenceNumber="0" severity="10" version="1.0.1">
<extendedDataElements name="level" type="noValue">
<children name="name" type="string">
<values>INFO</values>
</children>
<children name="value" type="int">
<values>800</values>
</children>
Extended Data
</extendedDataElements>
<extendedDataElements name="sequenceNumber" type="long">
<values>396</values>
</extendedDataElements>
<extendedDataElements name="threadID" type="int">
<values>67</values>
</extendedDataElements>
<extendedDataElements name="loggerName" type="string">
<values>test.EventGenServlet</values>
</extendedDataElements>
<sourceComponentId application="Test" component="EventGenClass" componentIdType="Application" executionEnvironment="Java"
location="9.170.233.104" locationType="IPV4" subComponent="doPost" threadId="WebContainer : 3" componentType="Web_Application"/>
<msgDataElement msgLocale="ja-JP">
<msgCatalogTokens value="TestClass"/>
Reporting Component
Situation
<msgId>ABCD0001A</msgId>
<msgIdType>IBM4.4.1</msgIdType>
<msgCatalogId>CLASS_STARTED_SUCCESSFULLY_MSG</msgCatalogId>
<msgCatalogType>Java</msgCatalogType>
<msgCatalog>TestClassCatalog</msgCatalog>
</msgDataElement>
<situation categoryName="StartSituation">
<situationType xsi:type="StartSituation" reasoningScope="INTERNAL" successDisposition="SUCCESSFUL"
situationQualifier="START COMPLETED"/>
</situation>
</CommonBaseEvent>
CBEの出力例です。
最初に、creationTime(イベント発生時刻)、globalInstanceId(一意のID)、version
(CBEのバージョン)などが定義されています。
次に、Extended Dataはユーザ独自のフォーマットで表された領域です。
sourceComponentIdは、Reporting Component(このイベントを発生させたコンポーネ
ント)を表しています。
msgDataElementは、どのようにこのイベントのメッセージテキストが作成されて解釈さ
れたかを表すエリアであり、Localeなどが指定されています。
最後に、Situationです。「開始した」という状況「Situation」でも “Component ‘x’
started” や “Change server state from starting to running” などアプリ毎に異なるメッ
セージで表記されると解析し難くなってしまいますが、CBEでは「StartSituation」という
統一された表記にまとめることができます。
12
イベント・ソースの開発
13
イベント・ソースの開発
‰
イベント・ソース
€
‰
イベントを出力するアプリケーション
イベント・ソースの開発方法
€
SCAモジュール(メディエーション・モジュール)のイベント出力
„
€
WEDのツールを使用
ユーザ・アプリケーションからのイベント出力
„
コーディング
イベント・サーバー
イベント・ソース
SCA
モジュール
イベント
バスMDB
同期
CBE
エミッター
CBE
CBE
その他の
アプリケーション
非同期
イベント
バスSLSB
CBE
エミッター
CBE
データ
ストアBean
CBE
イベント
データベース
まず、アプリケーションからイベントを出力する方法について解説します。
イベントを出力するアプリケーションをイベント・ソースと呼びます。
イベント・ソースの開発には主に2種類あります。
①SCAモジュールの場合は、イベントを出力させるためのツールが、WIDで用意されて
います。
②その他の通常のユーザ・アプリケーションからは、APIを使用して自由にコーディング
できます。
14
SCAモジュールのイベント出力
‰
WID上でSCAを開発する場合は、イベントを出力させるツールが用意さ
れているので、チェックを入れるだけでイベント出力の指定が可能
イベント出力を使用可能にす
るとイベント・モニター・シ
ンボルが付与される
イベント・モニター・
ビューでイベント出力を
設定する
SCAモジュールをWIDで開発する場合は、イベントの出力の有無をチェックするだけで
指定できる「イベント・モニター」というツールが用意されています。
上記は、WIDのイベント・モニターの例です。
詳細は下記リンクをご参照下さい。
・WebSphere Integration Developer におけるイベント・モニターの使用可能化
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/topic/com.ibm.wbit.hel
p.cei.ui.doc/topics/tstrtmon.html
15
SCAモジュールのイベント出力
‰
イベント・モニター
€
€
WIDで提供されているイベントを生成/モニターするためのツール
アセンブリーエディターの「プロパティー」ビューから、開くことが可能
„
„
‰
イベント出力指定が可能なコンポーネント
€
SCAのインターフェース操作(インターフェースの要求応答操作(オペレー
ション))
€
メディエーション・フローのインターフェース操作も可
„
„
„
‰
エントリー/エグジット/失敗のイベントを出力可能
イベント・モニターは、メディエーションフロー・エディターから開くことができないため、アセン
ブリー・エディターから開く
カスタム・メディエーションでコーディングすることも可能(後述)
イベント・モニターを使用可能にすると
€
€
アセンブリー・エディターにイベント・モニター・シンボル
.monファイルが生成される
„
‰
アセンブリー・エディターで対象となるコンポーネントを選択
「プロパティー」ビュー → 「詳細」 → 「イベント・モニター」
が付く
.monファイルは、アプリケーションのデプロイ後は変更できないため、WIDでイベント・モニ
ターに関する変更があった場合は、再デプロイが必要
WIDのWESBテスト環境でもCBEブラウザー(後述)が使用可能
上記のように、イベント・モニターは、アセンブリー・エディターから開くことができます。
WESBで稼動するSCAモジュールを開発する場合は、このアセンブリー・エディターを
使用します。
その他、以下のエディターから、イベントモニターを開くことは可能です。以下のエディ
ターはWPSに関連するエディターです。
ビジネス・プロセス・エディター
ビジネス状態マシン・エディター
ビジネス・オブジェクト・マッピング・エディター
ビジネス・ルール・グループ・エディター
インターフェース・マッピング・エディター
人的タスク・エディター
セレクター・エディター
16
ユーザ・アプリケーションからのイベント出力
‰
イベントの出力をユーザーコーディングすることが可能
① CBEのイベントを生成
„
„
Common Base Event API(Hyades APIとも呼ばれる)を使用
Common Base Event APIはWASに同梱されている
② エミッターにイベントを送信
„
„
エミッターのAPIを使用するためにはevents-client.jarをパスが通るエリアに配置する
events-client.jarはWESBで提供されている
z
„
<WESBインストールルート>¥CEI¥clientディレクトリに格納
イベント・ソース開発者は、イベント・サーバーの場所やエミッターの設定を気にする必要が
無い
ユーザー・アプリケーション(イベント・ソース)
ユーザー定義のロガークラス
メソッド定義
ビジネスロジック
クラス
メソッド
使用
ロガー使用方法は
変更なし!
メソッド
使用
CBE APIを使用し
CBEにフォーマット
CBE
API
Emitter
API
イベントを
イベント
サーバーへ
送信
エミッターのAPIを使用して
イベントを送信
(events-client.jarが必要)
SCAモジュール以外のユーザ・アプリケーションの部分では、コーディングでアプリケー
ションからイベントを出力することができます。
最初に、CBE APIを使用してCBEのイベントオブジェクトを生成します。CBEのライブラ
リーはWASに同梱されています。
次に、エミッター用APIを使用してエミッターオブジェクトを取得し、CBEオブジェクトを送
信します。エミッター用のAPIはWESBで提供されています。
上図のように、通常、ユーザ・アプリケーションではロガークラスを用意して、ビジネスロ
ジッククラスはロガーで提供されたメソッドを使用することでログを出力します。エミッター
経由でイベントを出力する場合も、ロガークラスの実装だけをCBEとエミッターのAPIを
使用するように変更すれば、ビジネスロジッククラスからの使用方法に影響を与えません。
17
ユーザ・アプリケーションからのイベント出力
①CBEのイベントを生成 -1‰
CBEのAPIを使用してイベントを生成するサンプル
・・・省略
CBE APIのパッケージ
import org.eclipse.hyades.logging.events.cbe.*;
・・・省略
EventFactory eventFactory = (EventFactory) EventFactoryFactory.createEventFactory();
CommonBaseEvent event = eventFactory.createCommonBaseEvent();
try {
event.setVersion(“1.0.1”); // CBEのバージョン
event.setExtensionName("CEI Test User Application (Event Source)");
event.setPriority(new Integer(priority).shortValue());
event.setMsg(msg);
event.setCreationTimeAsLong(System.currentTimeMillis()); // creationTimeの設定
CBEオブジェクトの
生成
CBEオブジェクトの
属性の設定
//sourceComponentId の設定
event.setSourceComponentId( "CEI Test Application", // application
"WESB V6", // component
"EventGenerator Class", // subcomponent
"http://www.ibm.com/namespaces/autonomic/WebSphereApplicationServer", // componentType
ComponentIdentification.COMPONENT_ID_TYPE_PRODUCT_NAME, // componentIdType
InetAddress.getLocalHost().toString(), // location
ComponentIdentification.LOCATION_TYPE_HOSTNAME // locationType
);
//situationオブジェクトの生成
Situation situation = eventFactory.createSituation();
//situationType の設定
situation.setAvailableSituation(
"EXTERNAL", // reasoningScope
"NOT AVAILABLE", // availabilityDisposition
"STARTABLE", // operationDisposition
"FUNCTION_PROCESS"); // processingDisposition
//situationの設定
event.setSituation(situation);
CBEオブジェクトを生成するサンプルです。上記の例は、CBEの3-tupleを設定していま
す。
18
ユーザ・アプリケーションからのイベント出力
①CBEのイベントを生成 -2‰
CBEのAPIを使用してイベントを生成するサンプルの続き
// ExtendedDataElement
ExtendedDataElement data1 = eventFactory.createExtendedDataElement();
data1.setName("MyRegularExtendedDataElement");
data1.setType(ExtendedDataElement.TYPE_STRING);
data1.setValuesAsString("ExtendedDataValue");
event.addExtendedDataElement(data1);
// ExtendedDataElement
ExtendedDataElement data2 = eventFactory.createExtendedDataElement();
data2.setName("MyEmbeddedExtendedDataElement");
data2.setType(ExtendedDataElement.TYPE_NO_VALUE);
data2.addChild("ChildElement", "ChildValue");
event.addExtendedDataElement(data2);
event.complete();
Extended Dataの
属性の設定
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (CompletionException e) {
e.printStackTrace();
}
・・・省略
CBEオブジェクトを生成するサンプルの続きです。上記は、Extended Dataを設定して
います。
19
ユーザ・アプリケーションからのイベント出力
②エミッターにイベントを送信
‰
‰
エミッターにイベントを送信するサンプル
エミッターをLookupしてイベントを送信するのみ
€
€
イベント・ソースの開発者が、イベント・サーバーの場所、フィルターの設定、イベン
トの伝送メカニズム(同期/非同期)などのエミッターの設定を気にする必要はない
エミッターの設定をオーバーライドするAPIが用意されているため、ソースの中でエ
ミッターの設定を指定することも可能
import com.ibm.events.EventsException;
import com.ibm.events.emitter.*;
try {
context = new InitialContext();
エミッターのライブラリー
エミッターの名前を指定し
てJNDI検索
EmitterFactory emitterFactory = (EmitterFactory) context.lookup("com/ibm/events/configuration/emitter/Default");
Emitter emitter = emitterFactory.getEmitter(); //エミッターの取得
//エミッターの設定を非同期モードにオーバーライド
emitter.setSynchronizationMode(SynchronizationMode.ASYNCHRONOUS);
emitter.sendEvent(event); //イベントを送信
emitter.close();
} catch (NamingException e) {
e.printStackTrace();
} catch (EventsException e) {
e.printStackTrace();
}
エミッターを取得し、イベントを送信
sendEvents()で、複数のイベントを一
括で送信し、パフォーマンス向上を図
ることも可能
エミッターオブジェクトを取得して、前頁で生成したCBEオブジェクトを送信する例です。
エミッターでイベントを送信する場合、イベント・サーバーの場所、フィルターの設定、イ
ベントの送信方法(同期/非同期など)は気にする必要はありません。
エミッターの設定は、基本的にイベント・サーバーで管理しています。ただし、デフォルト
のエミッターの設定をオーバーライドしたい場合は、APIが用意されているので可能で
す。
また、イベント・サーバーの場所も基本的に気にする必要はありません。ただし、CEI
サーバのホスト名とポート番号を明示的に指定することも可能です。稼働環境がWESB
でセルに統合されていれば、別ノードでも明示的に指定する必要はありません。
http://www-1.ibm.com/support/docview.wss?uid=swg21218608
20
イベント・サーバの構築
21
CEI構成の全体像
イベントの流れ
リクエストの流れ
イベント検索・取得の流れ
セル
デプロイメント
・マネージャー
CBE
ブラウザー
ノード1
WESBサーバー
イベント
サーバー
イベント
データベース
ノード2
アプリケーション・サーバー3
J2EE
アプリケーション
(イベント・コンシューマ)
ノード3
ME
バス(CommonEventInfrastructure_Bus )
アプリケーション・サーバー1
WESBサーバー
アプリケーション・サーバー2
メディエーション・モジュール
エミッター
J2EE
アプリケーション
(サービス・リクエスター)
ノード4
エミッター
ノード5
エミッター J2EE
アプリケーション
(サービス・プロバイダー)
ノード6
WESBのセルを構築した場合、SCAモジュールとCEIを含めた全体図です。
上記のスライドの下段(ノード4~ノード6)で、サービス・リクエスター、メディエーション・
モジュール、サービス・プロバイダーが稼動しています。これらは全てイベント・ソースと
して、アプリケーション稼動時の重要なイベントをエミッター経由で送信します。
WESBのセルを構成すると、デフォルトでCEI専用のバスが構成され、エミッターが非同
期の場合は、このバスを経由してイベント・サーバーへイベントが集まります。
収集されたイベントは、イベントデータベースに永続化され、CBEブラウザーや、ユーザ
が作成したイベント・コンシューマーで検索することができます。
22
CEIの構築手順
‰
CEIを構成するためのツールが用意されている
① イベント・データストアを構築する場合はDBサーバを用意する
シングルサーバー構成の場合
(スタンドアロンプロファイル作成時)
② スタンドアロンプロファイルを
作成
プロファイル作成時に、CEIとイベ
ントデータベース関連の情報を指
定する
Network Deployment環境の場合
(DMプロファイル/カスタムプロファイル作成時)
② 各プロファイルを作成
③ イベントサーバー用アプリケーション
サーバー/クラスターを作成
④ イベントデータベースの構成用ツール
を実行
⑤ CEIアプリケーションの導入とリソース
の設定用ツールを実行
CEIのデフォルト構成が完了
上記は、CEIを構築するための手順を示したスライドです。
スタンドアロン・プロファイルを作成する場合、プロファイル作成ウィザードで、CEIやイベ
ント・データベースに関する情報の入力が求められます。そして、プロファイル作成時に、
自動的にCEIのデフォルト構成が完了します。
Network Deployment環境の場合は、イベントサーバー/クラスター作成後に、CEI構成
用ツールを実行することで、同様のCEI構成を構築することができます。
イベント・データベースとしてサポートしているDB(2006/03現在)
・CloudscapeV5.1.1
・DB2 Universal V8.1 / V8.2.1(Win/Linux/Unix)
・DB2 Universal OS/390 V7.1/ V8.1
・Oracle V9.1 / V10.1
23
管理コンソールからみるCEIの構成 -1Common Event Infrastructureサービス
CEI使用の有無を指定する
使用不可にするとイベン
ト・サーバーはイベントを
処理せず、イベント・デー
ターベースへの書き込みな
ども実行されない
Common Event Infrastructureエンタープライズ・アプリケーション(EventServer)
Common Event Infrastructureメッセージング・アプリケーション(EventServerMdb)
■EventServer
イベント・サーバー用のエンタープ
ライズ・アプリケーション
■EventServerMdb
イベント・サーバーへ非同期でイベ
ント送信するための、MDBのエン
タープライズ・アプリケーション
デフォルト構成は、以下のオブジェクトで構成されています。
・共通イベント・インフラストラクチャー・サービス
WebSphere サーバーにインストールされるサービス。このサービスにより、WebSphere
アプリケーションおよびクライアントで共通イベント・インフラストラクチャーが使用可能に
なります。
・共通イベント・インフラストラクチャー・エンタープライズ・アプリケーション
イベント・サーバー用のエンタープライズ・アプリケーション。エンタープライズ・アプリ
ケーションのデプロイメント記述子により、イベント・サーバーが、使用する共通イベント・
インフラストラクチャー・リソースに関連付けされます。
・共通イベント・インフラストラクチャー・メッセージング・アプリケーション
イベント・サーバーへの非同期イベント送信をサポートする、メッセージ駆動型Bean 用
のエンタープライズ・アプリケーション。このアプリケーションは、イベント・メッセージング
を構成した場合にのみ使用可能です。
24
管理コンソールからみるCEIの構成 -2Common Event Infrastructureプロバイダー
■イベント・グループ・プロファイル・リスト
イベントをグループ分けして、イベントの検索や
配布時に役立てることが可能
■フィルター・ファクトリー・プロファイル
イベントをフィルタリングすることで、重要なイベ
ントのみを選別してトラフィックを軽減させること
が可能
CEIの各コンポーネントから
使用されるJNDI名を定義
・共通イベント・インフラストラクチャー・プロバイダー
共通イベント・インフラストラクチャーのコンポーネント、イベント・ソース、およびイベント・
コンシューマーにより使用されるリソースが含まれるコレクション・オブジェクト。
追加プロパティーから、イベント・グループの指定や、フィルタリングの指定が可能です。
25
イベントのフィルタリング
‰
イベントをフィルタリングすることで、重要な
イベントのみを選別してトラフィックを軽減さ
せることが可能
€
€
€
②エミッター・ファクトリー・プロファイルに関連付け
イベントがイベント・ソースからエミッターに送
信されるたびに、エミッターは現行のフィル
ター基準に照らし合わせてイベントを検査
イベントがフィルター基準にパスした場合、エ
ミッターはイベント・サーバーにイベントを送
信
イベントがフィルター基準にパスしない場合、
エミッターによりそのイベントが廃棄される
①フィルター・ファクトリー・プロファイルでフィルター基準を作成
①で指定したフィルター・ファ
クトリー・プロファイルのJNDI
名を指定し、「フィルター処理
使用可能」にチェック
フィルターの構成をXPathで定義
Priorityが10のイベントを指定した例
イベントを収集するトラフィックを軽減させるため、必要なイベントのみを選別してイベン
ト・サーバーへ送信したい場合は、フィルターの設定を管理コンソールから指定すること
ができます。
Common Event Infrastructureプロバイダーのフィルター・ファクトリー・プロファイルで
フィルター基準を作成します。このとき、フィルタリングの基準を指定する際には、XPath
を使用します。
具体例は、下記リンクを参照下さい。
http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/topic/com.ibm.websph
ere.wesb.doc/doc/ccei_adminCBEB_eventselector.html
その後、エミッター・ファクトリー・プロファイルで、作成済みのフィルター・ファクトリー・プ
ロファイルのJNDI名を関連づけます。
26
(参考)CEIに関係するWASの設定箇所
参照
イベント・
ソース
Lookup!
エミッター
イベント
データベース
イベント・サーバー
イベント・サーバー用アプリ
EventServerMdb
アプリケーション
eventデータソース
Event_DB2_
JDBC_Provider
EventServer
アプリケーション
event_catalogデータソース
JDBCプロバイダー
リスナー
バインディング
同期
エミッターファクトリー
プロファイル
非同期
同期/非同期や
フィルタリン
グの指定
キュー接続ファクトリー
CEI_QueueCF
イベントバス伝送
プロファイル
JMS伝送
プロファイル
イベントサーバー
プロファイル
CommonEventInfrastructureプロバイダー
キュー宛先
CEI_Queue
トピック宛先
CEI_AllEventsTopic
JMS活動化仕様
CEI_ActivationSpecs
データストア
プロファイル
イベントDBの
DataSourceを
指定
トピック接続
ファクトリー
CEI_AllEvents
TopicCF
JMSプロバイダー
ME
CEIQueueDestination
CEITopicDestination
バス(CommonEventInfrastructure_Bus )
上図はCEIに関するWASの設定項目を示しています。CEIの設定を変更/追加する際などに活用下さい。
CEIのコンポーネントとしては、上記のほかに、
イベント・グループ・プロファイル・リスト(イベント・グループの指定)
フィルター・ファクトリー・プロファイル(フィルタリングの指定)
があります。
・データ・ストア・プロファイル
データ・ストア・プロファイルは、デフォルト・データ・ストア・プラグインにより使用されるプロパティーを定義
します。データ・ストア・プラグインは、イベント・サーバーにより受信されたイベントの永続的な保管に使用
されます。
・イベント・バス送信プロファイル
イベント・バス送信プロファイルでは、EJB 呼び出しを使用して、イベント・サーバーに同期してアクセスす
るエミッターにより使用されるプロパティーを定義します。このプロファイルはエミッター・ファクトリー・プロ
ファイルにより使用されます。
・エミッター・ファクトリー・プロファイル
エミッター・ファクトリー・プロファイルでは、エミッターにより使用されるプロパティーを指定します。エミッ
ター・ファクトリー・プロファイル内のプロパティーは、関連するエミッター・ファクトリーを使用して作成され
るすべてのエミッターの振る舞いに影響します。異なる振る舞いのエミッターが必要な場合は、追加のエ
ミッター・ファクトリー・プロファイルを作成することができます。
・イベント・サーバー・プロファイル
イベント・サーバーにより使用されるプロパティーを定義するプロファイル。デフォルトのイベント・サー
バー・プロファイルでは、イベントの配布およびパーシスタンス(永続性) が使用可能に設定され、デフォル
トのデータ・ストア・プラグインを使用するよう構成されます。
・JMS送信プロファイル
JMS 送信プロファイルでは、JMS キューを使用してイベント・サーバーに非同期にアクセスするエミッター
により使用されるプロパティーを定義します。このプロファイルは、エミッター・ファクトリー・プロファイルによ
り参照されます。
27
イベント・カタログ
‰
‰
CBEの3-tupleに当てはまらない情報は、Extended Dataに書かなければいけな
い
Extended Dataに何を定義したか(どういう名前のタグで何が書かれているのか)
という情報が分からないと、ログ分析時に困る
€
‰
システムを統合したときに、統合先のアプリが何を定義しているのかを知る必要があ
る
イベント・カタログは、イベントのフォーマットをDBに格納する機能
€
€
Extended Dataの定義(メタデータ)をデータ・カタログに定義することが可能なため、各
アプリケーションのExtended Dataの定義情報を一元管理できる
カタログに定義した情報にアクセスするAPIやコマンドが提供される
変更通知
イベント・サーバー
イベント
カタログBean
イベント定義の
追加/除去/置換
イベント定義の
追加/除去/置換
JMS
API
Event Catalog
インタフェース
変更通知
イベント
カタログ
J2EEアプリケーション
イベント定義の
インポート/
エクスポート
CLI
eventcatalog.jacl
イベント・カタログは、イベントの定義を管理するためのリポジトリーです。例えば、
Extended DataにUserIDというタグを指定しても、アプリAとアプリBでは意図や用途が
異なります。このように、何を定義しているか、という定義情報をカタログで管理すること
ができます。管理するアプリケーションや、Extended Dataの項目が多いほど、カタログ
はより重要な機能となることが考えられます。
イベント・カタログを使用して、そのアプリケーションの固有のイベント定義を管理するこ
とができます。
イベント・カタログのためのAPIが用意されているため、ユーザー・コーディングでイベン
トを定義したり、追加/除去/置換したりすることができます。
イベント・カタログでイベントが追加/除去/置換などがされた場合、通知イベントが発生し
ますので、必要な場合はそのイベントを取得することもできます。
28
管理コマンド
‰
CEIの管理のためのコマンドが提供されている
€
€
<WESBインストールディレクトリ>¥profiles¥<プロファイル名>¥event¥bin
ディレクトリに配置
Jaclスクリプトで提供されるため、wsadminツールを使用して実行
„
„
wsadmin –f XXXXXX.jacl <option>
wsadmin –f XXXXXX.jacl help
ヘルプの表示
スクリプト
内容
eventpurge.jacl
イベント・データベースからイベントを消去
eventbucket.jacl
イベント・データベース・バケット(高速にイベントを消去するた
めの仕組み)構成の表示/変更
eventcatalog.jacl
イベント・カタログ内のイベント定義のリスト/インポート/エクス
ポート
emitevent.jacl
イベント・サーバにイベントを送信
XMLファイルまたはコマンドラインのオプションでイベントの内
容を指定
eventquery.jacl
イベント・データベース内のイベントをリスト
イベントを取り扱うための管理コマンドも提供されています。
イベントの送信、取得や、消去がコマンドからも実行できます。
29
イベント・コンシューマの利用と開発
30
CBEブラウザー
‰
‰
イベント・データベースに格納されたイベントを閲覧することが可能
管理コンソールと同様の位置づけ
CBEブラウザーのアドレス
http://<ホスト名>:<ポート番号>/ibm/console/cbebrowser/
Network Deployment環境の場合は完全修飾名で指定
例)cell/nodes/<CEIのノード名>/servers/<CEIのサーバー>
/ejb/com/ibm/events/access/EventAccess
検索の条件を指定して(オプ
ション)、イベントデータベース
からイベントを取得
WESBを構築すると自動的にCBEブラウザーが導入されています。CBEブラウザーは、
管理コンソールと同様に管理用アプリケーションとして、デプロイメント・マネージャーに
インストールされています。シングル・サーバー構成の場合は、サーバー自体にインス
トールされています。
CBEブラウザーは、イベント・データベースに格納されたイベントを検索することができま
す。従ってイベント・コンシューマーの一種と言えるでしょう。
Network Deployment環境の場合は、「イベント・データ・ストア」の欄の指定に注意が必
要です。
http://www-1.ibm.com/support/docview.wss?uid=swg21218710
31
CBEブラウザーの出力例
ユーザ・アプリケーションからのイベントの例
(コーディングして自由に出力することが可能)
SCAモジュール(メディエーションモジュール)から
出力されたイベントの例
(WIDで容易に設定することが可能)
イベントの詳細なデータを
表示
イベントを取得して、閲覧した場合の例です。
WESB上で、複数のSCAモジュールやWebサービスリクエスター/プロバイダーが存在
し、複数のノードで稼動している構成の場合、どのサービスが呼ばれたか?どこでエ
ラーが起きているか?といった状況の把握は非常に難しいものです。
しかし、CBEイベントブラウザーを使用すれば、ユーザリクエストの流れや、リクエスト量
なども簡単に把握することができます。
32
CBEブラウザー(WIDのWESBテスト環境)
‰
WIDのWESBテスト環境でも、CEIのテストとCBEブラウザーを使用
することが可能
06年04月現在、このメニューは使用できないが、ブラウザーから
http://<ホスト名>:<ポート番号>/ibm/console/cbebrowser/
を指定すれば、CBEブラウザーの使用が可能
WIDでWESBテスト環境を使用する場合も、CEIやCBEブラウザーを使用することがで
きますが、ひとつ注意点があります。
右クリックでCBEイベントブラウザーを起動するメニューが表示されますが、これは現在
のところ稼動していません。しかし、ブラウザーからCBEブラウザーのアドレスを指定す
れば、問題なく使用できます。
33
イベント・コンシューマの開発
‰
イベント・コンシューマ
€
‰
イベント・サーバーからイベントを受け取るアプリケーション
イベント・コンシューマの種類
€
イベント・サーバーからの非同期イベント通知を受け取る
„
€
JMS APIを使用し、イベント通知をJMSメッセージとして受け取る
イベント・データベースに格納されたイベント・データを照会/処理する
„
Event Accessインタフェース(イベント・サーバー用アプリケーションで提供)を使用し、イベン
ト・データベースを検索する
イベント・サーバー
イベント・
コンシューマ
イベント
配布Bean
JMS
API
イベント
アクセスBean
Event Access
インタフェース
イベント
データベース
データ
ストアBean
イベント・コンシューマーは独自に開発することも可能です。
イベント・サーバーから配布されたイベントをJMS API経由で取得することもできますし、
イベント・データベースのイベントを検索することもできます。
これらのAPIを使用して、アプリケーションの稼動確認をしたり、ビジネス・パフォーマン
スを把握する独自のアプリケーションを開発することも可能です。
34
ユーザ・アプリケーションからのイベント検索
‰
イベント・データベースからイベントを検索するサンプル
import org.eclipse.hyades.logging.events.cbe.CommonBaseEvent;
import com.ibm.events.EventsException;
import com.ibm.events.access.EventAccess;
import com.ibm.events.access.EventAccessHome;
・・・省略
try {
CommonBaseEvent events[]
= null;
CBEとEventAccessのパッ
ケージをインポート
EventAccessビーンはSLSBの
// Event Accessビーンのlookup
ため、EventAccessビーンの
Hashtable jndiConfig = new Hashtable();
インスタンスを生成する
jndiConfig.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
jndiConfig.put(Context.PROVIDER_URL,providerUrl);
Context initial = new InitialContext(jndiConfig);
Object objref = initial.lookup("ejb/com/ibm/events/access/EventAccess");
EventAccessHome eventAccessHome = (EventAccessHome) PortableRemoteObject.narrow(objref,EventAccessHome.class);
EventAccess eventAccess = eventAccessHome.create();
//イベントの検索
events =eventAccess.queryEventsByEventGroup(eventGroup,eventSelector,true,number);
・・・省略
//取得したイベントからmsg属性を取得
if(printEvents)
{
for(int j = 0; j < events.length; j++){
System.out.println("The Message of event is " + events[j].getMsg());
}
}
}
・・・省略
取得したイベントはCBE API
を使用してイベントの属性
を取得する
上記の例は、イベント・データベースからイベントを検索するサンプルです。
取得したイベントはJavaオブジェクトのため、CBE APIを使用してイベントの属性を検索
してください。
35
まとめ
36
まとめ
‰
複数のコンポーネントから出力される異なるログフォーマットは、コモン・
ベース・イベント(CBE)で共通化できる
‰
CBEは、ログフォーマットを標準化するための仕様である
‰
共通イベント・インフラストラクチャー(CEI)は、CBE形式のイベントを収集
/永続化/配布するための管理機能を提供する仕組みである
‰
WIDでのSCA開発時は、CEIの開発を効率化するためのツール(イベン
ト・モニター)が提供されている
‰
分散するSCAモジュールから発生するイベントを収集し、問題判別やビ
ジネス上の分析に利用することができる
‰
CEIは、WPSやBusiness Monitorのインフラとしても使用される
上記に、CBE/CEIのポイントをまとめました。
CBEでログフォーマットを統一し、フォーマットが統一されたイベントをCEIで一元管理
することで、問題判別やビジネス上の分析にも役立てることができます。
また、CEIはWPSやBusiness Monitorのインフラとしても使用される重要な機能である
といえます。
37
Fly UP