[Database, WLS] Monitoring FAN Events

原文はこちら。
https://blogs.oracle.com/WebLogicServer/entry/fanwatcher_sample_program

fanWatcherはOracle Notification Service(ONS)のFast Application Notification(FAN)イベント情報を表示するサンプルプログラムです。これらのイベントはロードバランシングとインスタンスの立ち上げ・立ち下げイベントに関する情報を提供します。この情報は自動的に中間層のWebLogic ServerのActive GridLinkやUCPが処理します。FANイベントに関する詳細は、以下のホワイトペーパーをどうぞ。
Fast Application Notification (FAN) Includes FANwatcher: A utility to subscribe to ONS and view FAN events
http://www.oracle.com/technetwork/database/options/clustering/overview/fastapplicationnotification12c-2538999.pdf
ここで説明するプログラムはこのホワイトペーパーで説明したプログラムを機能強化したもので、このプログラムを変更して、所望のイベントを監視したり、構成の問題を診断するためにつかったりすることができます。コードはこちらからダウンロードできます(拡張子を.txtから.javaへ変更してください)。

このJavaアプリケーションを実行するためには、JDKを構成し、ons.jarとojdbc.jarをクラスパスに通す必要があります。クラスパスはデータベースサーバ上で実行するか、WebLogic ServerやUCPのある中間層で実行するかで変わります。クラスパス指定時はご利用のプラットフォームにあわせた適切なパスセパレータを使うようにしてください(セミコロンはWindows、コロンはその他のプラットフォーム)

コマンドラインの一般的な形式は以下の通りです。
java fanWatcher config_type [eventtype … ]

Event Type Subscription

イベントタイプは制限されたイベントを返すためだけのサブスクライバをセットアップします。どのタイプのイベントを返すかを指定せずに実行することもできます。コマンドラインでイベント名を指定すると、プログラムはイベントに単純一致するサブスクライバを設定します。指定されたパターンが通知ヘッダのどこかにあれば、比較ステートメントはtrueと評価されます。最も基本的なパターンパッチは空文字列(nullではありません)で、この場合すべての通知に一致します。パターンをダブルクォート(必須)で括り、大文字小文字を区別しない場合、"%"を前に付けます。

イベント処理は、このサンプルに示されているよりも完全です。サブスクリプション文字列は一般に1個以上の比較ステートメントで構成されており、ORの関係を示すブール演算子 '|' もしくはANDの関係を表す '&" を使って別の比較ステートメントとそれぞれ論理的に関連しています。括弧は、グループにこれらの比較ステートメントをグループ化するために使用され、左括弧の前の '!' は括弧内の評価値を否定します。

各々の個別の比較ステートメントは二重引用符 ("") で囲む必要があり、"パターン" もしくは "名前=値" という2個の基本的な形のうち一つを取ることができます。"パターン" は通知ヘッダの単純文字列の一致であり、指定された "パターン" が通知ヘッダにあれば、比較ステートメントはtrueと評価されます。最も基本的なパターンパッチは空文字列(nullではありません)で、この場合すべての通知に一致します。

"名前 = 値" 形式は指定値に対する名前を使い、ONS通知ヘッダもしくはプロパティ名を比較し、値が一致する場合、比較ステートメントはtrueと評価されます。指定されたヘッダやプロパティ名が通知ヘッダに存在しない場合、比較ステートメントはfalseと評価されます。左ダブルクォートの前に%を付けると比較ステートメントは大文字小文字を区別せずに解釈されます。"名前 = 値" 比較ステートメントの場合、このオプションを使って値のみを大文字・小文字の区別せずに取り扱うことにご注意ください。名前のルックアップは常に大文字・小文字を区別して評価します。左ダブルクォートの前に$記号を配置すると比較ステートメントを正規表現で解釈します。標準のPOSIX正規表現をサポートしています。正規表現を使って大文字・小文字も区別しないように指定する場合$記号と%記号を左ダブルクォートの前に$%の順で配置します。

感嘆符 ('!') だけで構成される特殊なケースのサブスクリプション文字列は、サブスクリプションが任意の通知が一致しないことを意味します。

イベントを変更して特定のサービスを選択したい場合、次のようにします。
%"eventType=database/event/servicemetrics/<serviceName> "

Running with Database Server 10.2 or later

この方法はデータベース・サーバ上で実行し、Grid Infrastructureクラスタで利用可能なONSデーモンに直接接続します。FANwatcherユーティリティを実行する場合、$CRS_HOME/opmn/conf/ons.configファイルへアクセスできる権限を持つユーザーで実行する必要があります。このファイルはONSデーモンが開始するために利用され、このプログラムがアクセスします。コマンドラインの構成タイプは "crs" に設定します。
# CRS_HOME should be set for your Grid infrastructure
echo $CRS_HOME
CRS_HOME=/mypath/scratch/12.1.0/grid/
CLASSPATH="$CRS_HOME/jdbc/lib/ojdbc6.jar:$CRS_HOME/opmn/lib/ons.jar:."
export CLASSPATH
javac fanWatcher.java
java -Doracle.ons.oraclehome=$CRS_HOME fanWatcher crs

Running with WLS 10.3.6 or later using an explicit node list

クライアント環境で実行するには2つの方法があります。明示的なノードリストを使う方法と、自動ONSを使う方法です。これは、WebLogic Serverのために構成する場合、利用可能なojdbcN.jarとons.jarが必要です。直接UCPと共に実行するようセットアップする場合、これらのjarファイルがCLASSPATHに含まれる必要があります。

最初の方法では、Oracle JDBCドライバとDatabase 11g以後で動作します(SCANは、WLS10.3.6と同梱された11.2.0.3 jarファイルを含むOracle Databaseのバージョン以後でサポートされます)。
# Set the WLS environment using wlserver*/server/bin/setWLSEnv
CLASSPATH="$CLASSPATH:." # add local directory for sample program
export CLASSPATH
javac fanWatcher.java
java fanWatcher "nodes=rac1:6200,rac2:6200" database/event/service
ノードリストは改行文字で区切られた1個以上の名前 = 値 の形式の文字列です。ノードリストでは2個のフォーマットがサポートされています。
一つ目はONS全バージョンで利用可能です。以下の名前を指定することができます。

  • nodes(必須):host:portの組み合わせをコンマ区切りで表記します。
  • walletfile:ONSサーバとのSSL通信のためのOracle walletファイル
  • walletpassword:Oracle walletファイルを開くためのパスワード

二つ目の方法は、Database 12.1.0.2以後で利用可能なもので、複数のクラスタやノードリストを持つより複雑なトポロジーをサポートし、以下の名前を持ちます。

  • nodes.id—この値は、リモートONSサーバの一意のトポロジーを表すノードのリストです。IDはノードリストの一意の識別子を指定します。重複エントリは無視されます。任意のリストで構成済みのノードのリストには、同じクライアントのために、他のリストで構成済みのノードが含まれていてはいけません。もし含まれていると、重複通知が送信・配信されます。リストは、ONSデーモンのリスニングアドレスとポートのペアをコロンで区切ったものをカンマで区切ります。
  • maxconnections.id—この値はONSサーバで維持される最大同時接続数を指定します。idはこのパラメータが適用されるノードリストを指定します。デフォルト値は3です。
  • active.id—trueの場合、リストはアクティブでONSサーバの構成済み個数に対する接続を自動的に確立します。falseの場合、リストは非アクティブで、アクティブなリストに対する接続が確立できない場合におけるフェールオーバーリストとしてのみ利用されます。非アクティブなリストはある時点における、あるアクティブなリストに対するフェールオーバとしてのみ提供することができ、アクティブなリストで1個の接続が再度確立すれば、フェールオーバリストは非アクティブに戻ります。ただし、リストがフェールオーバした後にクライアントが発行する通知のみをフェールオーバリストに送信することにご注意ください。idは、このパラメータが適用されるノードリストを指定します。デフォルト値はtrueです。
  • remotetimeout —各リモートサーバへの接続タイムアウト時間(単位はミリ秒)。リモートサーバがこのタイムアウト時間内に応答しない場合、接続を閉じます。デフォルトタイムアウト時間は30秒です。

walletfileとwalletpasswordも指定できます(すべてのONSサーバに対して1個のwalletfileがあることに注意してください)。ノード属性をname.id属性と組み合わせることはできません。

Running with WLS using auto-ONS

Auto-ONSはOracle Database 12.1.0.1から利用できます。それまでは、何も情報を入手できませんでした。Database 12cR1のドライバを同梱した最初のWebLogic Server 12.1.3なので、このアプローチはデータベースのjarファイルをアップグレードしなければ動作しません。Auto-ONSはデータベースのの接続を取得してONSの情報をサーバに対してクエリすることで動作します。このプログラムが動作するためには、ユーザ、パスワード、URLが必要です。サンプルプログラムでは、(コマンドラインで入力しなくてすむよう)値が環境上にある前提です。必要であれば、プログラムを変更してプロンプトを表示して入力させたり、値をJavaコード中に埋め込んだりすることもできます。
# Set the WLS environment using wlserver*/server/bin/setWLSEnv
# Set the credentials in the environment. If you don't like doing this,
# hard-code them into the java program
password=mypassword
url='jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=\
(ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521))\
(ADDRESS=(PROTOCOL=TCP)(HOST=rac2)(PORT=1521)))\
(CONNECT_DATA=(SERVICE_NAME=otrade)))'
user=myuser
export password url user
CLASSPATH="$CLASSPATH:."
export CLASSPATH
javac fanWatcher.java
java fanWatcher autoons

fanWatcher Output

出力結果は以下のようになります。プログラムを変更して出力結果を所望通りに変更することができます。この短い出力結果には、メトリックイベントとインスタンスの一つでのサービス停止に伴うイベントがあります。
** Event Header **
Notification Type: database/event/servicemetrics/otrade
Delivery Time: Fri Dec 04 20:08:10 EST 2015
Creation Time: Fri Dec 04 20:08:10 EST 2015
Generating Node: rac1
Event payload:
VERSION=1.0 database=dev service=otrade { {instance=inst2 percent=50 flag=U
NKNOWN aff=FALSE}{instance=inst1 percent=50 flag=UNKNOWN aff=FALSE} } timestam
p=2015-12-04 17:08:03


** Event Header **
Notification Type: database/event/service
Delivery Time: Fri Dec 04 20:08:20 EST 2015
Creation Time: Fri Dec 04 20:08:20 EST 2015
Generating Node: rac1
Event payload:
VERSION=1.0 event_type=SERVICEMEMBER service=otrade instance=inst2 database=dev db_domain= host=rac2 status=down reason=USER timestamp=2015-12-04 17:

0 件のコメント:

コメントを投稿